Форум русской поддержки Joomla!® CMS
03.12.2016, 10:45:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Объясните как работает MVC Override с помощью плагина Joomla!

 (Прочитано 118 раз)
0 Пользователей и 1 Гость смотрят эту тему.
kens1n
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 11


« : 08.10.2016, 22:14:21 »

Разбираюсь с работой Joomla! в целом. Недавно встал вопрос, как работает переопределение классов в Joomla!
Я понимаю что он заменяет любой класс в Joomla. Я могу создать такой плагин. Но я не понимаю как он действует.
Вот смотрите если подключить два файла у которых будут разные адреса, но одинаковые классы внутри, то мы получим конфликт классов. Как в Joomla! это обходится?
Записан
robert
Профи
********

Репутация: +342/-11
Offline Offline

Пол: Мужской
Сообщений: 3567


« Ответ #1 : 08.10.2016, 22:49:18 »

У вас какой-то сумбур.
Если под
переопределение классов
вы имели в виду наследование классов, то Joomla тут ни причем - это PHP, и он не единственный язык, где работает такой принцип.
Я понимаю что он заменяет любой класс в Joomla.
Неправильно понимаете.
Вот смотрите если подключить два файла у которых будут разные адреса, но одинаковые классы внутри, то мы получим конфликт классов. Как в Joomla! это обходится?
Никак.
Записан
kens1n
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 11


« Ответ #2 : 08.10.2016, 22:53:28 »

Я написал все правильно. Смотрите вот исходная статья.
https://docs.joomla.org/How_to_override_the_component_mvc_from_the_Joomla!_core/ru
Тут создается плагин который реагирует на событие "onAfterRoute"
В нем мы подключаем класс который нужно заменить и вместо исходного класса к примеру UserController будет работать наш класс.
require_once(dirname(__FILE__). '/comcontentoverride/my_content_controller.php');
Вот мне интересен принцип действия именно этой части Joomla!
Записан
robert
Профи
********

Репутация: +342/-11
Offline Offline

Пол: Мужской
Сообщений: 3567


« Ответ #3 : 08.10.2016, 23:05:14 »

А, вы о плагине. Прошу прощения, не внимательно читал. Тогда да, по сути вы написали и подсунули свой компонент вместо вызываемого компонента.
Первый и последний пункты моего предыдущего поста остаются в силе.
Записан
kens1n
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 11


« Ответ #4 : 08.10.2016, 23:18:20 »

К примеру если я заменяю модель компонента. То в моем component.php все еще стоит require_once('models/modelName.php'). А работает все равно замененный файл.
Мне интересно как это работает. Сам процесс.
Записан
robert
Профи
********

Репутация: +342/-11
Offline Offline

Пол: Мужской
Сообщений: 3567


« Ответ #5 : 08.10.2016, 23:41:42 »

Не очень понимаю ваш вопрос, но если вас смущает тот факт, что и в оригинальном, и в вами переопределенном файлах существует классы с одикаковыми названиями, то принцип работы такой: должен быть подключен только 1 из них - либо оригинал, либо ваш. Если же все таки хотите загрузить оба файлы, то вы должны изменить названия классов.
Записан
kens1n
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 11


« Ответ #6 : 09.10.2016, 10:40:52 »

в оригинальном, и в вами переопределенном файлах существует классы с одикаковыми названиями, то принцип работы такой: должен быть подключен только 1 из них - либо оригинал, либо ваш.
Итак, меня интересует как так получается что загружается только переопределеный файл. Ведь в компоненте я явно подключаю свой стандартный файл. Почему используется только переопределенный файл? Ведь require_once смотрит уникальность по пути, а не по классу.
Записан
dmitry_stas
Профи
********

Репутация: +794/-4
Offline Offline

Сообщений: 7732



« Ответ #7 : 09.10.2016, 11:41:43 »

не совсем понимаю суть вопроса, чего в итоге надо добиться. но может быть имеется в виду это?
Записан
robert
Профи
********

Репутация: +342/-11
Offline Offline

Пол: Мужской
Сообщений: 3567


« Ответ #8 : 09.10.2016, 12:00:25 »

Несмотря на то, что этот форум - не песочница ни для Joomla, ни для PHP-новичков, я попробую вам ответить. Смотрим код по приведенной вами ссылке:
Код
class plgSystemComContentOverride extends JPlugin {
     public function __construct(&$subject, $config = array()) {
        parent::__construct($subject, $config);
    }
 
    public function onAfterRoute() {
        $app = JFactory::getApplication();
        if('com_content' == JRequest::getCMD('option') && !$app->isAdmin()) {
            require_once(dirname(__FILE__). '/comcontentoverride/my_content_controller.php');
        }
    }
}
 
В функции onAfterRoute() видно, что при вызове компонент com_content на фронте с последующим исполнением /com_content/controller.php должен исполняться /comcontentoverride/my_content_controller.php вместо последнего.
Чтобы вам могли дать исчерпывающий ответ, вы должны задать соответствующий вопрос (привести ваш код и описать шаги, которые вы делали и т.д.).
« Последнее редактирование: 09.10.2016, 12:03:58 от robert » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet