Макеты отображения модуля хранятся в папке tmpl
в папке с модулем mod_simple
:
/modules/mod_simple/tmpl
С помощью JModuleHelper
модуль выводится через указанный макет.
Пример кода демонстрирует выборку имени макета из Настроек модуля по имени layout
:
require JModuleHelper::getLayoutPath('mod_simple', $params->get('layout'));
Можно задать макет по умолчанию default
, если его имя в Настройках не указывается:
require JModuleHelper::getLayoutPath('mod_simple', $params->get('layout', 'default'));
JModuleHelper
просматривает папку tmpl
в поисках макета с указанным именем.
Класс JModuleHelper
располагается в:
/libraries/joomla/application/module/helper.php
/**
* Get the path to a layout for a module
*
* @param string $module The name of the module
* @param string $layout The name of the module layout. If alternative
* layout, in the form template:filename.
*
* @return string The path to the module layout
*
* @since 11.1
*/
public static function getLayoutPath($module, $layout = 'default')
{
$template = JFactory::getApplication()->getTemplate();
$defaultLayout = $layout;
if (strpos($layout, ':') !== false ) {
// Get the template and file name from the string
$temp = explode(':', $layout);
$template = ($temp[0] == '_') ? $template : $temp[0];
$layout = $temp[1];
$defaultLayout = ($temp[1]) ? $temp[1] : 'default';
}
// Build the template and base path for the layout
$tPath = JPATH_THEMES.'/'.$template.'/html/'.$module.'/'.$layout.'.php';
$bPath = JPATH_BASE.'/modules/'.$module.'/tmpl/'.$defaultLayout.'.php';
// If the template has a layout override use it
if (file_exists($tPath)) {
return $tPath;
}
else {
return $bPath;
}
}
Как видно, сначала проверяется на существование папка внутри папки с шаблоном сайта:
$tPath = JPATH_THEMES.'/'.$template.'/html/'.$module.'/'.$layout.'.php';
И в случае, если она существует, то стандартный макет заменяется.
Для того, чтобы иметь возможность выбрать макет в Настройках модуля в Закрытой части сайта, в обновляется файл Настроек mod_simple.xml
:
Станут доступны 3 вида макета:
<option value="default">Обычный список</option>
<option value="ordered">Нумерованный список</option>
<option value="paragraphs">Параграфы</option>
Для того, чтобы макет загрузился с помощью класса JModuleHelper
в папке tmpl
должны находиться файлы с соответствующими названиями:
- default.php
- ordered.php
- paragraphs.php
Файл макета default.php
<?php defined( '_JEXEC' ) or die; ?>
<ul>
<?php foreach ($rows as $row) : ?>
<li><?php echo $row->name; ?></li>
<?php endforeach; ?>
</ul>
Файл макета ordered.php
<?php defined( '_JEXEC' ) or die; ?>
<ol>
<?php foreach ($rows as $row) : ?>
<li><?php echo $row->name; ?></li>
<?php endforeach; ?>
</ol>
Файл макета paragraphs.php
<?php defined( '_JEXEC' ) or die; ?>
<?php foreach ($rows as $row) : ?>
<p><?php echo $row->name; ?></p>
<?php endforeach; ?>