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

Kalipso

  • Захожу иногда
  • 89
  • 0 / 1
Данная доработка сделана begler'ом, но в своём блоге он пока не ответил, занят, наверное.

Чтобы вывести в пагинацию количество страниц с товарами, необходимо в components/com_jshopping/templates/имя_шаблона/list_products/block_pagination.php вместо
Спойлер
[свернуть]

вписать

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

JoomShopping 3.14.2, страница Расширенного поиска. Если задать пустой поиск, то есть не указывать категорию для поиска, цену и т.п., то страница ломается с ошибкой
Цитировать
Fatal error: Call to a member function getCountProducts() on a non-object in components/com_jshopping/templates/default_div/list_products/block_pagination.php on line 6

На 6 строке у меня вот это
Код
$total = $this->category->getCountProducts($filters);

Подскажите, пожалуйста, как победить ошибку!

 
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
$this->category определена только в категории. а вы пытаетесь
Код
$this->category->getCountProducts($filters)
сделать в производителях.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Sticher78

  • Захожу иногда
  • 189
  • 23 / 4
  • ТЫЖКОМПЬЮТЕРЩИК
Эт не мы пытаемся, эт хак на автомате туда добавляется, если товаров много.
Нужно делать так, как нужно! А так как не нужно - делать не нужно!!!! (с) Винни-Пух

Skype, Telegram - Sticher78
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
причем тут хак на автомате? хак хаком, но скрипт делает только то, что вы ему говорите сделать. $this->category нет в производителях, понимаете? это работает в категории, но не в производителе
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Sticher78

  • Захожу иногда
  • 189
  • 23 / 4
  • ТЫЖКОМПЬЮТЕРЩИК
dmitry_stas, да эт понятно, что нужно его дописывать
Нужно делать так, как нужно! А так как не нужно - делать не нужно!!!! (с) Винни-Пух

Skype, Telegram - Sticher78
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
ну так если понятно, то че воду зря толчем? :) клавиатуру в руки - и дописываем :) начать можно с того, что инструкция в блоге давно устарела. и уже давным давно
Цитировать
И сам объект JPagination разработчики не передают в шаблон
разработчики сделали. и всего то что надо, так это посмотреть что содержит этот объект
Код
print_r($this->pagination_obj);
и в нужном месте просто вывести то, что необходимо. а всякие ухищрения описанные в свое время были бесспорно нужны и важны, но на данный момент уже давным давно потеряли актуальность. потому что
Цитировать
тестировалось на JoomShopping 3.0.7
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Sticher78

  • Захожу иногда
  • 189
  • 23 / 4
  • ТЫЖКОМПЬЮТЕРЩИК
У всех бы по дефолту при рождении знания php были - форум тогды б не нужен был ;D
Нужно делать так, как нужно! А так как не нужно - делать не нужно!!!! (с) Винни-Пух

Skype, Telegram - Sticher78
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
так а тут дело не в знаниях php. я вам пишу что сделать, а вы одно из двух - либо не слышите, либо не слушаете :) даже не знаю, что хуже :)

вот вы ж даже не попробовали вместо всего того (или плюс к тому), что вы там у себя нахакали, взять и просто написать
Код: php
print_r($this->pagination_obj);
и посмотреть, что из этого выйдет. может там все что надо есть уже? так же, не пробовали? :) и знания тут не причем абсолютно :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Sticher78

  • Захожу иногда
  • 189
  • 23 / 4
  • ТЫЖКОМПЬЮТЕРЩИК
Да умный ты умный, тебе ж спс сказал в другой теме. ну подумашь потупил после 2 бессонных суток
Нужно делать так, как нужно! А так как не нужно - делать не нужно!!!! (с) Винни-Пух

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

Плагин - Заголовки страниц JoomShopping [Скачать]

Автор kit2m2

Ответов: 31
Просмотров: 5802
Последний ответ 12.01.2022, 06:08:13
от kit2m2
Ограничение кол-ва добавляемых зависимых атрибутов. Ошибка: Warning: mysqli

Автор Koral_n

Ответов: 0
Просмотров: 767
Последний ответ 18.01.2019, 10:19:03
от Koral_n
Ошибка в выводе категории ID

Автор onelawyer

Ответов: 11
Просмотров: 1297
Последний ответ 24.09.2017, 19:43:04
от dmitry_stas
Меню из статических страниц

Автор evpadallas

Ответов: 10
Просмотров: 8426
Последний ответ 20.05.2012, 02:03:19
от funtic