Макеты отображения модуля хранятся в папке 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; ?>