Вывод модуля в компоненте или модуле, а так же вывод системных сообщений в компоненте или модуле
Как загрузить модуль в 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(); } ?>