Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Макеты и переопределения

Макет — файл 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.php

Joomla сначала ищет макет в шаблоне и только потом — в расширении. Измените в копии тег p на h4, обновите сайт — приветствие стало заголовком, а файл модуля остался прежним. Обновление модуля копию не затронет.

Копию можно создать и из панели: «Система → Шаблоны сайта → Cassiopeia», вкладка «Создать переопределения» — выберите там mod_hello.

Пути переопределений

Что переопределяютКуда кладут копию
Макет модуляtemplates/шаблон/html/mod_hello/default.php
Макет компонентаtemplates/шаблон/html/com_content/article/default.php
Общий макет из папки layoutstemplates/шаблон/html/layouts/joomla/...

Файл с новым именем, например html/mod_hello/wide.php, станет ещё одним вариантом в списке «Макет».

Частая ошибка

Правят modules/mod_hello/tmpl/default.php, а на сайте ничего не меняется. Причина — в шаблоне уже лежит переопределение, и Joomla берёт его. Проверьте папку templates/cassiopeia/html/mod_hello: если файл там есть, работает он.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.