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

felis_m

  • Новичок
  • 3
  • 0 / 0
Помогите, пожалуйста, разобраться в проблеме.

Решил попробовать использовать плагин Tabs&Slides (http://www.joomlaworks.gr/) и столкнулся с тем, что если применять его в тексте обычной страницы сайта, то он работает. Но при попытке использования данного плагина (путем добавления кода вроде "{slide=Title} Some text {/slide}") в текстовом поле какого-нибудь Item'а Zoo, плагин перестает работать.
На всякий случай поясню, что мне хотелось бы, чтобы при открытии подробной информации об item'e в его описании можно было бы использовать  разворачивающиеся/схлопывающиеся части текста (при помощи соответствующих готовых плагинов).


В связи с этим у меня 2 вопроса:
1) можно ли использовать плагин Tabs&Slides внутри Zoo Items и, если да, то как?
2) если Tabs&Slides использовать нельзя, то существуют ли какие-либо другие разворачивающиеся плагины, которые можно было бы использовать внутри Zoo Item'a?

Заранее спасибо!
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
достаточно просто, означает что плагин предназначен для компонента com_content и других, использующих стандартные события ядра движка, в Zoo они видимо отсутствуют (либо какие-то свои)
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

felis_m

  • Новичок
  • 3
  • 0 / 0
Если честно, я пока делаю только первые шаги в освоении Joomla, поэтому, Вы не могли бы дать более подробные пояснения для "чайника" вроде меня.
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
не могу, потому что не использую ZOO и не знаю как там что устроено и какие расширения для него существуют, просто выдвинул предположение
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

felis_m

  • Новичок
  • 3
  • 0 / 0
Оказалось, что все намного проще (нужно просто смотреть повнимательнее  ^-^) - на самом деле, в Zoo при конфигурации типов элементов (Type) выбираются различные элементы (текстовые поля, картинки и т.п.), которые будут использоваться в объектах данного типа.
При внимательном рассмотрении оказалось, что у элемента Textarea есть такой параметр, как Load Plugins, значение которого по умолчанию - No. После выбора значения Yes, стало возможным использование внешних плагинов, соответственно, плагин Tabs&Slides тоже заработал.

Вопрос можно считать закрытым  :D.
*

MetaSpirit

  • Завсегдатай
  • 1370
  • 106 / 0
  • R.A.S.Lab[.org]
Идеальное решение. Никаких хаков. Единственный нативный элемент - ItemPanes Element for ZOO.
R.A.S.Lab[.org]: ZOOvirtue - корзина для ZOO, Яндекс.Карты для ZOO, ItemPanes - табы для ZOO, ZOOlendar - календарь для ZOO  и др.
Создание расширений для YOOtheme ZOO на заказ. Становитесь в очередь.
*

Goha85

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
Здравствуйте! Не могу настроить элемент ItemPanes для ZOO. Может кто поэтапно расскажет как нужно правильно настроить?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Подскажите где можно заказать расширения для Joomla

Автор prad

Ответов: 8
Просмотров: 2222
Последний ответ 15.12.2015, 18:13:32
от voland
Плагины Joomla

Автор wuds

Ответов: 3
Просмотров: 2035
Последний ответ 16.09.2015, 11:33:16
от svbelous
Можно ли удалить папку tmp?

Автор ADR

Ответов: 4
Просмотров: 8304
Последний ответ 05.12.2014, 15:57:38
от wishlight
Можно ли в фотогалерее делать папки?

Автор Marinaaa

Ответов: 6
Просмотров: 1648
Последний ответ 08.07.2014, 21:27:11
от Katran
Можно ли задавать периодичность публикации статей?

Автор VolEG

Ответов: 1
Просмотров: 985
Последний ответ 04.12.2013, 19:45:21
от kreker92