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