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

mark1

  • Захожу иногда
  • 394
  • 39 / 2
2 moderator: не бей сильно. если это 100 раз решено. Просто не нашел в поиске. Решил сделать пост.

Итак суть проблемы: Мне нужно, чтобы выводилась "цена за N штук" на странице категории browse_x.php.
А она так выводится только на странице flypage. 
Решение такое:
1) shop_browse_queries.php:
на строке 37 после // These are the names of all fields we fetch data from
добавьте имя поля
Код
`product_unit`
2) shop.browse.php:
на строке 292 после  // If it is item get parent:
добавьте
Код
product_unit
после product_s_desc
3) там же:
На строке 404 (после такого же кода, но стоящего для Use product_s_desc from Parent Product) добавьте :
Код
$product_unit = $db_browse->f("product_unit");
      if( empty($product_unit) && $product_parent_id!=0 ) {
         $product_unit = $dbp->f("product_unit"); // Use product_unit from Parent Product
      }
4) там же:
Добавляем после строки 443 // Unset these for the next product такой код:
Код
$products[$i]['product_unit'] = $product_unit;

Добавьте в тот browse_x.php, который Вы используете, код :
Код
<?php echo $product_unit?>
решение талантливо стибрено с http://forum.virtuemart.net/index.php?topic=50848.0  yes!
*

polaris

  • Осваиваюсь на форуме
  • 14
  • 0 / 0
Добрый день всем!
Эта тема старая и в ней нет обсуждений, но думаю, что мой вопрос по теме, поэтому и пишу сюда.
 
Передо мной встала задача, нужно сделать что-бы на странице товара в категории (где товар показывается в таблице, в виде списка всех товаров и можно применять сортировку товара по цене и т.п.) цена выводилась вместе с Единицей товара, т.е. при добавлении товара на сайт, на вкладке "Габариты и вес" мы указываем единицу измерения товара - это: м2, м3, метр, кг и т.п.
Нужно сделать в колонке Цена вывод цены в формате: цена/м2 или цена/кг

Пример: 120 рублей/м2

Подскажите в каком файле это привить и какие переменные добавить. Заранее всем спасибо!

P.S. Пытался сделать сам - что-то не выходит. Начал править файл: \components\com_virtuemart\themes\s5_shopper_frenzy\templates\common\price.tpl.php но результата не добился. Возможно я не там смотрю.
Пожалуйста, посоветуйте как тут быть!
*

powsjal

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
  • Все проблемы решаемы
Все работает  ;D Автору поста +.
В итоге поучаем : Пример: 120 рублей/м2
*

davudo

  • Новичок
  • 6
  • 0 / 0
Отличное решение. Автору спасибо.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отображение атрибутов товара в поле заказа и письме

Автор alexdarkvolf

Ответов: 1
Просмотров: 2908
Последний ответ 19.03.2020, 20:38:00
от gartes
Редактирование товара с сайта а не из админки?

Автор rabotnita

Ответов: 6
Просмотров: 4627
Последний ответ 04.02.2019, 13:33:40
от pH43
Не вводится параметры типа товара!

Автор Krav_xxl

Ответов: 2
Просмотров: 4240
Последний ответ 09.10.2017, 00:15:41
от Dmitry1991
Изменение товара

Автор almerashop89

Ответов: 12
Просмотров: 3476
Последний ответ 10.01.2017, 11:35:18
от almerashop89
[Решено] "Цена от:" на странице категорий

Автор kry

Ответов: 27
Просмотров: 9327
Последний ответ 23.04.2016, 00:18:32
от morda77