- 1. Общие сведения
- 2. Плагин {load}
- 3. Плагин {add}
- 4. Плагин {url}
- 5. Плагин {title}
- 6. Плагин {meta}
- 7. Плагин {icon}
Шаблоны можно считать 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
Функция {load} предназначена для запуска модулей из шаблонов. Этот метод является реализацией некоей "стратегии вытягивания", в которой шаблоны (по сути клиентский код) сами определяют, какие данные нужно получить и отобразить пользователю. За счёт этого достигается удобство и гибкость приложений, использующих данный принцип.
Синтаксис функции:
{load module="" action="" section="" <имя>="значение" ...}
Описание основных аргументов:
- 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, если прав нет. Смотрите также раздел о взаимодействие системы проверки прав и шаблонов.
Функция {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}
Для вставки адреса (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.
Плагин позволяет собрать заголовок для окна браузера из разных мест.
Примеры использования для добавления части заголовка:
{title append="Новости" separator=" - "} {title append="2009"} {title append="Список"}
Примеры вывода заголовка:
{title separator=" | "} {title separator=" | " end=" - "} {title separator=" | " start=" - "}
Соответствует следующий результатам:
Новости - 2009 | Список Новости - 2009 | Список - - Новости - 2009 | Список
Значения аргументов end или start присоединяются к результату только при выводе заголовка и если он не пустой (основное применение этих аргументов: разделитель для названия сайта и цепочки заголовков).
Плагин для установки meta информации (ключевых слов и описания страницы в <meta> тегах).
Примеры использования:
{keywords show="description" default="информационный сайт"} {keywords keywords="новости, просмотр, в мире"} {keywords description="просмотр новостей в мире"} {keywords show="keywords"} {keywords show="description" default="информационный сайт"}
Результатом выполнения этого кода будет:
информационный сайт новости, просмотр, в мире просмотр новостей в мире
Эти плагины можно использовать для указания content атрибута для соответствующих meta-тегов.
Плагин для генерации "системных" иконок.
Синтаксис функции:
{icon sprite="описание sprite'а" [jip=true] [active=true|disabled=true]}
Описание аргументов:
- sprite - строка спрайта или путь до картинки;
- jip - указывает на генерацию строки для jipMenu;
- active - указывает на активную иконку (имеет приоритет над disabled);
- disabled - указывает на неактивную иконку.
Формат строки спрайта:
sprite:name/index[/overlay]
- sprite - название базового css-класса с картой иконок;
- index - название css-класса самой иконки;
- overlay - название css-класса bullet'a для иконки
Примеры использования:
{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.