Обновление статьи: Использование WebAssetsManager Joomla 4 и добавление собственных пресетов с...

Обновление статьи: Использование WebAssetsManager Joomla 4 и добавление собственных пресетов с помощью плагина

В статье рассказывается о том, как добавлять веб-ассеты (css, js, шрифты) в Joomla 4 и Joomla 5 с использованием концепции WebAssets. В статье описывался пример создания плагина по старой архитектуре Joomla. При попытке создать плагин по новой архитектуре стали тот же код отказался работать. По итогу исследований статья обновлена:

1 изменение. В методе getSubscribedEvents() плагина не должно быть никакой логики, кроме маппинга событий и методов плагина.

2 изменение. Предыдущая рекомендация была подключать веб-ассеты на событие onAfterInitialise. Однако, это одно из самых ранних системных событий. На этом этапе Joomla ещё не знает какой именно тип документа требуется отобразить (HTML, Json и т.д.). Использование привычных методов Factory::getDocument() (устаревший вызов) или Factory::getApplication()->getDocument() приводили к слишком ранней инициализации типа документа и в случае использования документов типа Json могли вызывать ошибку. Об этом написано в переводе статьи Распространенные ошибки при написании плагинов Joomla 4. В случае с типом документа HTML всё работало, но под капотом оно было неправильно.

3 изменение. Вторым нюансом в выборе правильного системного события оказалось то, что есть WebAssetRegistry - реестр ассетов. И WebAssetManager - менеджер по работе с ассетами. WebAssetRegistry инициализируется и доступен раньше, чем WebAssetManager. Его можно получить из контейнера например на событие onAfterRoute и здесь же добавить свой ассет. Как оказалось, событие onBeforeCompileHead - это одно из самых последних вызываемых событий и добавлять именно файл joomla.asset.json в этот момент жизненного цикла приложения уже слишком поздно. Поэтому, как я писал ранее, попытки зарегистрировать веб-ассет на событии onBeforeCompileHead приводили к тому, что joomla.asset.json добавлялся в реестр ассетов, но не парсился. Что равносильно тому, что его не существует.

4 изменение. Все методы плагинов должны возвращать пустоту - void - и использовать $event->setResult(); и $event->setArgument(); для возврата результатов.

Теперь примеры кода исправлены.

Читать статью

Joomla!® CMS — пожалуй, лучшая система управления контентом с открытым исходным кодом

Логотип Joomla

Joomla! — это больше, чем просто программное обеспечение, это люди, включающие разработчиков, дизайнеров, системных администраторов, переводчиков, копирайтеров, и, что самое главное — простых пользователей.

Мы рады пригласить вас в ряды нашего сообщества!

Свернуть

Коротко о главном в Joomla

Новости портала

Новое в блогах

Видео

Форум о Joomla