Как вызвать событие только для указанной (одной или более) группы плагинов в 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);
