Новости 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 Гость просматривают эту тему.
  • 1 Ответов
  • 1350 Просмотров
*

Ursula

  • Осваиваюсь на форуме
  • 19
  • 1 / 0
IT_Motion в IE6 и IE7
« : 18.09.2009, 18:07:08 »
Привет,
кто-нибудь работал с этим шаблоном? Почему он может кардинально слетать в шестом и седьмом осле? Причем стили для них вроде есть, и подключаются условными комментариями, но не подгружаются.

Подключение выглядит так:
Код
<!--[if lte IE 7]>
<link rel="stylesheet" type="text/css" href="$this->baseurl ?>/templates/<?php echo $this->template ?>/css/ie.css" />
<![endif]-->

<!--[if lt IE 7]>
<style type="text/css" media="screen">
#content .gradient_top, #content .main_bg_top, #content .main_bg_bottom ,#bottom #bottom_bottom,  li.smallfont a, li.normalfont a, li.largefont a, #logo a, form.loginform p.login_bg, form.loginform .button, .iceslider_carouselslide ul.slidingbuttons li.carouselslider_prev, .iceslider_carouselslide ul.slidingbuttons li.carouselslider_next, .iceslider_carouselslide ul.slidingbuttons li.carouselslider_stop, .iceslider_carouselslide ul.slidingbuttons li.carouselslider_play, ul.checklist li {
behavior:url(<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/css/iepngfix.htc);}

 </style>
<![endif]-->
« Последнее редактирование: 18.09.2009, 18:17:49 от Ursula »
*

Ursula

  • Осваиваюсь на форуме
  • 19
  • 1 / 0
Re: IT_Motion в IE6 и IE7
« Ответ #1 : 18.09.2009, 19:07:14 »
Вот так-таки никто не заметил, что в
Код
href="$this->baseurl ?>

не хватает
Код
<?php echo

Ну что ж, всем спасибо. Разобралась.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться