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

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Re: Код, смешной до невозможности
« Ответ #30 : 13.11.2015, 22:32:12 »
zomby6888 - не, у него там несколько условий И в пределах одного условия, кейсами действительно не пойдет
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Код, смешной до невозможности
« Ответ #31 : 13.11.2015, 22:36:25 »
break удобно пропускать когда нужно в любом случае проверить условие ниже. Это делает код более гибким:
Код: php
switch (true) {
    case (condition1):
         // do something...        
    case (condition2):
        // then do something else
        break;
    case (condition3):
    deafult:
        //if condition 3 or default    
}
« Последнее редактирование: 13.11.2015, 22:41:02 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Код, смешной до невозможности
« Ответ #32 : 13.11.2015, 22:39:58 »
Почему не выйдеет?
Код: php
switch (true) {
 case( !empty($condition[1]) && (($condition[1]==$location) || ($condition[1]=='all'))) :
    ...// и так далее
}

Ну условия можно разбить и систематизировать еще. А то там действительно непонятно что. Case в любом случае лучше читаемый когда зоопарк условий начинается.
интернет-блог: http://websiteprog.ru
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Re: Код, смешной до невозможности
« Ответ #33 : 13.11.2015, 22:41:32 »
я имел в виду, что сильно упростить не выйдет, в данном случае что кейсы что ифэлсе - читаемы примерно одинаковы
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Re: Код, смешной до невозможности
« Ответ #34 : 13.11.2015, 22:43:28 »
Код
switch (true) {
 case( !empty($condition[1]) && (($condition[1]==$location) || ($condition[1]=='all'))) :
    default:/// и условие, что ниже
}
так не прокатит?неправильно?
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Код, смешной до невозможности
« Ответ #35 : 13.11.2015, 22:43:57 »
Я всегда использую switch..case когда больше трех условий
интернет-блог: http://websiteprog.ru
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: Код, смешной до невозможности
« Ответ #36 : 13.11.2015, 22:53:38 »
По логике кейс - это одно значение, а не большое условие.
По крайней мере для меня, воспитанного на паскалях и сях :-)
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Код, смешной до невозможности
« Ответ #37 : 13.11.2015, 23:02:05 »
По логике кейс - это одно значение, а не большое условие.
По крайней мере для меня, воспитанного на паскалях и сях :-)
О, боюсь что логика паскаля здесь только вредит, уж я, начинавший во времена 5 и 6 BTP и как угодно имевший все версии delphi, это хорошо понял
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: Код, смешной до невозможности
« Ответ #38 : 13.11.2015, 23:06:35 »
Ну да, меня постоянно в ступор вводит отсутсвие строгой типизации и непонятки сравнения переменной с NULL
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Код, смешной до невозможности
« Ответ #39 : 13.11.2015, 23:10:59 »
В ссях вроде только скалярные могут быть выражение. Здесь это преимущество  и используется кстатии часто. Правда пишут что может быть чуть менее производительнее, но это все мелочи а код выглядит понятнее и компактнее все же. Особенно когда много условий(нет необходимости в лишний "{}").Сравните:
Код: php
if($a == $b) {
    ...
}
if($c == $d) {
    ...
}
if($e == $f) {
    ...
}
if($g == $h) {
    ...
}

или

Код: php
switch(true) 
{
  case $a == $b:
    ...
  case $c == $d:
    ...
  case $e == $f:
    ...
  case $g == $h:
    ...
}
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Код, смешной до невозможности
« Ответ #40 : 13.11.2015, 23:14:13 »
null в пыхе - это объявленный, но не присвоенный ^Pointer в паскале, сравнение неверное конечно, но я рассматриваю это именно так, для упрощения понимания
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Код, смешной до невозможности
« Ответ #41 : 13.11.2015, 23:18:18 »
Ну да, меня постоянно в ступор вводит отсутсвие строгой типизации и непонятки сравнения переменной с NULL

Все тоже самое в javascript только там вместо null - undefined
интернет-блог: http://websiteprog.ru
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться