Новости 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 Пользователей и 2 Гостей просматривают эту тему.
  • 9 Ответов
  • 5515 Просмотров
*

Zubilo

  • Новичок
  • 7
  • 0 / 0
Всем доброго дня!

    Заметил такую вещь, у меня на сайте после того как нажимается кнопка "На предыдущую страницу" в браузере или просто "Назад" на сайте, открывается, соответственно, предыдущая страница, но не на том месте, где был экран в момент перехода по ссылке(на какой части страницы),  а с самого начала(сверху) страницы.

Подскажите, пожалуйста, как можно реализовать вышеописанное поведение, т.е. чтобы при возврате на предыдущую страницу страница открывалась не с самого начала, а с того места где просматривалась страница?

Как я понял, якоря здесь не подойдут.
Пробовал гуглить - не нашел. Даже не могу понять по каким ключевым словам искать...

Спасибо!
*

pedrosoft

  • Захожу иногда
  • 367
  • 113 / 7
да вроде никак, это работа браузера. хотя могу ошибаться.
Интернет Хостинг Центр: отличные цены, лучшее качество, расположение в дата-центре «Оверсан-Меркурий»
*

Zubilo

  • Новичок
  • 7
  • 0 / 0
я все-таки думаю, что это зависит от сайта, тк на некоторых такое поведение замечено(например rbc.ru), а на некоторых нет(например joomlaportal.ru). Таких примеров много...
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Если только использовать переходы по якорям внутри страницы
*

Zubilo

  • Новичок
  • 7
  • 0 / 0
Якорь вешать можно на строчки(строчку) и в http запросе через # надо указывать какой якорь, а в данном случае положение страницы на сайте запоминается не по строчкам, а в любом месте, опять же см. rbc.ru



*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Хм.. проверил в Опера и IE8 - переходит на тоже самое место
*

ShadowXak

  • Завсегдатай
  • 1602
  • 162 / 6
  • no more programming
ИМХО - это браузер :)
проверил - ФФ - джумлафорум переходит откуда зашол со списка, rbc.ru - переходит в шапку сайта, тобишь сначала :)
---
так что ваши наблюдения чисто случайность :)
*

Zubilo

  • Новичок
  • 7
  • 0 / 0
мда... может, и действительно браузер, я проверяю под фф-3.0.12 и ие-6.0.2900.
Под обоими все на том же рбк у меня происходит возврат с того места, с которого я ушел, а не с начала сайта.

В таком случае, продолжу исследования, так сказать, чтобы докопаться до истины, по результатам отпишусь.
*

Physicist

  • Глобальный модератор
  • 984
  • 194 / 0
  • Рябов Денис
Может от значения Cache-Control в http-заголовке зависит?
*

Zubilo

  • Новичок
  • 7
  • 0 / 0
На первый взгляд оное вроде ни где не задается ...
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как вывести все категории всех разделов на одной странице?

Автор genius

Ответов: 4
Просмотров: 2227
Последний ответ 22.01.2019, 08:38:30
от genius
Вопрос о правильности разметки тегами на странице

Автор dpy1995

Ответов: 10
Просмотров: 6356
Последний ответ 09.01.2018, 12:49:25
от kungurskiy
Появление элемента на странице которого не должно быть - откуда?

Автор sergey113

Ответов: 1
Просмотров: 1713
Последний ответ 29.03.2016, 02:08:24
от sergey113
Постоянно выбивает ошибку 400 на любой странице

Автор timber

Ответов: 1
Просмотров: 1421
Последний ответ 10.01.2016, 11:41:26
от timber
[Решено] Остаться на той же странице после авторизации

Автор dron

Ответов: 6
Просмотров: 3110
Последний ответ 30.11.2015, 14:07:27
от anoorik