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

Silence

  • Захожу иногда
  • 60
  • 1 / 0
Всем добрый день. Надеюсь кто-нибудь сталкивался с подобной проблемой и сможет подсказать, куда копать. Проблема в следующем:

На Joomla 2.5.11 стоит sh404SEF 3.6... Все работает, но есть такая мелочь, на некоторых страничках в титульнике (если не настроен отдельно) сразу перед названием очередной категории стоит символ "-", без пробела перед самим названием. Все бы ничего (ну можно пережить), но ссылки на таких материалах принимают вид - "/­­-otdeleniya-sosudistoy-hirurgii-№1№2/sosudistaya-hirurgiya-vrachebnyy-kollektiv.html" (самое забавное, что, когда я вставляю всю строку, то минус исчезает (т.е он дефисом не является..). И в таком случае, ссылки работают, но, если минуса не будет (если вставить в блокнот, где "минус" виден и удалить его), то ссылка выдаст 404 ошибку.
Т.е, вот такая ссылка - /otdeleniya-sosudistoy-hirurgii-№1№2/sosudistaya-hirurgiya-vrachebnyy-kollektiv.html - не сработает,
а такая - /­otdeleniya-sosudistoy-hirurgii-№1№2/sosudistaya-hirurgiya-vrachebnyy-kollektiv.html - сработает.
Надеюсь понятно объяснил. Дело еще в том, что на всех других проектах, все прекрасно работает, никаких "минусов" там не появляется. Хотя сочетания Joomla и sh404SEF такие же..

Ссылки не хотелось бы "светить" перед поисоквиком, но ничего не поделаешь.. может успею вечером удалить :)

Ссылки удалил. Проблема была решена.
« Последнее редактирование: 03.06.2013, 16:44:05 от Silence »
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Может в названии категории пробел в начале стоит?
*

AlexSmirnov

  • Завсегдатай
  • 1862
  • 272 / 16
  • Ищите и найдете
sh404SEF куплен у разработчика или скачан с вареза?
# Back the fufalo (особенно ту самую столкершу)! #
# ВАЖНО! Кайфую от удаления присланного в личку спама, почти как от любви (особенно по выходным). #
*

Silence

  • Захожу иногда
  • 60
  • 1 / 0
Может в названии категории пробел в начале стоит?
Пробелы проверял, нет их там.
AlexSmirnov, брал с этого форума = скачен с вареза.

Сегодня купил у разработчика - все равно та же проблема (старый удалял без сохранения настроек).

И еще одно дополнение..
Только что понял, как избавиться от минусов:
перекопировал названия категорий в блокнот и из него вставил обратно в строку названия. Минусы исчезли (не представляю каким образом они там объявились до этого, я вручную все вводил) - проблема исчезла. Ранее не смог так исправить, потому что копировал выделением мышки, а сейчас нажатием ctrl+a, в этом случае в блокнот вставляется строка названия с этим самым минусом\дефисом.
Не уверен, что кому-то понадобиться, но проблема решена :)
« Последнее редактирование: 02.06.2013, 14:59:07 от Silence »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не отображает некоторые буквы в ссылках

Автор Neptun

Ответов: 3
Просмотров: 1434
Последний ответ 25.10.2013, 14:04:52
от Neptun
sh404SEF и русский текст в ссылках

Автор ZeroUA

Ответов: 19
Просмотров: 10301
Последний ответ 23.08.2013, 12:31:14
от hagaiFD
как массово заменить в ссылках часть

Автор Akksimo

Ответов: 0
Просмотров: 1378
Последний ответ 19.10.2012, 19:45:12
от Akksimo