Решил написать очередную шпаргалку на тему указанную в заголовке. Причина простая: устал каждый раз вспоминать правильные методы и классы. А поскольку речь сегодня будет идти о 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 по ссылке ниже:
С уважением, Владимир Егоров
Войти через Яндекс
