Добавить позицию модуля в компонент, другой модуль

Стандартными средствами вставить в компонент позицию модуля нельзя! Хотя очень зря.

Рабочий вариант для вставки модуля в компонент.

бычным методом как в шаблоне:

<jdoc:include type="modules" name="module"  />

не получается...

Очевидно, что самым простым способом будет следующее решение:

echo JHtml::_('content.prepare', '{/loadposition position-name}'); //Удалить слэш перед loadposition

главное, чтобы был включен плагин Content - Load modules (вставка модулей).

Module helper class

//подключаем нужный класс, если требуется
jimport( 'joomla.application.module.helper' ); // Старые версии
use Joomla\CMS\Helper\ModuleHelper; // joomla 4, следует использовать тогда "ModuleHelper", без J

$modName = JModuleHelper::getModule('mod_custom'); // Название модуля
// или
$modules = JModuleHelper::getModules('our-module'); // Позиция модулей
// или
$mod     = JModuleHelper::getModuleById('135');; // ID модуля

 

Заметки:

  • В данном варианте мне не нужен стиль позиции ($attribs).
  • Так же, если в данной позиции модуль отсутствовал, выдавалась ошибка - нужно сделать проверку.
  • Выводил модуль в компоненте Zoo, там видимо уже подключен класс JModuleHelper, потому как заработало без его подключения.
  • Можно не создавать переменную $module, написать прям как есть. (не стал убирать)

Использую вот такой вариант для одного модуля:

$mod      = JModuleHelper::getModuleById('135');

if ($mod->id) {
    echo JModuleHelper::renderModule($mod, false);
}

 Или такой для нескольких

foreach($modules as $module){ // в цикле перебираем и выводим все модули
    echo JModuleHelper::renderModule($module, $style); // $style = 'none';
}

Ссылки и благодарности

Другие методы: api.joomla.org