Новости 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 Ответов
  • 974 Просмотров
*

hels

  • Захожу иногда
  • 205
  • 0 / 0
Здравствуйте, у меня стоит J2.5+VM3. В карточке нового товара, который находится в новой вчера добавленной категории в поле Производитель перед производителем добавляет запятую и еще одну ссылку на этого же производителя только в конце с датой когда я создал категорию/или добавил товар

в товарах которые были добавлены ранее(где-то месяц назад) такого нет:
 

Пробовал:
- чистить кеш
- менять производителя в старых и новых товарах

А теперь маленькая предыстория, вчера загружал новые товары и категории через CSVI в итоге некоторые категории "задвоились" названия у них были те же, но алиасы название-категории-ДАТА. Я проверил названия категорий в файле csv и существующие в VirtueMart идентичные почему оно насоздавало дублей? ну да ладно, я сделал откат сайта и вручную создал все новые категории, и в файле csv вместо CATEGORY_PATCH указал CATEGORY_ID созданных мною вручную категорий и существующих категорий, после этого товары добавились как положено в свои категории. Теперь вот думаю мб. какая-то опция в VirtueMart добавляет дату к алиасам и создает мне дубли страниц производителей, категорий при загрузке по имени? есть у кого какие-то идеи? не хотелось бы долбить код если там где-то есть опция которая вырубит эту хрень..
*

hels

  • Захожу иногда
  • 205
  • 0 / 0
в коде пока ничего криминального не нашел -
 
Код
		<?php
// Manufacturer of the Product
if (VmConfig::get('show_manufacturers', 1) && !empty($this->product->virtuemart_manufacturer_id)) {
    echo $this->loadTemplate('manufacturer');
}
?>
ищу дальше где формируется эта гадость..
*

hels

  • Захожу иногда
  • 205
  • 0 / 0
запятую шарахнул тут -
Код
echo implode(', ',$mans);
*

hels

  • Захожу иногда
  • 205
  • 0 / 0
теперь вопрос где убрать дубль ссылки с датой в конце на производителя?
*

hels

  • Захожу иногда
  • 205
  • 0 / 0
как обычно много ответов, но продолжу монолог, поиски по забугорным форумам дали примерный ответ, что это выделывается SEF, но где вырубить эту хрень так и не нашел..
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
как обычно много ответов, но продолжу монолог
И будете продолжать, потому что не умеете вопрос задавать. На скрине вижу, что в вашем шаблоне уже ковырялись. Что за шаблон - неизвестно. Вы просили найти в PHP-коде место, где нужные элементы формируются, но показали только скрин HTML-вывода.
Уже 100500 раз говорили, что здесь экстрасенсов не водится.
« Последнее редактирование: 08.06.2017, 14:14:14 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Расчёт стоимости товара в VirtueMart за периметр

Автор NIKOLY

Ответов: 0
Просмотров: 258
Последний ответ 04.07.2025, 09:18:31
от NIKOLY
Как вывести ID товара в описании товара?

Автор Stasweb

Ответов: 8
Просмотров: 4222
Последний ответ 28.11.2022, 23:22:27
от Evgen Kulibin
Joomla 3 + VM + Universal AJAX Live Search - как вывести картики товара в поиске?

Автор PSN

Ответов: 10
Просмотров: 9647
Последний ответ 27.03.2022, 17:29:00
от Evgen Kulibin
Как сделать - Вывод модуля на всех страницах - Кроме в карточке товара?

Автор artem_wrong

Ответов: 15
Просмотров: 3224
Последний ответ 15.02.2022, 15:07:34
от beliyadm
При сохранении товара слетает категория

Автор klara7

Ответов: 7
Просмотров: 2917
Последний ответ 23.12.2021, 08:45:40
от klara7