Как вызвать событие только для указанной (одной или более) группы плагинов в Joomla 5
Обычно события в Joomla вызываются следующим образом:
Шаг 1: Получаем объект диспечера
В коде Joomla можно найти несколько способов получить объект диспечера:
От приложения:
$dispatcher = Joomla\CMS\Factory::getApplication()->getDispatcher();
Из контейнера:
$dispatcher = Joomla\CMS\Factory::getContainer()
->get(Joomla\Event\DispatcherInterface::class);
Свой диспечер (если ваш класс реализует Joomla\Event\DispatcherAwareInterface
):
$dispatcher = $this->getDispatcher();
Шаг 2: Подключаем плагины нужной группы
PluginHelper::importPlugin('mycomponent');
Шаг 3: Создаём экземпляр события и вызываем метод диспечера dispatch
$dispatcher->dispatch('onMyComponentEvent', $event);
В результате будут вызваны плагины не только группы mycomponent
, но и всех ранее подключенных групп (например, 'system'
). Потому что любым из вышеперечисленных способов, мы получаем возвращают один и тот же экземпляр диспечера. И код PluginHelper::importPlugin('mycomponent');
работает с тем же экземпляром диспечера.
А следующим образом можно вызвать плагины только нужных групп:
// Создаём свой обьъект диспечера
$dispatcher = new Dispatcher;
// Подключаем нужную группу плагинов, и четвертым параметром передём наш диспечер
PluginHelper::importPlugin('mycomponent', null, true, $dispatcher);
// Так же можем подключить ещё одну группу
PluginHelper::importPlugin('content', null, true, $dispatcher);
// Создаём екземпляр события
// ...
// Вызываем метод dispatch
$dispatcher->dispatch('onMyComponentEvent', $event);