Joomla 3.0

 

Макеты расположены в папке /layouts/
код вывода

<?php echo JLayoutHelper::render('joomla.content.icons', array('params' => $params, 'item' => $this->item, 'print' => false)); ?>

Ключ joomla.content.icons позволяет определить, какой именно макет используется для вывода. В данном случае /layouts/joomla/content/icons.php

альтернативный вариант

new JLayoutFile('joomla.content.tags');
$layout->render($itemTags);

будет искать файлы в следующем порядке

[0] => templates/mytemplate/html/layouts/com_mycomponent
[1] => components/com_mycomponent/layouts
[2] => templates/mytemplate/html/layouts
[3] => layouts

С указанием папки загрузки файла в явном виде

$layout = new JLayoutFile('joomla.content.tags', JPATH_SITE . '/components/com_mycomponent/layouts');
$layout->render($itemTags);

Копируем файлы из папки /layouts/joomla/content/

в папку /templates/вашшаблон/html/layouts/joomla/content/

и делаем с ними что душа пожелает 

Joomla3.2

 

 Пример вызова макета

$layout = new JLayoutFile('joomla.content.tags', null, array('debug' => true, 'client' => 1, 'component' => 'com_tags'));

'debug' => true : вывод отладочной информации

'client' => 1 : Принудительное задание клиентской части 0, 'site' > frontend, 1, 'admin' > backend

'com_tags' : Принудительное задание компонента - указание компонента, из которого берется макет

Представим, что у вас имеется папка с макетами, но вы не хотите хранить все макеты в этой папке. Нужно добавить папку, в которой Joomla будет искать макеты, и в случае, если не найдет их, то загрузит стандартные. Например, у вас есть библиотека, включающая в себя собственные макеты для всех ваших компонентов. Вызов:

$layout = new JLayoutFile('joomla.content.tags');
$layout->addIncludePaths(JPATH_LIBRARIES . '/mylayouts');

 добавит /libraries/mylayouts на верхний уровень при поиске макетов (максимальный приоритет) Можно использовать массив путей, последний элемент массива имеет самый высокий приоритет

Суффиксы

Одним из предложений (в этом случае от Robert Deutz) было иметь возможность присваивать макетам суффиксы. Оригинальная идея заключалась в том, чтобы дать возможность расширениям искать характерный макет текущей версии Joomla! или использовать макет по умолчанию. Пример:

$layout = new JLayoutFile('joomla.content.tags', null, array('suffixes' => array('j3x', 'j25')));
echo $layout->render($this->item->tags->itemTags);

Файлом макета в данном случае будет /layouts/joomla/content/tags.j3x.php или /layouts/joomla/content/tags.j25.php. Но это только один из примеров применения. Представьте, что вам нужен макет для RTL языков. Вы можете добавить макет в поиск для постоянного мониторинга, не подключен ли активный RTL язык. Или представьте почтовый индекс в адресе покупателя, который отображается в разных местах / в разном формате в зависимости от страны. Можно добавить проверку определенного макета для страны покупателя.

Субмакеты
Глобальный вызов:

JLayoutHelper::render('invoice', $invoiceData);

А внутри макета что-то типа:

<div>
    <div>
        <?php echo $this->sublayout('shopper', $displayData['shopper']); ?>
    </div>
    <div>
        <?php echo $this->sublayout('header', $displayData); ?>
    </div>
    <div>
        <?php echo $this->sublayout('products', $displayData['products']); ?>
    </div>
    <div>
        <?php echo $this->sublayout('footer', $displayData); ?>
    </div>
</div>

Это главный макет, который вызывает субмакеты. Таким образом, пользователи могли бы переопределить шапку инвойса и не затрагивать остальную систему.

 

При вызове субмакета система пытается найти папку, названную так же, как и этот макет, с субмакетами внутри. В этом примере у нас был бы главный макет invoice.php и в этой же папке была бы папка под названием invoice, которая содержит в себе субмакеты (shopper.php, header.php, products.php & footer.php).

Субмакеты будут наследовать любые настройки, переданные в родительский макет. Они будут искать по тем же включаемым путям, в той же клиентской части и с теми же суффиксами.