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

aleks_yug

  • Давно я тут
  • 628
  • 83 / 0
Смотрите вот пример. Последние посещенные страницы пользователем
Спасибо, посмотрел. Вариант с сессией наверное вполне можно использовать. а с cookie - не знаю... В VM (я про 1.5) с куками были проблемы. приходилось отключать в админке. Тогда этот вариант не отработает. Или это не так?
*

aleks_yug

  • Давно я тут
  • 628
  • 83 / 0
Вот этот роутер использую http://joomlaforum.ru/index.php/topic,130264.new.html
Именно его я и имел ввиду. Роутер у Даника отличный, но доп. модулями и т.п. что-то дружить не хочет. А у него спросить не хотите?
*

newjey

  • Захожу иногда
  • 405
  • 2 / 0
Именно его я и имел ввиду. Роутер у Даника отличный, но доп. модулями и т.п. что-то дружить не хочет. А у него спросить не хотите?
Спрошу)
*

newjey

  • Захожу иногда
  • 405
  • 2 / 0
Ну во это вполне можно убрать:
$q  = "select category_id FROM #__{vm}_product_category_xref ";
   $q .= "WHERE product_id = '".$product2_id."' ";
   $q .= "and product_publish = 'Y'";

А за что отвечают данные запросы?
*

ancous1981

  • Новичок
  • 6
  • 0 / 0
Знатоки нужна помощь, ковырял код и где-то закоментировал. или вообще удалил. Теперь не работают недавно просмотренные и рекомендованные товары.  В настройках VirtueMart включены, в recent.tpl.php не закоментированы. Не могу найти где запарол.  сайт http://test.jewi-shop.ru
*

nikazz

  • Новичок
  • 8
  • 0 / 0
как в недавно просмотренных товарах увеличить количество  товаров, у меня отображается всего 7
*

fsv

  • Moderator
  • 2781
  • 411 / 2
как в недавно просмотренных товарах увеличить количество  товаров, у меня отображается всего 7
Админка->Настройки VM1->настройки выбранной "темы"
в кофиге "темы" - theme.config.php - это параметр showRecent=?
Веб-разработка: заказ. Только новая разработка.
*

Igoritaly

  • Давно я тут
  • 659
  • 2 / 0
Уважаемые коллеги, тем, кто использует в своей работе VirtueMart, возможно этот модуль покажется функциональным.
Собственно, эта функция прекрасно работает во всех версиях VM1.1.1.X, но не позволяет вывести просмотренные пользователем товары на любой странице сайта (т.е. в отдельном модуле), только на главной VM, в browse, и на карточках товара.
В процессе работы на сайтом заказчика возникла необходимость вывода этих товаров в отдельном модуле - именно эта проблема тут и решается.
Функционал очень простой: просмотренные продукты выводятся списком ссылок на них, в случае, если клиент не просматривал флай, выводится сообщение об отсутствии просмотренных товаров. (содержание сообщения настраивается в админке модуля - можно использовать html).
Картинки товара, корзину, свойства и прочие фишки не добавлял - просто не вижу смысла, модуль явно не для этого... Но, в принципе и это возможно.
Как и в функционале компонента, просмотренные товары сохраняются в браузере пользователя на время, указываемое в настройках (в админке модуля).
По сути, это модуль написанный Марти Теннисоном для VM1.0.X и слегка переделанный и адаптированный для VM1.1.X (плюс переведенный). Спасибо ему!

PS, не подключал css-файл дабы не плодить еще один (их и так достаточно...) Просто к тегу <Li> подставил стили (строка 34). Естественно, не сложно сделать по своему образу и подобию...
Буду рад, если кому-нибудь пригодится.
И последнее - не исключенно, что такая тема уже есть на форуме, просто мне не попалась на глаза (только по VM1.0). Если это так -сильно не пинайте...

PPS, Важно! Заметил весьма своеобразный глюк - если на машине клиента установлен apache (денвер, в частности) модуль не показывает товары в IE всех версий в online-режиме (сервак, естественно выключен). На локали все работает без проблем. Если клиент не занимается веб разработкой (т.е. апача на машинке нет) IE не выступает. Как это происходит - ума не приложу, касается только этого модуля. Тем не менее все работает исправно, просто нужно иметь это ввиду.
Со страхом жду появления еще одного IE от дяди Билла!

[вложение удалено Администратором]

А что за модуль то? Уже удален администрацией? Где можно его скачать теперь? Или что-то подобное?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

VirtueMart - SMS уведомления о сделаном заказе.

Автор bork

Ответов: 42
Просмотров: 23292
Последний ответ 26.07.2021, 22:11:25
от Oleg91
Отчеты и статистика для VirtueMart

Автор 4kict

Ответов: 25
Просмотров: 10377
Последний ответ 14.01.2021, 00:09:53
от gartes
Как реализовать: товары, которых нет в наличии в конец списка категории?

Автор Girevik

Ответов: 1
Просмотров: 1498
Последний ответ 02.11.2017, 10:52:04
от P_B
[Решено] Чебокс "Показывать только товары, которые есть в наличии"

Автор artMelnikov

Ответов: 20
Просмотров: 7739
Последний ответ 28.06.2017, 11:19:51
от OutLaw1
IceVmCart - новый бесплатный модуль корзины для VirtueMart

Автор Grig2009

Ответов: 105
Просмотров: 53917
Последний ответ 05.02.2017, 11:44:02
от Super_Panda