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

Aubakirovalex

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Всем привет.

Мне пришлось модифицировать модуль top_ten, чтобы там выводилась картинка, название, описание, цена.
Нужно добавить поле выбора количества товаров, и кнопку "добавить в корзину".

Вот я вытащил форму:

Код
 
<form action='http://sushi.local/index.php' method='post' name='addtocart' id='addtocart' class='button' />
 
    <input type='submit' class='addcart_button' value='Add to cart' title='Add to cart' onsubmit="handleAddToCart( this.id );return false;"  />
    <input type="hidden" name="category_id" value="<?php echo  @$_REQUEST['category_id'] ?>" />
    <input type="hidden" name="product_id" value="<?php echo $product_id ?>" />
    <input type="hidden" name="prod_id[]" value="<?php echo $product_id ?>" />
    <input type='hidden' name='page' value='shop.cart' />
    <input type='hidden' name='func' value='cartadd' />
    <input type="hidden" name="Itemid" value="<?php echo $sess->getShopItemid()?>" />
    <input type='hidden' name='option' value='com_virtuemart' />
    <input type='hidden' name='set_price[]' value='' />
    <input type='hidden' name='adjust_price[]' value='' />
    <input type='hidden' name='master_product[]' value='' />
    <input type="text" size="4" id="quantity2" name="quantity[]" value="1" />
</form>

Проблема в том что у меня, при нажатии на кнопку, выдает товары не найдены. Если прописать вручную ID категории и товара, все нормально. НО, товаров 10, а форма одна, как сделать эту функцию? !
« Последнее редактирование: 12.11.2011, 17:20:23 от Aubakirovalex »
*

DiffuSer

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Похоже, у нас схожая проблема. Надо использовать переменные в данном шаблоне, которые изначально не предусмотрены. Тоже мучаюсь, надо $quantity_step в price.tpl использовать, не получается.
*

Aubakirovalex

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Я вот тоже не пойму, почему со стандартными переменными он не работает. Чего не хвататет
*

DiffuSer

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Там надо как-то добавить в tpl-> переменные, но я не знаю как, а что тут, что на j-s помощи месяцами ждать. :) Но выбора-то у нас нет.
*

Aubakirovalex

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Вот в этой теме http://joomlaforum.ru/index.php?topic=86947.0 говорилось о моем случае, но там они вручную задавали id. как же мне быть
*

Aubakirovalex

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Всем привет! Я решил свою проблему! Я не жадный и делюсь решением.
Модуль модифицировал.

Проблема была в том, что я забыл объявить переменный в самом начале документа.
Вот код в форме    
Код
<input type='hidden' name='product_id' value='<?php $db->p("product_id"); ?>' />


а вот объявленная переменная
Код
/*$list  = "SELECT p.product_id, p.product_sales as sales, p.product_parent_id, p.product_name, c.category_id, c.category_flypage, p.product_thumb_image "; $list .= "FROM #__{vm}_product p, #__{vm}_product_category_xref pc, #__{vm}_category c WHERE "; $q = "p.product_publish='Y' AND "; $q .= "pc.product_id = p.product_id AND "; $q .= "pc.category_id = c.category_id AND "; $q .= "p.product_sales > 0 "; $q .= "GROUP BY p.product_id "; $q .= "ORDER BY sales DESC, p.product_name "; $list .= $q . " LIMIT 0, $num_topsellers ";*/
$list  = "SELECT p.product_id, p.product_sales as sales, p.product_parent_id, p.product_name, c.category_id, c.category_flypage, p.product_thumb_image, d.product_price, p.product_s_desc, p.product_length, p.product_weight, [b]p.product_id[/b] ";
$list .= "FROM #__{vm}_product p, #__{vm}_product_category_xref pc, #__{vm}_category c, #__{vm}_product_price d WHERE ";
$q = "p.product_publish='Y' AND ";
$q .= "pc.product_id = p.product_id AND ";
$q .= "pc.category_id = c.category_id AND ";
$q .= "p.product_id = d.product_id AND ";
$q .= "p.product_sales > 0 ";
$q .= "GROUP BY p.product_id ";
$q .= "ORDER BY sales DESC, p.product_name, p.product_s_desc, p.product_length, p.product_weight, [b]p.product_id[/b] ";
$list .= $q . " LIMIT 0, $num_topsellers ";


Подробнее как модернизировать, в моем блоге http://aubakirovalex.blog.ru/133346003.html
« Последнее редактирование: 14.11.2011, 09:34:31 от Aubakirovalex »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

Автор bork

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

Автор 4kict

Ответов: 25
Просмотров: 10376
Последний ответ 14.01.2021, 00:09:53
от gartes
[Решено] Товарная накладная и товарный чек

Автор mikeles

Ответов: 6
Просмотров: 5953
Последний ответ 21.09.2019, 19:48:12
от kungurskiy
[Решено] Чебокс "Показывать только товары, которые есть в наличии"

Автор artMelnikov

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

Автор Grig2009

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