Breadcrumbs

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

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

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

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

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

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

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

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

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

Нашел ещё такое решение:

Вместо этой конструкции мы должны использовать PHP класс Joomla под названием JModuleHelper и его методы getModules и renderModule, например:

<?php
jimport( 'joomla.application.module.helper' ); // подключаем нужный класс, один раз на странице, перед первым выводом
$module = JModuleHelper::getModules('our-module'); // получаем в массив все модули из заданной позиции
$attribs['style'] = 'xhtml'; // задаём, если нужно, оболочку модулей (module chrome)
echo JModuleHelper::renderModule($module[0], $attribs); // выводим первый модуль из заданной позиции
?>

Заметки:

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

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

<?php
$module = JModuleHelper::getModules('order');
if ($module) {
	echo JModuleHelper::renderModule($module[0]);
}
?>

 

Так же обратите внимание, этот код нужно использовать если вы планируете выводить в этой позиции один модуль, если их будет несколько, то нужно делать так:

<?php
jimport( 'joomla.application.module.helper' );
$modules = JModuleHelper::getModules('our-module'); // изменили название переменной с единственного на множественное число для понятности
$attribs['style'] = 'xhtml';

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

 

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

Спасибо: site-on.net