Як додати поле (редактора) в модуль щоб воно оброблялось плагінами (наприклад, для виводу іншого модуля )

Щоб добавити власне поле редактора (чи іншого типу) в модуль, добавляємо два параметра в .xml файл модуля. Перший, це кнопки "показати" редактор чи "не показувати", друге - сам редактор:

    <field
        name="show_neweditor"
        type="radio"
        layout="joomla.form.field.radio.switcher"
        label="MOD_MYMODULE_SHOW"
        default="0"
        filter="integer"
        >
        <option value="0">JHIDE</option>
        <option value="1">JSHOW</option>
    </field>
    <field
        name="new_neweditor"
        filter="raw" 
        type="editor" rows="10" cols="100"
        default="" 
        showon="show_neweditor:1"
        label="MOD_MYMODULE_NEWEDITOR"
        description="" />

Тепер в налаштуваннях вашого модуля в адмін панелі з'явилось поле "показати/приховати" редактор і сам редактор відповідно.

Далі в файлі шаблону модуля (за звичай це default.php) після defined('_JEXEC') добавляємо класи, які будемо використовувати (якщо їх там нема):

use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\HTML\HTMLHelper;

І в потрібному місці виводимо зміст поля:

<?php
// Отримуємо сирий текст із параметрів
$new_neweditor= $params->get('new_neweditor', '');
if ($params->get('show_neweditor', '0') == 1 && !empty($new_neweditor)) :
// Імпортуємо групу плагінів 'content'
PluginHelper::importPlugin('content');
// Обробляємо текст плагінами joomla, через HTMLHelper (це аналог JHtml::_('content.prepare', ...))
// Четвертий аргумент — це контекст, можеш вказати назву свого модуля
$processed_content = HTMLHelper::_('content.prepare', $new_neweditor, '', 'mod_mymodule.content');
?>
<div class="mod_neweditor_block"> <?php echo $processed_content; ?> </div>
<?php endif; ?>

на що звернути увагу:

  • HTMLHelper::_('content.prepare', ...): Це "магічний" метод Joomla. Коли ти його викликаєш, система автоматично знаходить усі увімкнені контент-плагіни, проганяє твій текст крізь них (шукає фігурні дужки {...}) і замінює їх на відповідний контент (модулі, галереї тощо).
  • Контекст ('mod_mymodule.content'): Це важливо для деяких плагінів, щоб вони розуміли, звідки прийшов запит. Ти можеш вказати будь-який рядок, зазвичай це назва_компонента.тип.