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

master-smeta

  • Захожу иногда
  • 298
  • 10 / 0
Здравствуйте. Столкнулся со странностями в работе сайта. Joomla 5.0.3, в одной из множества категорий отображаются неопубликованные материалы.
Обычно я не создаю новый материал с нуля, а копирую ранее созданный. Так вот, после копирования материала мало того, что он по умолчанию опубликован и приходится каждый раз его снимать с публикации, так после снятия с публикации он продолжает отображаться в категории, хотя и выдает ошибку при открытии. Такая проблема наблюдается только в одной категории. В других категориях неопубликованные материалы не отображаются.

Права доступа проверял, ничего такого, разрешающего просмотр неопубликованных материалов не нашел. Да и нигде такого не нашел, всё облазил. Единственное подозрение на переопределённый макет категории, но он во всех категориях переопределён (в смысле у каждой категории свой не стандартный макет). Да и материалы в нём перебираются стандартным методом.

В общем не понимаю куда копать. Может быть кто-то сталкивался с такой штукой и знает что делать?

*

web1

  • Захожу иногда
  • 351
  • 20 / 1
Здравствуйте, а кэширование у вас в Joomla включено, если да, то попробуйте почистить кэш. Если нет — попробуйте обновить joomla.
« Последнее редактирование: 25.03.2024, 15:15:25 от web1 »
*

master-smeta

  • Захожу иногда
  • 298
  • 10 / 0
Прошу прощения, ложная тревога. Я по своей невнимательности забыл добавить проверку на "опубликованность" материала, когда вытаскивал их в подкатегорию. Это единственная категория, в которой материалы подкатегорий выводятся не общим списком, а под названием своей подкатегории.
В категории материалы выводятся так:
Код
foreach ($this->intro_items as $key => &$item)
а в подкатегории такой способ не прокатывает, поэтому вытаскивал материалы так:
Код
$model = JModelList::getInstance('Articles', 'ContentModel', array('ignore_request'=>true));
$appParams = JFactory::getApplication()->getParams();
$model->setState('params', $appParams);
$model->setState('filter.category_id', $child->id);
$items = $model->getItems();
$items содержит все материалы, поэтому в цикле нужно проверять на опубликованность, что я и забыл сделать.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как выключить тег canonical на одной нужной мне странице?

Автор azm1n

Ответов: 0
Просмотров: 559
Последний ответ 11.05.2025, 13:37:27
от azm1n
[РЕШЕНО] Блог категорий - подкатегории в несколько колонок

Автор mkl

Ответов: 1
Просмотров: 574
Последний ответ 04.03.2025, 13:38:24
от mkl
[РЕШЕНО] Главная страница в несколько колонок с новостями из разных категорий

Автор Санчо

Ответов: 1
Просмотров: 691
Последний ответ 22.02.2025, 18:58:36
от Санчо
Перестали отображаться материалы в админке

Автор Mick_20

Ответов: 5
Просмотров: 980
Последний ответ 13.02.2025, 07:18:09
от Mick_20
Вопрос про макет отображения Блога Категорий - в меню

Автор Lann

Ответов: 7
Просмотров: 851
Последний ответ 31.01.2025, 16:12:36
от Lann