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

kens1n

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

robert

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

kens1n

  • Захожу иногда
  • 11
  • 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

  • Профи
  • 4081
  • 376
А, вы о плагине. Прошу прощения, не внимательно читал. Тогда да, по сути вы написали и подсунули свой компонент вместо вызываемого компонента.
Первый и последний пункты моего предыдущего поста остаются в силе.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

kens1n

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

robert

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

kens1n

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

dmitry_stas

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

robert

  • Профи
  • 4081
  • 376
Несмотря на то, что этот форум - не песочница ни для 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 »
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Справочник по классам API Joomla 3 и Joomla 2

Автор AlexeyGal

Ответов: 41
Просмотров: 1107
Последний ответ 20.09.2017, 00:50:17
от AlexeyGal
Переделать запросы к БД под Joomla

Автор Glog

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

Автор b2z

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

Автор jitendra

Ответов: 2
Просмотров: 204
Последний ответ 15.12.2016, 17:13:15
от jitendra
Как при помощи функций Joomla узнать номер страницы в пагинации?

Автор tora312

Ответов: 51
Просмотров: 1112
Последний ответ 06.12.2016, 08:25:43
от tora312