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

Yura Vakulenko

  • Захожу иногда
  • 238
  • 6 / 1
Здрасвуйте! Ребята. помогите реализовать такую вещь.

Есть Доп. поле с названием Жанр. Я хочу чтобы в нем отображались Категория к которой принадлежит материал. Т.е. если фильм - боевик - значит в Доп. поле Жанр: ссылка на категорию Боевик и по щелчку по этой ссылке отображаются все фильмы этого жанра. Как такое сделать? Буду очень благодарен за помощь.. ^-^ ^-^ ^-^ ^-^

Или поле Год: вставить туда тег с годом материала и при щелчке - все фильмы этого года. - т.е. аналогичное поведение как при щелчке по К2 тегам.. Только засунуть это в доп. поле. А остальные теги отображать так как они и отображались

Или скажите  в дополни тельные поля можно вставлять HTML? - тогда проще туда вставить ссылку на нужное место на сайте.
Когда я в доп. поле Жанр вставляю подобное <a href="http://www.mannvillage.com/index.php/download-movies-online/popular-categories-films/comedy">Комедия</a> К2 убирает ссылку и оставляет только Комедия. Может можно как-то отключить такую фильтрацию HTML в дополнительных полях. ТОгда туда можно будет вставлять HTML.
« Последнее редактирование: 09.10.2011, 23:44:01 от Yura Vakulenko »
*

SDKiller

  • Moderator
  • 2705
  • 329 / 5
  • ...ergo sum
Есть тип дополнительного поля "Ссылка" - можете вставлять ссылки туда
*

Yura Vakulenko

  • Захожу иногда
  • 238
  • 6 / 1
Я этот тип пробовал, но там можно вставить только одну ссылку. А как использовать в этом поле более одной ссылки? И так, чтобы они работали как поиск по тегам или поиск по категории. В общем, чтобы упростить поиск нужного материала прямо со страницы уже открытого материала.
*

SDKiller

  • Moderator
  • 2705
  • 329 / 5
  • ...ergo sum
Потому что не надо вставлять туда ссылку при создании допполя.
Оставляйте пустое значение и вставляйте на странице материала конкретную ссылку для материала.

Для двух ссылок создайте два допполя соответствующего типа.

А вообще проблему на пустом месте создаёте. Есть возможность в шаблоне материала вывести категорию, есть возможность вывести теги.

Зачем это всё запихивать в допполя да ещё и с возможностью поиска до кучи?
Они вообще не для этого предназначены.
*

bibalaev

  • Захожу иногда
  • 241
  • 8 / 0
  • все должно быть качественно!
реализуй это не с доп. полем , а с тэгом.
это более правильно в иерархии.
тэг: боевик
доп поля:
актеры
продолжительность
озвучка

и так далее , сам можешь подумать.
а жанр , если у тя он тем более является категорией, то лучше всего использовать ТЭГ.
я так делал.
*

Yura Vakulenko

  • Захожу иногда
  • 238
  • 6 / 1
Я понял. Большое спасибо.  ;) ^-^
*

bibalaev

  • Захожу иногда
  • 241
  • 8 / 0
  • все должно быть качественно!
плюсег хочу))
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Additional Categories for K2 в админке в материалах выводить все категории

Автор NIKOLY

Ответов: 0
Просмотров: 2435
Последний ответ 26.10.2024, 16:03:57
от NIKOLY
Убрать ограничение в коротком описании при создании категории в k2

Автор p.g.

Ответов: 0
Просмотров: 2623
Последний ответ 13.10.2022, 09:51:35
от p.g.
Как сделать категории из выпадающего списка в K2 в алфавитном порядке?

Автор Yonakano

Ответов: 7
Просмотров: 2909
Последний ответ 23.09.2022, 13:03:28
от Yonakano
Не сохраняются параметры в пункте меню категория K2

Автор pyh

Ответов: 5
Просмотров: 2310
Последний ответ 21.09.2021, 04:56:14
от Alexs44
Дополнительное поле Ссылка / Как изменить текст?

Автор designerandrey

Ответов: 6
Просмотров: 997
Последний ответ 20.07.2020, 16:56:57
от designerandrey