Вывод модуля в компоненте или модуле, а так же вывод системных сообщений в компоненте или модуле
Как загрузить модуль в PHP-коде Joomla?
Решение.
В нужном месте вставляем следующий код:
<?php
jimport( 'joomla.application.module.helper' );
$module = JModuleHelper::getModule('MODULETYPE','MODULETITLE');
$attribs['style'] = 'STYLE';
echo JModuleHelper::renderModule( $module, $attribs );
?>
Где MODULETYPE - тип загружаемого модуля (например, mainmenu), MODULETITLE - заголовок модуля, STYLE - стиль (например, xhtml).
Другой вариант - загрузка всех модулей в определенной позиции:
<?php
jimport('joomla.application.module.helper');
$modules = JModuleHelper::getModules('POSITION');
foreach($modules as $module) {
echo JModuleHelper::renderModule($module);
}
?>
Где POSITION - название позиции, в которой расположены вызываемые модули.
Можно воспользоваться услугами стандартного плагина Content.loadmodule. В этом случае код будет выглядеть так.
<?php
use Joomla\CMS\HTML\HTMLHelper as JHTML;
// .....
?>
<!--- ..... -->
<?php echo trim(JHTML::_('content.prepare', '{loadposition POSITION}')); ?>
Если нужно вывести контент модуля внутри другого модуля, то делаем так:
<?php
$module2 = JModuleHelper::getModule('MODULETYPE','MODULETITLE');
echo $module2->content;
?>
Переменную $module использовать нельзя, т.к. она содержит параметры родительского модуля.
Вывод системных сообщений можно организовать так:
<?php
$doc = JFactory::getDocument();
$class = 'JDocumentRendererMessage';
if (!class_exists($class))
{
require_once JURI::base(true) . '/libraries/joomla/document/html/renderer/message.php';
}
$Messages = new $class($doc);
$mes = JFactory::getApplication()->getMessageQueue();
if (is_array($mes) && !empty($mes))
{
echo $Messages->render();
}
?>