Новости Joomla

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер 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

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

Kashastealer

  • Новичок
  • 2
  • 0 / 0
Нужно сделать так, чтобы на одной из страниц сайта не отображалась шапка.Кто-то сталкивался с подобным? Как получалось реализовать?
*

Webster

  • Захожу иногда
  • 185
  • 7 / 0
*

Webster

  • Захожу иногда
  • 185
  • 7 / 0
если шапка не модулем, а в шаблоне
то просто в настройках меню присваеваете класс странице например skrit
шапка допустим имеет класс или ID top
и делаете стиль
.skrit .top{display:none;} - это если класс
.skrit #top{display:none;} - это если ID
*

dmitry_stas

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

Webster

  • Захожу иногда
  • 185
  • 7 / 0
а если модулем, то так сделать нельзя? :)
так если модулем то вообще не стоит заморачиваться отключить в настройках показ на нужной странице и все
*

dmitry_stas

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

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Ну да, а если в шапке лого картинкой, и браузер будет грузит картинку, а потом прятать.
Лучший вариант через PHP
Код
if(strpos(JURI::Current(),'catalog') == false) {
 выводим шапку}
*

Webster

  • Захожу иногда
  • 185
  • 7 / 0
Ну да, а если в шапке лого картинкой, и браузер будет грузит картинку, а потом прятать.
Лучший вариант через PHP
Код
if(strpos(JURI::Current(),'catalog') == false) {
 выводим шапку}
Тут согласен. Но опять же момент в том как она выводится.
*

Kashastealer

  • Новичок
  • 2
  • 0 / 0
Тут согласен. Но опять же момент в том как она выводится.

Спасибо за активность) Пока мы думали, клиент уточнил, что скрыть нужно только один элемент шапки *ОХ-Х-Х*
Получилось сделать скриптом:

<script>// <![CDATA[
document.getElementById('id объекта').style.display= 'none'; // ]]></script>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как сделать чтобы определенный модуль был только на одной странице

Автор alexS

Ответов: 25
Просмотров: 23352
Последний ответ 05.06.2013, 00:46:16
от puserfill
Как сделать сайт внутри сайта?

Автор heled

Ответов: 1
Просмотров: 9539
Последний ответ 22.12.2011, 10:51:05
от Efanych
Как сделать отображение модуля только на главной странице.

Автор LoginGooD

Ответов: 3
Просмотров: 7823
Последний ответ 18.04.2010, 22:12:59
от vtsvang
Как вывести материал с html-страниц в центр шаблона сайта

Автор Magam

Ответов: 2
Просмотров: 5160
Последний ответ 07.09.2008, 13:37:35
от Mitrich
Как вывести на одной странице список категорий и статьи всех категорий?

Автор mkredaktor

Ответов: 8
Просмотров: 6471
Последний ответ 21.02.2008, 21:57:26
от beliyadm