MZZ.Framework 0.3.x: Документация
Разделы

3.1 Шаблоны

1. Общие сведения
2. Плагин {load}
3. Плагин {add}
4. Плагин {url}
5. Плагин {title}
6. Плагин {meta}
7. Плагин {icon}
1. Общие сведения

Шаблоны можно считать View-составляющей парадигмы MVC, на основе которой построен mzz.

В качестве обработчика шаблонов используется Smarty.

В mzz образно все шаблоны делятся на 2 вида: "активные" и "пассивные". Первые служат своеобразной точкой входа в приложение. Запуском "активного" шаблона занимается core.

На один запрос пользователя может быть запущен лишь один "активный" шаблон и любое количество "пассивных" шаблонов. "Пассивные" шаблоны, в свою очередь, могут быть вызваны как "активными" в процессе запуска приложения, так и "пассивными" шаблонами. Их целью может являться отображение данных, полученных из модели (в контексте парадигмы MVC), в требуемом виде.

Так как активные шаблоны в большинстве случаев отличаются только значениями параметров, существует несколько активных шаблонов по умолчанию. Вы можете указать активный шаблон в конфигурации действий модуля с помощью параметра main. По умолчанию существуют следующие активные шаблоны: active.main.tpl, active.blank.tpl, active.admin.tpl. Первый отобразит результат в шаблоне для публичной части, следующие без дополнительного шаблона и в шаблоне для административной части. Кроме того, вы можете запретить вызов действия напрямую через URL указав main="deny". Таким образом, когда указан параметр main, необходимости в создании отдельного активного шаблона нет.

"Активные" шаблоны располагаются в файлах <проект>/templates/act/<модуль>/<действие>.tpl. "Пассивные" шаблоны располагаются в system/modules/<модуль>/templates/<действие>.tpl и могут быть переопределены в <проект>/templates/<модуль>/<действие>.tpl

2. Плагин {load}

Функция {load} предназначена для запуска модулей из шаблонов. Этот метод является реализацией некоей "стратегии вытягивания", в которой шаблоны (по сути клиентский код) сами определяют, какие данные нужно получить и отобразить пользователю. За счёт этого достигается удобство и гибкость приложений, использующих данный принцип.

Синтаксис функции:

{load module="" action="" section="" <имя>="значение" ...}

Описание основных аргументов:

Пример 1. Выполнение действия "list" модуля "Новости" в текущей секции:

{load module="news" action="list"}

Пример 2. Отображение новости с ID 15 в секции "mainNews":

{load module="news" action="view" id="15" section="mainNews"}

Дополнительно у {load} есть два аргумента: 403tpl и 403header. Первый определяет имя шаблон, отображаемого в случае, если прав нет (по умолчанию используется simple403Controller), а второй -- нужно ли выдавать HTTP-ответ 403 Forbidden, если прав нет. Смотрите также раздел о взаимодействие системы проверки прав и шаблонов.

3. Плагин {add}

Функция {add} является простым способом включить в шаблон JS и CSS файлы. Если файл уже был включен, второй раз он подключен не будет. Результатом этих функций являются HTML-теги <script> или <style> (в зависимости от типа подключаемого файла).

Синтаксис функции:

{add file="имя файла"[ tpl="имя шаблона"]}

Описание аргументов:

- file: имя подключаемого файла;
- tpl: имя шаблона, определяющий как будет выглядеть результат (по умолчанию это в зависимости от расширения файла js.tpl или css.tpl)

Пример 1. Подключение CSS и JS файла:

{add file="style.css"}
{add file="style.js"}

Пример 2. Подключение JS файла, используя специальный шаблон "some_template.tpl":

{add file="script.js" tpl="some_template.tpl"}

Для вывода результата в необходимом месте шаблона (например, header.tpl) размещается код, который включит в шаблон все добавленные ранее файлы:

...
<head>
<title>mzz</title>
{include file='include.css.tpl'}
{include file='include.js.tpl'}
</head>
...

Также в mzz имеется возможность включения «склеенных» файлов. Благодаря этому для получения нескольких JS или CSS файлов будет выполнен лишь один запрос к web-серверу, что благоприятно скажется на работоспособности. Для этого достаточно просто изменить шаблон вывода следующим образом:

...
<head>
<title>mzz</title>
{include file='include.external.css.tpl'}
{include file='include.external.js.tpl'}
</head>
...

Тогда шаблон вида

{add file="file1.js"}
{add file="file2.js"}
{add file="file3.js"}
{add file="file4.css"}
{add file="file5.css"}

в конечном результате будет выглядеть следующим образом:

<link rel="stylesheet" type="text/css" href="/templates/external.php?type=css&files=file4.css,file5.css" />
<script type="text/javascript" src="/templates/external.php?type=js&files=file1.js,file2.js,file3.js"></script>

Следует отметить, что ввиду некоторых обстоятельств, не все JS и CSS файлы будут работать корректно в «склееном» виде. Поэтому существует возможность явно запретить файлу участвовать в склеивании. Для этого достаточно передать параметр join=false к аргументам функции:

{add file="file1.js" join=false}
4. Плагин {url}

Для вставки адреса (URL) в шаблон можно использовать функцию {url}. Результатом работы этой функции является сгенерированный URL, который содержит:

- текущий протокол (HTTP/HTTPS);
- адрес HTTP-хоста (HTTP_HOST);
- порт сервера, если он отличается от стандартного "80";
- дополнительный путь, который указан в конфигурационной константе SITE_PATH;
- используемый язык, если включена мультиязычность в Routes;
- секция;
- параметры, если они были указаны;
- действие.

Для получения текущего URL вызывается {url} без каких-либо аргументов.

Синтаксис функции:

{url module="модуль" section="секция" action="действие" route="имя"}

Описание аргументов:

- module: имя модуля, если секция не указана по нему будет определена секция;
- section: имя секции, на которую будет ссылаться URL. Если не указана, будет использована текущая или, если указан модуль, секция модуля;
- action: действие для указанного section;
- route: имя правила для маршрутизации сборки URL.

Все аргументы являются не обязательными.

Функция может принимать так же и любые другие аргументы, которые будут являться параметрами. Примером генерации http://example.com/news/4/asc/edit в соответствии с правилом маршрутизации :section/:id/:sort/:action является:

{url section="news" action="edit" id="4" sort="asc" route="newsList"}

Пример генерации URL для редактирования объекта с ID 4 в секции "news" (http://example.com/news/4/edit):

{url section="news" action="edit" id="4"}

Функция генерирует только URL. Например, сделать ее ссылкой можно следующим образом: <a href="{url}">link</a>

Иногда возникает ситуация, когда требуется также передать и обычные GET параметры. Сделать это можно так:

<a href="{url _param="value" _param2="value2"}>link</a>

Параметр appendGet определяет надо ли добавить в URL текущие GET-параметры или исключить их из URL.

5. Плагин {title}

Плагин позволяет собрать заголовок для окна браузера из разных мест.

Примеры использования для добавления части заголовка:

{title append="Новости" separator=" - "}
{title append="2009"}
{title append="Список"}

Примеры вывода заголовка:

{title separator=" | "}
{title separator=" | " end=" - "}
{title separator=" | " start=" - "}

Соответствует следующий результатам:

Новости - 2009 | Список
Новости - 2009 | Список -
- Новости - 2009 | Список

Значения аргументов end или start присоединяются к результату только при выводе заголовка и если он не пустой (основное применение этих аргументов: разделитель для названия сайта и цепочки заголовков).

6. Плагин {meta}

Плагин для установки meta информации (ключевых слов и описания страницы в <meta> тегах).

Примеры использования:

{keywords show="description" default="информационный сайт"}
{keywords keywords="новости, просмотр, в мире"}
{keywords description="просмотр новостей в мире"}
{keywords show="keywords"}
{keywords show="description" default="информационный сайт"}

Результатом выполнения этого кода будет:

информационный сайт
новости, просмотр, в мире
просмотр новостей в мире

Эти плагины можно использовать для указания content атрибута для соответствующих meta-тегов.

7. Плагин {icon}

Плагин для генерации "системных" иконок.

Синтаксис функции:

{icon sprite="описание sprite'а" [jip=true] [active=true|disabled=true]}

Описание аргументов:

Формат строки спрайта:

sprite:name/index[/overlay]

Примеры использования:

{icon sprite="/templates/images/icon.gif"}
    {icon sprite="sprite:mzz-icon/mzz-icon-folder/mzz-overlay-add"}
    {icon sprite="sprite:mzz-icon/mzz-icon-folder/mzz-overlay-add" active=true}
    {icon sprite="sprite:mzz-icon/mzz-icon-folder/mzz-overlay-add" disabled=true}
    {icon sprite="sprite:mzz-icon/mzz-icon-folder/mzz-overlay-add" jip=true}

Результатом выполнения этого кода будет:

<img src="/templates/images/icon.gif" width="16" height="16" alt="icon" />
<span class="mzz-icon mzz-icon-folder"><span class="mzz-overlay mzz-overlay-add"></span></span>
<span class="mzz-icon mzz-icon-folder active"><span class="mzz-overlay mzz-overlay-add"></span></span>
<span class="mzz-icon mzz-icon-folder disabled"><span class="mzz-overlay mzz-overlay-add"></span></span>
{'sprite':'mzz-icon','index':'mzz-icon-folder', 'overlay':'mzz-overlay-add'}

Этот плагин используется для генерации соответсвующего html-кода или строки для jipMenu. Пока генерит иконки 16х16.