0 Пользователей и 1 Гость просматривают эту тему.
  • 8 Ответов
  • 1634 Просмотров
*

kens1n

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

robert

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

kens1n

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Я написал все правильно. Смотрите вот исходная статья.
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

  • Живу я здесь
  • 4974
  • 457 / 20
А, вы о плагине. Прошу прощения, не внимательно читал. Тогда да, по сути вы написали и подсунули свой компонент вместо вызываемого компонента.
Первый и последний пункты моего предыдущего поста остаются в силе.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

kens1n

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

robert

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

kens1n

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

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
не совсем понимаю суть вопроса, чего в итоге надо добиться. но может быть имеется в виду это?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Несмотря на то, что этот форум - не песочница ни для Joomla, ни для PHP-новичков, я попробую вам ответить. Смотрим код по приведенной вами ссылке:
Код: php-brief
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, 11:03:58 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Условия отображения для конкретной группы пользователей Joomla 3.4.x

Автор dmik

Ответов: 15
Просмотров: 2597
Последний ответ 29.05.2020, 22:42:15
от voland
Вывод отладочной информации системного плагина

Автор effrit

Ответов: 23
Просмотров: 1018
Последний ответ 02.10.2018, 10:24:46
от effrit
Подключить Joomla Framework в своем файле

Автор kolhoz

Ответов: 1
Просмотров: 1469
Последний ответ 06.12.2017, 17:15:42
от Aleks.Denezh
Переделать запросы к БД под Joomla

Автор Glog

Ответов: 3
Просмотров: 1156
Последний ответ 03.07.2017, 17:53:28
от Glog
Поддержка Joomla в PhpStorm

Автор b2z

Ответов: 51
Просмотров: 10245
Последний ответ 28.12.2016, 23:31:39
от b2z