Решил написать очередную шпаргалку на тему указанную в заголовке. Причина простая: устал каждый раз вспоминать правильные методы и классы. А поскольку речь сегодня будет идти о Joomla 4 и Joomla 5, то готовых актуальных примеров в сети Интернет не так уж и много.
И даже на официальном сайте выложен пример с методами и классами, которые помечены, как «deprecated». То есть устаревшие.
Задача
Предположим, у нас есть сайт работающий под управлением Joomla 4 или Joomla 5.
На сайте установлен компонент собственной разработки, задача которого отображать содержимое переменной $text на лицевой части сайта.
И очень хотелось бы, чтобы эта переменная перед выводом на сайт обрабатывалась установленными и активированными плагинами контента Joomla.
Пишем код
К слову говоря, показанный ниже код, под Joomla 3 работать не будет.
Более того, если вести речь о нативном коде, то для Joomla 4 и Joomla 5 он будет отличаться.
Код для Joomla 4:
use Joomla\CMS\Factory; use Joomla\CMS\Plugin\PluginHelper; use Joomla\Event\Event; use Joomla\Registry\Registry; $text = 'Какой то контент'; $app = Factory::getApplication(); $params = new Registry(); PluginHelper::importPlugin('content'); // Отправить на обработку мы должны объект // Свойство text, которого будет хранить нашу переменную $content = new \stdClass; $content->text = $text; $dispatcher = $app->getDispatcher(); $event = new Event('onContentPrepare', array('mod_custom.content', &$content, &$params, 0)); $dispatcher->dispatch('onContentPrepare', $event); // Возвращаем в нашу переменную результат обработки $text = $content->text;
Код для Joomla 5:
use Joomla\CMS\Factory; use Joomla\CMS\Plugin\PluginHelper; use Joomla\CMS\Event\Content\ContentPrepareEvent; use Joomla\Registry\Registry; $app = Factory::getApplication(); $params = new Registry(); PluginHelper::importPlugin('content'); $text = 'Какой то контент'; $content = new \stdClass; $content->text = $text; $dispatcher = $app->getDispatcher(); $event = new ContentPrepareEvent('onContentPrepare', array('mod_custom.content', &$content, &$params, 0)); $dispatcher->dispatch('onContentPrepare', $event); $text = $content->text ;
Очень надеюсь, что он помог решить вашу задачу. Если остались вопросы и предложения, с радостью выслушаю их в моей группе VK по ссылке ниже:
С уважением, Владимир Егоров