Макеты и переопределения
Макет — файл PHP с разметкой HTML, который выводит готовые данные. Joomla хранит макеты отдельно от кода, в папке tmpl, и позволяет подменить любой из них копией в шаблоне сайта. Так владелец сайта меняет внешний вид расширения, не трогая его файлы.
Где лежат макеты
| Расширение | Макет |
|---|---|
| Модуль | modules/mod_hello/tmpl/default.php |
| Компонент на сайте | components/com_content/tmpl/article/default.php |
| Компонент в панели | administrator/components/com_content/tmpl/articles/default.php |
Макет по умолчанию всегда называется default.php.
Второй макет
У модуля может быть несколько макетов. Создайте рядом с default.php файл compact.php:
modules/mod_hello/tmpl/
├── default.php
└── compact.php новый файл<?php
// modules/mod_hello/tmpl/compact.php
defined('_JEXEC') or die;
?>
<p class="mod-hello mod-hello--compact">
<?php echo htmlspecialchars($greeting, ENT_QUOTES, 'UTF-8'); ?>
(<?php echo count($articles); ?>)
</p>Этот макет выводит приветствие и число статей одной строкой — без списка.
Выбор макета в настройках
Чтобы администратор мог выбрать макет, в манифест добавляют поле типа modulelayout с именем layout:
<!-- modules/mod_hello/mod_hello.xml, внутри fields name="params" -->
<fieldset name="advanced">
<field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL"
class="form-select" />
</fieldset>В форме модуля на вкладке «Дополнительно» появится список «Макет» с вариантами default и compact. Выберите compact, сохраните и обновите сайт — блок стал одной строкой. Диспетчер сам читает параметр layout и подключает нужный файл.
Переопределение в шаблоне
Чтобы изменить вывод на конкретном сайте, макет копируют в папку html активного шаблона:
modules/mod_hello/tmpl/default.php
↓ копия
templates/cassiopeia/html/mod_hello/default.phpJoomla сначала ищет макет в шаблоне и только потом — в расширении. Измените в копии тег p на h4, обновите сайт — приветствие стало заголовком, а файл модуля остался прежним. Обновление модуля копию не затронет.
Копию можно создать и из панели: «Система → Шаблоны сайта → Cassiopeia», вкладка «Создать переопределения» — выберите там mod_hello.
Пути переопределений
| Что переопределяют | Куда кладут копию |
|---|---|
| Макет модуля | templates/шаблон/html/mod_hello/default.php |
| Макет компонента | templates/шаблон/html/com_content/article/default.php |
Общий макет из папки layouts | templates/шаблон/html/layouts/joomla/... |
Файл с новым именем, например html/mod_hello/wide.php, станет ещё одним вариантом в списке «Макет».
Частая ошибка
Правят modules/mod_hello/tmpl/default.php, а на сайте ничего не меняется. Причина — в шаблоне уже лежит переопределение, и Joomla берёт его. Проверьте папку templates/cassiopeia/html/mod_hello: если файл там есть, работает он.