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

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Всем привет!
Хочу в категории товаров, товар, у которого нет фото, выводить с немного иной разметкой.
В шаблоне  list_products/product.php есть условие if ($product->image), но оно ничего не даёт. Даже если его убрать, фото товаров всё равно выводятся, а при их отсутствии всё равно выводится noimg.

Подскажите пожалуйста, как в этом шаблоне проверить, есть ли у товара фото  !!!???!!!
Заранее благодарю!
*

ShopES

  • Захожу иногда
  • 426
  • 11 / 0
а не переопределено ли?
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
а не переопределено ли?
Если вы имеете в виду, переопределил ли я стандартное изображение на своё в user_config.php, то да, переопределил.
*

ShopES

  • Захожу иногда
  • 426
  • 11 / 0
не изображение а шаблон вывода категории
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Шаблон тоже переопределён.
*

ShopES

  • Захожу иногда
  • 426
  • 11 / 0
ну проверьте правильность пути до файла
ну и кеш чистить не забываем
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Наверное я не совсем понятно объяснил.
Ничего не кэшируется. Файл я перезаливаю, и внесённые изменения тут же отражаются на сайте.
Проблема лишь в том, что условие никак не влияет на вывод фотографии товара.
*

ShopES

  • Захожу иногда
  • 426
  • 11 / 0
а вы пару тройку строк до условия и после дайте.
а то может не там правите
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Да я контейнеру с фото класс 'lol' добавляю и он тут же появляется  ;D
*

AndrewVas

  • Новичок
  • 8
  • 0 / 0
Так а чего не проверили, что отдает. Если нет картинки то $product->image - это noimage.gif и это true. Делайте условие по-другому
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Так а чего не проверили, что отдает. Если нет картинки то $product->image - это noimage.gif и это true. Делайте условие по-другому
Вот и хотелось бы понять, какое условие нужно, чтобы узнать, что именно noimage будет выводиться вместо фото товара  :dry:
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
ну видимо так (для существующей картинки. если надо отловить отсутствие, то $product->image==).
Код
if ($product->image!="noimage.gif")
сделай
Код
var_dump($product->image);
если не сработает условие и посмотри, что выведет при отсутствии картинки
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
effrit, оу... я думал есть более «элегантный» способ, нежели именно по названию файла провреять (оно ведь может в настройках меняться, и я как раз таки заменил на no_photo.svg). Тем не менее большое спасибо!
*

kit2m2

  • Живу я здесь
  • 3362
  • 276 / 0
  • Беру сайты на полное сопровождение
ffrit, оу... я думал есть более «элегантный» способ, нежели именно по названию файла провреять (оно ведь может в настройках меняться, и я как раз таки заменил на no_photo.svg).
Тут (в шаблоне) только такое условие возможно (если не писать плагин)... Потому что в $product->image в любом случае что-то есть, либо картинка товара, либо заглушка картинки - noimage.gif
Расширения для JoomShopping | Ссылка на Телеграм-канал | Сайты и магазины под ключ: Дизайн, Верстка, Программирование (расширения на заказ), СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ (5+) и JoomShopping 5+
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
да по идее можно и из настроек вытянуть значение и сравнить с полем.
но проще с именем файла сравнить все же. тот случай, когда можно пожертвовать универсальностью в пользу скорости и простоты. и лени  ;D
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Тут (в шаблоне) только такое условие возможно (если не писать плагин)... Потому что в $product->image в любом случае что-то есть, либо картинка товара, либо заглушка картинки - noimage.gif
Да, я это уже понял. Спасибо!

да по идее можно и из настроек вытянуть значение и сравнить с полем.
но проще с именем файла сравнить все же. тот случай, когда можно пожертвовать универсальностью в пользу скорости и простоты. и лени  ;D

Есть такое дело  ^-^
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Уведомление о превышении доступного количества товара

Автор goga_pgasovav

Ответов: 1
Просмотров: 771
Последний ответ 03.02.2025, 18:48:10
от kit2m2
Не увеличивать Product image, если изображение меньше заданных параметров

Автор goga_pgasovav

Ответов: 6
Просмотров: 1170
Последний ответ 13.12.2024, 12:54:00
от goga_pgasovav
Артикул или код товара?

Автор goga_pgasovav

Ответов: 3
Просмотров: 1013
Последний ответ 28.11.2024, 19:03:59
от goga_pgasovav
Странная задача: получить псевдоним товара по его ID в шаблоне статьи

Автор goga_pgasovav

Ответов: 4
Просмотров: 1468
Последний ответ 04.07.2024, 13:06:45
от goga_pgasovav
Ошибка при изменении статуса товара

Автор itbc

Ответов: 4
Просмотров: 1324
Последний ответ 08.05.2024, 10:31:16
от itbc