113просмотров
10 сентября 2025 г.
question📷 ФотоScore: 124
👩‍💻 Как триггерить события для плагинов на манер Joomla 5+? В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно: - создать объект класса события - передать в него параметры use Joomla\CMS\Event\AbstractEvent; use Joomla\CMS\Factory; use Joomla\CMS\Plugin\PluginHelper; // Грузим плагины нужных групп PluginHelper::importPlugin('system'); // Создаём объект события $event = AbstractEvent::create('onAfterInitUniverse', [ 'subject' => $this, 'data' => $data, // какие-то данные 'article' => $article, // ещё материал вдовесок 'product' => $product, // и товаров подвезли ]); // Триггерим событие Factory::getApplication()->getDispatcher()->dispatch( $event->getName(), // Тут можно строку передать 'onAfterInitUniverse' $event ); // Получаем результаты // В случае с AbstractEvent это может быть не 'result', // а что-то ещё - куда сами отдадите данные. // 2-й аргумент - значение по умолчанию, // если не получены результаты $results = $event->getArgument('result', []); Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent; $event = MyCoolEvent::create('onAfterInitUniverse', [ 'subject' => $this, 'eventClass' => MyCoolEvent::class, // ваш класс события 'data' => $data, // какие-то данные 'article' => $article, // ещё материал вдовесок 'product' => $product, // и товаров подвезли ]); Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla. 🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry. @joomlafeed #joomla #php #webdev
113
просмотров
2585
символов
Да
эмодзи
Да
медиа

Другие посты @jpathru

Все посты канала →
👩‍💻 Как триггерить события для плагинов на манер Joomla 5+ — @jpathru | PostSniper