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

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
В J1.5 функция _createLanguage была дружественной public function и всё было прекрасно.
Теперь, в J1.7 её сделали protected static function.
Естественно, обратиться к ней напрямую я не могу.
Но надо.
А как?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Как преодолеть protected static function
« Ответ #1 : 23.04.2012, 11:44:44 »
Придется костылить - делать новый класс, который расширяет класс, содержащий _createLanguage. А случайно там нет публичной функции, которая  дает доступ к  _createLanguage?
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
Re: Как преодолеть protected static function
« Ответ #2 : 24.04.2012, 03:42:20 »
Придется костылить - делать новый класс, который расширяет класс, содержащий _createLanguage.
Да, этого я и боялся.
Совсем не хотелось бы этого делать, но, видимо, иначе никак.

А случайно там нет публичной функции, которая  дает доступ к  _createLanguage?
Нет, вроде как нету такой.

может для начала напишете для чего надо?
возможно костыли не нужны!

Для J1.5 есть такая штуковина - Enable Content Languages
Она переключает язык сайта в зависимости от языка конкретной статьи.
В нынешней реализации, от языка статьи как бы ничего не зависит. Идея, однако, в том, чтобы обойти кругом всё нынешнюю мишуру с переключением языка через менюхи, а переключать его статьёй.
Вот случай, где такое было бы полезно.
Однако коса доделывания для J1.7 и т.д. нашла на камень закрытости вышеуказанной функции.
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
Re: Как преодолеть protected static function
« Ответ #3 : 24.04.2012, 20:02:51 »
есть где то пример?
Страница на английском - формат даты, форма фомментариев - на английском.
http://newrussianamerica.com/joomla/fixing-capdropper.html

Страница на русском
http://newrussianamerica.com/joomla/dorabotka-capdropper.html
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] "PHP Fatal error: Call to a member function getKeyName()

Автор n_drey

Ответов: 7
Просмотров: 10116
Последний ответ 04.12.2013, 23:25:19
от n_drey
Jquery. $(document).ready(function(){}) в разных браузерах

Автор Виталик

Ответов: 0
Просмотров: 3910
Последний ответ 11.05.2009, 22:44:23
от Виталик