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

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Начинающим пользователям Joomla иногда бывает достаточно тяжело разобраться с структурой материалов и организацией меню. В данном посте попытаемся раскрыть основные (ключевое слово) моменты организации несложного новостного сайта.
Задача такова:
1 - Главная - на ней новостная лента, регулярно обновляется.
2 - Статьи - содержит перечень статей в столбик, заголовки и авторы. Кликнув на заголовок,  посетитель может прочесть статью.
3 - Компании - перечень компаний, кликнув на название компании посетитель попадает в некую мини-новостную ленту, в ней содержаться только новости о данной компании. При этом материал должен быть доступен как в пределах категории, так и виден на главной странице
4 - еще один раздел статей, но в нем статьи должны быть представлены несколькими первыми строчками и ссылкой "читать далее".

Начнем с третьего пункта.
Создаем раздел "компании" Content - Section Manager - New


Далее создаем категории данного раздела.


Логика у нас следующая - каждая компания будет иметь под собой несколько материалов в виде новостей, значит каждая комания - отдельная категория. В итоге у нас получается следующее - Content - Content by Section - Компании - Компании Categiries


Далее в каждой категории создаем материалы Content - Content by Section - Компании - Компании items. Получаем следующую картинку


Самое интересное - создаем ссылку в меню. Menu - mainmenu - new - List Content Section (то есть на таблицу с содержимым раздела)


и выбираем раздел "Компании". Следующим шагом играемся с параметрами ссылки:


Category List - Section - показываем ссылки на категории
# Category Items - скроем количество материалов в категории
Category List - Category - убираем показ ссылок на категории при просмотре содержимого
Navigation Bar, Order Select, Display Select, Filter - убираем ненужные нам фильтры и навигацию и прочее
В итоге у нас получилось следующее в фронтенде сайта:
входим в список компаний


входим в новости каждой компании


читаем полный текст (fulltext) новости



Пункт 2: попроще и решить можно как минимум двумя способами. Используем созданную уже структуру материалов для Компаний
вариант 1 - создать в меню ссылку Blog - Content Category и выставить нужные параметры отображения. В настройках не получится убрать показ вводного  текста (introtext), поэтому при создании материалов данное поле можно оставлять пустым, а всю информацию помещать в блок fulltext


вариант 2 - создать в меню ссылку Table - Content Category и выставить нужные параметры отображения. Результат будет схожим с третьим пунктом.



Пункт 4 делается идентично 1-му варианту 2-го пункта. Интересный момент - при создании ссылки Blog - Content Category можно указывать (зажав CTRL) несколько категорий данного раздела.


И по окончании все определимся, что же мы будем показывать на главной странице. Каждую новость каждой компании помещать на главную страницу нет необходимости, действовать надо осторожно. Для этого есть чудо параметр в настройках каждого материала в разделе Publishing - Show on Front Page


Либо можно, находясь в содержимом категории отметить нужный пункт:


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


Вот такими нехитрыми способами можно за считанные минуты сделать требуемую структуру материалов и меню к примеру для новостного сайта.
Вспомогательные ссылки из Joomla FAQ:
« Последнее редактирование: 02.08.2007, 18:26:33 от beliyadm »
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как запретить редактирование материалов с фронтенда?

Автор obormot

Ответов: 1
Просмотров: 17312
Последний ответ 19.06.2008, 02:10:01
от smart
Невозможно удалить установленные шаблоны сайта

Автор bogivand

Ответов: 1
Просмотров: 12616
Последний ответ 19.05.2008, 21:13:04
от smart
Вывод последних материалов сайта (модуль последних новостей)

Автор beliyadm

Ответов: 1
Просмотров: 36397
Последний ответ 26.09.2007, 15:48:23
от beliyadm
Как сделать чтобы многоуровневое меню по-умолчанию было развернуто?

Автор smart

Ответов: 0
Просмотров: 24217
Последний ответ 04.04.2007, 12:57:22
от smart
Как создать ссылку на статичный материал не добавляя его в меню?

Автор smart

Ответов: 0
Просмотров: 79837
Последний ответ 27.03.2007, 11:10:56
от smart