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

denben777

  • Захожу иногда
  • 157
  • 78 / 1
*

skyrec

  • Захожу иногда
  • 382
  • 10 / 0
  • Люблю я детей !!!
Re: Товар уже в корзине
« Ответ #1 : 01.04.2013, 09:26:22 »
Спасибо отличное дополнение, давно думал об этом !!) А как правильно прописать ссылку в корзину при наличии товара в ней ?
*

denben777

  • Захожу иногда
  • 157
  • 78 / 1
Re: Товар уже в корзине
« Ответ #2 : 01.04.2013, 12:03:04 »
skyrec если я вас правильно понял, то ссылка в корзину выглядит так:
Код
<a href="<?php print SEFLink('index.php?option=com_jshopping&controller=cart');?>">Корзина</a>
*

skyrec

  • Захожу иногда
  • 382
  • 10 / 0
  • Люблю я детей !!!
Re: Товар уже в корзине
« Ответ #3 : 01.04.2013, 13:08:02 »
skyrec если я вас правильно понял, то ссылка в корзину выглядит так:
Код
<a href="<?php print SEFLink('index.php?option=com_jshopping&controller=cart');?>">Корзина</a>
Да спасибо, такая фишка есть на сайте wildbirries, там при добавлении товара в корзину кнопка с "добавить в корзину" меняется на "перейти в корзину" очень удобно ! + поставил !
*

skyrec

  • Захожу иногда
  • 382
  • 10 / 0
  • Люблю я детей !!!
Re: Товар уже в корзине
« Ответ #4 : 01.04.2013, 13:24:07 »
Почему то решение для страницы товара не заработало....(
*

denben777

  • Захожу иногда
  • 157
  • 78 / 1
*

skyrec

  • Захожу иногда
  • 382
  • 10 / 0
  • Люблю я детей !!!
Re: Товар уже в корзине
« Ответ #6 : 01.04.2013, 17:52:07 »
Куда вставлялся код? Ссылка на сайт есть?
Сайт на локале пока, код вставлялся в product_default.
*

denben777

  • Захожу иногда
  • 157
  • 78 / 1
Re: Товар уже в корзине
« Ответ #7 : 01.04.2013, 18:46:34 »
Покажите свой product_default -> здесь только под спойлером или передайте мне по почте.
*

skyrec

  • Захожу иногда
  • 382
  • 10 / 0
  • Люблю я детей !!!
Re: Товар уже в корзине
« Ответ #8 : 01.04.2013, 19:59:37 »
Убрал общие скобки

Спойлер
[свернуть]

И все заработало... хотя странно все это как то :)
*

denben777

  • Захожу иногда
  • 157
  • 78 / 1
Re: Товар уже в корзине
« Ответ #9 : 01.04.2013, 20:24:50 »
А ведь действительно не выводилась надпись "Товар не в корзине" при кол-ве товаров в корзине "0".
*

skyrec

  • Захожу иногда
  • 382
  • 10 / 0
  • Люблю я детей !!!
Re: Товар уже в корзине
« Ответ #10 : 01.04.2013, 20:52:55 »
А ведь действительно не выводилась надпись "Товар не в корзине" при кол-ве товаров в корзине "0". Исправил.

Теперь прикол в том что если вышел из карточки товара и снова в нее зашел, эффект не сохраняется. Даже если еще раз добавить этот товар, проверка не сработает.
*

denben777

  • Захожу иногда
  • 157
  • 78 / 1
Re: Товар уже в корзине
« Ответ #11 : 01.04.2013, 21:15:24 »
Изменил код - теперь все работает как надо.
*

skyrec

  • Захожу иногда
  • 382
  • 10 / 0
  • Люблю я детей !!!
Re: Товар уже в корзине
« Ответ #12 : 03.04.2013, 12:28:35 »
Вот теперь работает как надо ! очень благодарен за фичу !)
*

devirus

  • Захожу иногда
  • 140
  • 6 / 0
Re: Товар уже в корзине
« Ответ #13 : 17.05.2013, 12:38:18 »
Для J3 + JS4 работает если заменить одну строку:
$cart = JModelLegacy::getInstance('cart', 'jshop');
*

Argawa

  • Захожу иногда
  • 139
  • 1 / 0
Re: Товар уже в корзине
« Ответ #14 : 29.05.2013, 13:03:16 »
Изменил код - теперь все работает как надо.

Если использовать mod_ice_jshopcart, то надпись меняется только после перезагрузки страницы. Можно ли этот способ подправить под AJAX корзину?
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Re: Товар уже в корзине
« Ответ #15 : 30.05.2013, 11:37:54 »
Кнопочку "удалить из корзины" реально сделать?
Создание сайтов, шаблонов, помощь в решении проблем.
*

Argawa

  • Захожу иногда
  • 139
  • 1 / 0
Re: Товар уже в корзине
« Ответ #16 : 26.01.2016, 05:31:01 »
Здравствуйте! Фишка отличная. Вопрос, как сделать так, чтобы писалось, например, в корзине 1 товар или в корзине 2 товара?
*

sergkh

  • Осваиваюсь на форуме
  • 48
  • 1 / 0
Re: Товар уже в корзине
« Ответ #17 : 28.12.2018, 11:33:11 »
А где решение?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Товар уже в корзине
« Ответ #18 : 28.12.2018, 13:31:48 »
удалил автор, еще в 13-м году. но есть вебархив :) https://web.archive.org/web/20130610065459/http://joomlaforum.ru:80/index.php/topic,259097.0.html
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Плагин - Вывод значения поля из таблицы продуктов в корзине JoomShopping

Автор draff

Ответов: 3
Просмотров: 2189
Последний ответ 26.02.2024, 07:00:01
от kit2m2
Плагин - Товар на складе или Товар под заказ для JoomShopping [Скачать]

Автор kit2m2

Ответов: 58
Просмотров: 11693
Последний ответ 18.05.2023, 12:59:00
от Akeksandr
[Решено] Товар на замену в блоке с ценой

Автор dron

Ответов: 2
Просмотров: 2671
Последний ответ 13.04.2022, 16:09:53
от dron
Получить ajax данные в корзине

Автор Zelyonkin

Ответов: 3
Просмотров: 912
Последний ответ 06.06.2019, 13:33:50
от dmitry_stas
Как получить доступ к корзине?

Автор leha111

Ответов: 9
Просмотров: 2205
Последний ответ 02.10.2018, 14:53:22
от dmitry_stas