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

Noraad

  • Осваиваюсь на форуме
  • 49
  • 2 / 0
Добавить класс к тегу <li>
« : 05.05.2014, 13:08:50 »
Привет всем. Недавно столкнулся с проблеммой, если кому-то нужно вот решение:

Чтобы добавить класс к тегу li (ну мало-ли зачем понадобится) нужно прописать маленький скрипт:

<script type="text/javascript"> 
    jQuery(document).ready(function ($) {
        $(".класс вашего меню (ul) li").addClass("класс который нужно добавить");
    }); 
</script>

Вот и все - спасибо за внимание
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Добавить класс к тегу <li>
« Ответ #1 : 05.05.2014, 15:22:53 »
Это добавит класс ко всем элементам списка, исключая вложения. Нужно будет указывать конкретный item-id.
*

verstalshik

  • Завсегдатай
  • 1754
  • 95 / 1
Re: Добавить класс к тегу <li>
« Ответ #2 : 05.05.2014, 15:41:52 »
Имелось ввиду добавить класс ко всем элементам определенного списка! зачем класс одному пункту? хз)))
кстати, не все планшеты работают толково со скриптами, надо иметь ввиду, чуть какой конфликт - все скрипты летят в тартарары!
уж всяко проще через класс меню колдовать с пунктами, не?))) без всяких скриптов! в 95% случаев класс для пункта меню всяко не нужен, всегда можно обойтись классом меню и все!!
ну в самом деле, .class li {} разве не сработает? сработает!
❶ НЕ СПРАВЛЯЕШЬСЯ САМ???  Поможем тут...  ❷ Калькулятор доставки - ЗАКАЖИ!!!...  ❸ Каталог компаний - ЖМИ!!!...  ❹ НОВИЧКИ! ВСЕ сюда! Первая консультация БЕСПЛАТНО!!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Добавить класс к тегу <li>
« Ответ #3 : 05.05.2014, 15:45:11 »
зачем класс одному пункту? хз)))
Неоднократно поднималась тема. как тому или иному пункту меню добавить класс active или selected: вот, пожалуйста. Хотя, имхо, это не вариант. Уж проще сразу в переопределенном шаблоне меню назначить необходимое, и скриптов не надо будет никаких.
*

Noraad

  • Осваиваюсь на форуме
  • 49
  • 2 / 0
Re: Добавить класс к тегу <li>
« Ответ #4 : 05.05.2014, 16:01:36 »
Ну я же не настаиваю) Мне вот понадобилось, можно модифицировать скрипт и назначить класс любому ли списка. Просто я долго искал решение, нашел и решил поделиться вот и все))
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Добавить класс к тегу <li>
« Ответ #5 : 05.05.2014, 16:07:21 »
Просто я долго искал решение, нашел и решил поделиться вот и все))
Спасибо. Это, в общем-то, азы js, но здесь многие именно их и ищу, и далеко не всегда и сразу находят. А те кто находят не здесь - не всегда здесь спешат делиться, ограничиваясь сухим "решено". Нашел, поделился - однозначно +
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Добавить свои фильтры поиска

Автор denism300

Ответов: 3
Просмотров: 1209
Последний ответ 05.11.2016, 17:14:35
от denism300
Как добавить выбор/загрузку файла в свой модуль в админке?

Автор Absalem

Ответов: 7
Просмотров: 2083
Последний ответ 07.09.2016, 22:48:54
от fsv
как добавить таблицу из phpMyAdmin?

Автор Martofpain

Ответов: 10
Просмотров: 1542
Последний ответ 29.03.2016, 12:01:12
от Shustry
Переключение плитка-список. Как добавить куки?

Автор Театрал

Ответов: 2
Просмотров: 1355
Последний ответ 21.02.2016, 21:31:36
от Театрал