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

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Всем привет!
Такая задача возникла: проверить, есть ли у товара хоть одна характеристика (если да, то выполнить условие вывода характеристик).
Кроме того, характеристики разбиты на несколько групп. Прежде, чем выводить название группы этих характеристик, так же хотелось бы узнать, ести ли в этой группе хоть одна х-ка. Не пойму как это сделать до цикла
Код
<?php foreach($this->product->extra_field as $extra_field){ ?>
т.е. цикла, который уже непосредственно обрабатывает каждую из характеристик.

Надеюсь понятно объяснил  ^-^
Заранее благодарю всех за помощь и ответы!
*

kit2m2

  • Живу я здесь
  • 3360
  • 276 / 0
  • Беру сайты на полное сопровождение
Такая задача возникла: проверить, есть ли у товара хоть одна характеристика (если да, то выполнить условие вывода характеристик).
Код
        <?php if (is_array($this->product->extra_field) && !empty($this->product->extra_field)){?>
            <?php foreach($this->product->extra_field as $extra_field){?>
                        Тут вывод характеристик и их опций...
            <?php }?>
        <?php }?>
« Последнее редактирование: 30.12.2022, 18:12:08 от kit2m2 »
Расширения для JoomShopping | Ссылка на Телеграм-канал | Сайты и магазины под ключ: Дизайн, Верстка, Программирование (расширения на заказ), СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ (5+) и JoomShopping 5+
*

kit2m2

  • Живу я здесь
  • 3360
  • 276 / 0
  • Беру сайты на полное сопровождение
Кроме того, характеристики разбиты на несколько групп. Прежде, чем выводить название группы этих характеристик, так же хотелось бы узнать, ести ли в этой группе хоть одна х-ка. Не пойму как это сделать до цикла
Тут нужно подумать, ведь характеристик есть группа, а не наоборот (у группы - характеристики)
« Последнее редактирование: 30.12.2022, 18:18:14 от kit2m2 »
Расширения для JoomShopping | Ссылка на Телеграм-канал | Сайты и магазины под ключ: Дизайн, Верстка, Программирование (расширения на заказ), СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ (5+) и JoomShopping 5+
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Код
!empty($this->product->extra_field)

Вот за это огромное спасибо! Что-то я никак не мог додуматься и сидел тупил.

А что касается групп, то я придумал такую вот, возможно немного глуповатую конструкцию...
Код
            <?php $first = true; ?>
            <?php foreach ($this->product->extra_field as $extra_field) { ?>
            <?php if ($extra_field['groupname'] != NULL && $extra_field['groupname'] == 'analogs' && $first) { ?>           
            <div class="options_group"> ... Тут начало кода группы ...
            <?php $first = false; } ?>
            ... Тут обработка всех характеристик группы ...
            <?php $first = true; ?>
            <?php foreach ($this->product->extra_field as $extra_field) { ?>
            <?php if ($extra_field['groupname'] != NULL && $extra_field['groupname'] == 'analogs' && $first) { ?>           
            </div> ... Тут конец кода группы ...
            <?php $first = false; } ?>

Получается, что надо для каждой группы аж три раза foreach вызвать :dry:
Благо у меня их всего две, и характеристик совсем немного, но выглядит как гигантская подпорка для падающей башни  *suicide*
« Последнее редактирование: 31.12.2022, 00:29:01 от goga_pgasovav »
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
так вставьте все ИФы в один цикл - в чем проблема? А группы можно в массив писать (имена групп) потом и после цикла сможете проверить была ли конкретная группа. Функция in_array()
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
так вставьте все ИФы в один цикл - в чем проблема? А группы можно в массив писать (имена групп) потом и после цикла сможете проверить была ли конкретная группа. Функция in_array()
Спасибо за ответ. Слишком сложно для меня звучит :(
Мне бы простой пример на пальцах, чтобы я потом смог под себя переделать.
Про in_array я знаю, но как его тут применить не понимаю.
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Код
$bygroup = array();
foreach ($this->product->extra_field as $ef => $extra_field){
    $group = !empty($extra_field['groupname']) ? $extra_field['groupname'] : '';
    $bygroup[$group][$ef] = &$this->product->extra_field[$ef];
}

/* если группа analogs не пустая */
if(!empty($bygroup['analogs'])){
    /*... (начало группы analogs) */
    foreach($bygroup['analogs'] as $extra_field){
       
    }
    /*... (конец группы analogs) */
}
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Ого! Ну такое я сам точно не осилил бы!
sivers, огромное вам спасибо! В который раз выручаете  :D
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Характеристики товара без всплывающей формы

Автор shop-user

Ответов: 2
Просмотров: 1118
Последний ответ 04.04.2025, 21:40:09
от victorantoniak
Вывести определённую характеристику отдельно от списка характеристик товара

Автор Silent_Breeze

Ответов: 52
Просмотров: 12425
Последний ответ 23.11.2023, 12:31:08
от YuryNew
Автоматическая генерация Кода товара

Автор geral

Ответов: 4
Просмотров: 2344
Последний ответ 17.03.2023, 13:21:43
от geral
Вывод характеристик товара в списке товаров (категории)

Автор voland

Ответов: 4
Просмотров: 3724
Последний ответ 17.09.2022, 13:21:03
от victorantoniak
Изменение характеристик при выборе атрибутов

Автор jimka

Ответов: 10
Просмотров: 3136
Последний ответ 06.06.2022, 19:55:57
от Mister Shadow