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

sinus

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
Уже несколько дней не могу разобраться, решил спросить у знатоков. Собственно проблема в теме.
1) Добавляю товар в корзину (жмакаю купить), в миникорзине показано: количество товаров: 1, сумма: 1000 руб.
2) Перехожу на главную страницу сайта, в миникорзине ничего нет, но если в нее зайти то товар там есть.
Помогите пожалуйста, где ковырять?
Что делал до траблы:
Включал SEO+Использовать mod_rewrite+Добавить суффикс к URL, менял название на .htacess, ставил роутер с этого форума. Вроде все работало норм, но в корзине при оформлении заказа, когда вводишь телефон и эл. почту (упрощенная покупка) и жмешь на кнопку далее - ничего не происходило, вернее перезагружалась страница и всё. При отключении SEO заказ стал оформляться, но и появилась вот эта трабла с миникорзиной. Слезно прошу помощи!
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Уже несколько дней не могу разобраться, решил спросить у знатоков. Собственно проблема в теме.
1) Добавляю товар в корзину (жмакаю купить), в миникорзине показано: количество товаров: 1, сумма: 1000 руб.
2) Перехожу на главную страницу сайта, в миникорзине ничего нет, но если в нее зайти то товар там есть.
Помогите пожалуйста, где ковырять?
Что делал до траблы:
Включал SEO+Использовать mod_rewrite+Добавить суффикс к URL, менял название на .htacess, ставил роутер с этого форума. Вроде все работало норм, но в корзине при оформлении заказа, когда вводишь телефон и эл. почту (упрощенная покупка) и жмешь на кнопку далее - ничего не происходило, вернее перезагружалась страница и всё. При отключении SEO заказ стал оформляться, но и появилась вот эта трабла с миникорзиной. Слезно прошу помощи!
это известная проблема с кэшированием. отключить кэширование или если уж без него не обойтись - прописать условие, чтобы корзину (или весь Virtuemart) не кэшировало.
частное случай: если используете стандартный плагин "Система - кэш", то в plugins\system\cache.php вместо
Код
if (!$user->get('aid') && $_SERVER['REQUEST_METHOD'] == 'GET')
написать
Код
if (!$_SESSION['cart']['idx'] && !$user->get('aid') && $_SERVER['REQUEST_METHOD'] == 'GET')
Не будь паразитом, сделай что-нибудь самостоятельно!
*

sinus

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
так я и кэширование отключал! И очищал кэш, все равно такие проблемы, думаю не из за него. Потому что долгое время кэширование было включено, и все норм работало. В любом случае большое спасибо что откликнулся! То думал тема так и останется пустая. Пока решил тем что восстановил из прошлого бекапа, пришлось конечно нововведения заново написать, но не так важно, главное что пока всё работает, кэш включен.....но я все равно прописал то что вы посоветовали ))) если причина известная то почему гугль мне не подсказал? )) обычно кто то уже сталкивался с проблемами, и есть решения (а то и не одно) у популярных проблем, а тут тишина...
« Последнее редактирование: 09.03.2013, 00:51:31 от sinus »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Количество просмотров товара VirtueMart Существует?

Автор grishin

Ответов: 38
Просмотров: 12273
Последний ответ 22.08.2020, 08:44:29
от rsn
VirtueMart. Вывести названия дополнительных изображений в карточке товара

Автор Delik

Ответов: 3
Просмотров: 4832
Последний ответ 04.09.2018, 10:42:46
от Eholov
Проблема с шаблонами VirtueMart

Автор alexmishka

Ответов: 1
Просмотров: 1028
Последний ответ 24.02.2018, 16:40:09
от draff
Как сделать импорт товара на VirtueMart?

Автор Усач911

Ответов: 0
Просмотров: 1152
Последний ответ 07.11.2017, 22:03:18
от Усач911
Sj Minicart Pro for VirtueMart не показывает изображение товара

Автор 6199233

Ответов: 2
Просмотров: 1601
Последний ответ 22.07.2017, 17:16:46
от 6199233