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

avatara

  • Осваиваюсь на форуме
  • 15
  • 0 / 1
Хотчу продублировать меню товара на главной странице картинками.
Как сделать что бы категории товаров выводились на главную страницу сайта?
Через поиск нашел ответ, сказано что компонент товара нужно сделать главным, но как?

Или может счуществует другое решение? вот сайт www.avatara.kiev.ua нужно что бы при наборе этого линка выводилось http://avatara.kiev.ua/index.php?page=shop.index&option=com_virtuemart&Itemid=1
*

Aleks_El_Dia

  • Живу я здесь
  • 3671
  • 353 / 0
  • AEDStudio Joomla! Direction
Заходите в mainmenu и вместо пункта меню Главная на первое место ставите VirtueMart. Это к вопросу как сделать главным компонент.
Спам придумали боги в отместку за наши молитвы (с) Рома Воронежский
На молоко: Z369038872422 || R210017695494 || U247040729215 || ЯД 410011288250383
Мигрирую сайты, переношу расширения J!1.0->J!1.5->J!2.5. Более 50 успешных миграций.
*

avatara

  • Осваиваюсь на форуме
  • 15
  • 0 / 1
Заходите в mainmenu и вместо пункта меню Главная на первое место ставите VirtueMart. Это к вопросу как сделать главным компонент.
А можно для меня поподробней? В данной фразе mainmenu ты имеешь в виду зайти в модули?
Заходил и в модули в меин меню но там пункта главная не нашел?
p.s. помогите разобраться, а то от кучи доков прочитанных, в голове твориться каша.
*

Aleks_El_Dia

  • Живу я здесь
  • 3671
  • 353 / 0
  • AEDStudio Joomla! Direction
нет не в модули. Админка - Меню - mainmenu
Только не забудьте создать ссылку в меню на компонент (ее то и нужно поставить на первое место в mainmenu)
Спам придумали боги в отместку за наши молитвы (с) Рома Воронежский
На молоко: Z369038872422 || R210017695494 || U247040729215 || ЯД 410011288250383
Мигрирую сайты, переношу расширения J!1.0->J!1.5->J!2.5. Более 50 успешных миграций.
*

avatara

  • Осваиваюсь на форуме
  • 15
  • 0 / 1
нет не в модули. Админка - Меню - mainmenu
Только не забудьте создать ссылку в меню на компонент (ее то и нужно поставить на первое место в mainmenu)

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

Активный пункт mainmenu для категории VirtueMart

Автор sashgera

Ответов: 11
Просмотров: 3374
Последний ответ 13.08.2020, 16:43:22
от sivers
Какие программы вы используете для учета товаров, заказов и клиентов?

Автор nick71

Ответов: 4
Просмотров: 7220
Последний ответ 09.02.2017, 17:14:43
от api_net_ua
Как вставить в середину статьи на странице категорию товара магазина Virtuemart 1.1.2

Автор malalex

Ответов: 7
Просмотров: 9682
Последний ответ 24.08.2015, 01:01:23
от trubiser
Отключение доставки для некоторых групп товаров

Автор Mirsaytov

Ответов: 3
Просмотров: 5538
Последний ответ 16.05.2014, 18:29:18
от Mishok333
Сортировка товаров

Автор vadsson

Ответов: 13
Просмотров: 9422
Последний ответ 22.04.2014, 13:20:12
от mrfruze