Почитать другие заметки или статьи

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

https://vk.com/sitogon

С уважением, Владимир Егоров