Общие сведения
Обращение к шаблонизатору в ReadyScript происходит через класс RS::View::Engine, который является прямым наследником класса известного шаблонизатора Smarty 3. В конструкторе RS::View::Engine происходит установка стандартных директорий для поиска шаблонов, скомпилированных файлов, а также происходит передача часто используемых переменных в шаблон.
- Setup - ассоциативный массив значений статических свойств из класса
- app - объект параметров страницы RS::Application::Application
- router - объект менеджера маршрутов RS::Router::Manager
- CONFIG - объект настроек текущего сайта Site::Model::Orm::Config
- CMS_CONFIG - объект настроек системы RS::Config::Cms
- SITE - объект текущего сайта Site::Model::Orm::Site
- THEME_CSS - строка, путь к папке с CSS файлами текущей темы
- THEME_JS - строка, путь к папке с JS файлами текущей темы
- THEME_IMG - строка, путь к папке с изображениями текущей темы
- THEME_SHADE - строка, идентификатор цветовой схемы текущей темы оформления
Помимо этого, функционал шаблонизатора расширяется с помощью плагинов ReadyScript. Персональные плагины ReadyScript располагаются в папке /core/smarty/rsplugins. Рассмотрим эти плагины подробнее.
Ресурсы
RS
Ресурс отвечает за загрузку шаблона из хранилища. В ReadyScript добавлен собственный ресурс, который установлен как ресурс по-умолчанию. Ресурс RS расширяет допустимый синтаксис пути к шаблону:
В пути к шаблону можно использовать следующие включения:
- %THEME% - будет заменен на путь к папке текущего шаблона. Например: %THEME%/layout.tpl, будет ссылаться на /templates/default/layput.tpl, если текущий шаблон - default.
- %ИМЯ_МОДУЛЯ% или module:ИМЯ_МОДУЛЯ - будет заменен на путь к папке шаблонов соответствующего модуля. Например: %catalog%/product.tpl или module:catalog/product.tpl, будет ссылаться на /modules/catalog/view/product.tpl
- %SYSTEM% - будет ссылаться на папку с системными шаблонами. Например: system%/admin/body.tpl, будет ссылаться на /templates/system/admin/body.tpl
- theme:ИМЯ_ТЕМЫ_ОФОРМЛЕНИЯ - будет ссылаться на папку заданной темы оформления. Например: theme:default/layout.tpl, будет ссылаться всегда на /templates/default/layput.tpl
{extends file="%THEME%/body.tpl"} {* Подключит файл /templates/ТЕКУЩАЯ ТЕМА/body.tpl *}
{block name="content"}
{include file="theme:default/content.tpl"} {* подключит шаблон /templates/default/content.tpl *}
{/block}
Блоки
{t}...{/t}
Отображает фразу, находящуюся внутри блока на текущем языке системы. Вызывает системную функцию t() для перевода.
Зарезервированные параметры:
- alias - необязательный, идентификатор фразы. Используется, если внутри блока объемный текст Остальные параметры используются для подстановки в фразу.
Пример:
{t}Фраза на русском языке{/t}
{t key="35"}Успешно выполнено %key операций{/t}
{t key="35" time="5"}Успешно выполнено %key операций за %time{/t}
{t alias="bigtext"}Очень объемный текст с множеством переносов строк и.т.д.{/t}
{t years="1"}Артему %years [plural:%years:год|года|лет]{/t}
{t years="2"}Артему %years [plural:%years:год|года|лет]{/t}
{t years="5"}Артему %years [plural:%years:год|года|лет]{/t}
{t}открыть^my_module_context{/t}
{hook}...{/hook}
Объявляет обернутую зону хуком. Позволяет сторонним модулям добавлять собственный HTML до, после или вместо обернутого HTML-кода. Подробнее об использовании хуков написано здесь.
Параметр | Тип | Назначение | Обязательный | Значение по-умолчанию |
name | string | идентификатор хука | Да | |
title | string | описание хука | Нет | |
Пример:
<div class="product">
{hook name="catalog-product:images" title="Карточка товара:изображения"}
<div class="images">
....
</div>
{/hook}
{hook name="catalog-product:rating" title="Карточка товара:рейтинг"}
<div class="rating">
...
</div>
{/hook}
</div
Функции
addcss
Подключает CSS файл добавлением тега <link type="text/css" href=""> секцию <HEAD>. Вызывает метод RS::Application::Application::addCss.
Параметр | Тип | Назначение | Обязательный | Значение по-умолчанию |
file | string | имя файла | Да | |
name | string | символьный идентификатор файла | Нет | равно имени файла |
basepath | string | базовый путь для поиска файла. Возможные значения
-
theme - для поиска в папке /templates/ИМЯ_ТЕМЫ_ОФОРМЛЕНИЯ/resource/css
-
common - для поиска в папке /resource/css
-
root - не дописывает ничего перед именем файла, переданным в параметре file.
| Нет | theme |
no_compress | bool | если true, то недопускает объединение и сжатие данного файла | Нет | false |
type | string | подставляется в атрибут type тега link | Нет | text/css |
media | string | подставляется в атрибут media тега link | Нет | all |
rel | string | подставляется в атрибут rel тега link | Нет | stylesheet |
before | string | произвольный текст, подставляется до тега link. Обычно используется для CSS-хаков. | Нет | |
after | string | произвольный текст, подставляется после тега link. Обычно используется для CSS-хаков. | Нет | |
Пример:
{* Добавит в секцию <HEAD> тег <link type="text/css" href="/templates/ИМЯ_ТЕКУЩЕЙ_ТЕМЫ/resource/css/style.css" media="all" rel="stylesheet"> *}
{addcss file="style.css"}
{* Добавит в секцию <HEAD> тег <link type="application/rss+xml" href="/rss-news/" media="all" rel="alternate"> *}
{addcss file="/rss-news/" basepath="root" rel="alternate" type="application/rss+xml"}
{* Добавит в секцию <HEAD> конструкцию *}
{addcss file="960gs/960_orig.css" before="<!--[if lte IE 8]>" after="<![endif]-->"}
{* Если в значении параметров type, media передать false, то атрибут будет исключен из HTML <link href="/modules/users/view/css/verification.css" rel="stylesheet"> *}
{addcss file="%users%/verification.css" type=false media=false}
addjs
Подключает JS файл добавлением тега <script src=""> секцию <HEAD> Вызывает метод RS::Application::Application::addJs.
Параметр | Тип | Назначение | Обязательный | Значение по-умолчанию |
file | string | имя файла | Да | |
name | string | символьный идентификатор файла | Нет | равно имени файла |
basepath | string | базовый путь для поиска файла. Возможные значения
-
theme - для поиска в папке /templates/ИМЯ_ТЕМЫ_ОФОРМЛЕНИЯ/resource/css
-
common - для поиска в папке /resource/css
-
root - не дописывает ничего перед именем файла, переданным в параметре file.
| Нет | theme |
no_compress | bool | если true, то недопускает объединение и сжатие данного файла | Нет | false |
type | string | подставляется в атрибут type тега link | Нет | text/javascript |
before | string | произвольный текст, подставляется до тега link. | Нет | null |
after | string | произвольный текст, подставляется после тега link. | Нет | null |
unshift | bool | устанавливает файл первым в списке | Нет | null |
header | bool | принудительно задает зону размещения скриптов в секции head | нет | null |
footer | bool | принудительно задает зону размещения скриптов перед закрывающим тегом body | нет | null |
Пример:
{* Добавит в зону по-умолчанию тег <script src="/templates/ИМЯ_ТЕКУЩЕЙ_ТЕМЫ/resource/js/html5shiv.js"></script> *}
{addjs file="html5shiv.js"}
{* Установит в секцию HEAD тег <script src="/resource/js/jquery.min.js"></script> первым в списке *}
{addjs file="jquery.min.js" name="jquery" basepath="common" unshift=true header=true}
{* Добавит в конце тела документа тег <script src="/resource/js/jquery.deftext.js"></script> *}
{addjs file="jquery.deftext.js" basepath="common" footer=true}
addmeta
Добавляет META-тег в секцию <HEAD>. Вызывает метод RS::Application::Meta::add.
Параметр | Тип | Назначение | Обязательный | Значение по-умолчанию |
key | string | внутренний идентификатор meta тега | Нет | null |
Добавляет все остальные атрибуты к тегу <meta> соответственно.
Пример:
{* Добавит в секцию HEAD тег <meta name="viewport" content="width=device-width, initial-scale=1.0" > *}
{addmeta name="viewport" content="width=device-width, initial-scale=1.0"}
adminurl
Вставляет в шаблон путь к требуемому разделу административной части. Обычно используется в шаблонах административного раздела. Вызывает метод RS::Router::Manager::getAdminUrl.
Параметр | Тип | Назначение | Обязательный | Значение по-умолчанию |
do | string или false | Действие контроллера. Если не задан, то параметр подставляется из текущего URL | Нет | |
mod_controller | string | Сокращенное имя контроллера. Если не задан, то параметр подставляется из текущего URL | Нет | |
Все остальные атрибуты добавляются в виде параметров к URL.
Пример:
{* Вернет URL: /admin/article-ctrl/ *}
{adminUrl do=false mod_controller="article-ctrl"}
{* Вернет URL: /admin/article-ctrl/add/ *}
{adminUrl do="add" mod_controller="article-ctrl"}
{* Если текущий URI:/admin/article-ctrl/, вернет URL: /admin/article-ctrl/edit/?id=123 *}
{adminUrl do="edit" id=123}
{* Если текущий URI:/admin/article-ctrl/, вернет URL: /admin/article-ctrl/?param1=value1 *}
{adminUrl param1="value1"}
{* Если текущий путь /admin/article-ctrl/edit/?id=35, вернет URL: /admin/article-ctrl/edit/ *}
{adminUrl}
csrf
Вставляет в шаблон <input type="hidden" name="csrf_protection" > код защиты от CSRF атак. В контроллере должна быть предусмотрена проверка данного кода методом RS::Http::Request::checkCsrf
Параметр | Тип | Назначение | Обязательный | Значение по-умолчанию |
form | string | Имя формы | Нет | |
Пример:
<form method="POST">
{csrf}
<input type="text" name="title">
<input type="submit" value="Отправить">
</form>
moduleinsert
Вставляет блок-контролер в шаблон.
Параметр | Тип | Назначение | Обязательный | Значение по-умолчанию |
name | string | Имя класса блок-контроллера | Да | |
var | string | Переменная шаблона, в которую будут записаны переменные блока | Нет | |
Остальные атрибуты поступают в качестве параметров блок-контроллеру соответственно.
Пример:
{* Вставляет в шаблон блок Меню, в котором будут отображаться дочерние элементы от элемента с символьным идентификатором footmenu*}
{moduleinsert name="\Menu\Controller\Block\Menu" root="footmenu"}
{* Вставляет в шаблон блок Список категорий *}
{moduleinsert name="\Catalog\Controller\Block\Category"}
{* Вставляет в шаблон баннерную зону left, с нестандартным шаблоном *}
{moduleinsert name="\Banners\Controller\Block\BannerZone" zone="left" indexTemplate="blocks/bannerzone/left.tpl"}
{* Пулучаем в переменную HTML блока и отображаем его по условию *}
{$content={moduleinsert name="\Catalog\Controller\Block\Category" var="block_vars"}}
{if $block_vars.dirlist}
{$content} {* Показываем блок со списком категорий, только если такие категории есть *}
{/if}
modulegetvars
Запускает блок-контроллер, и возвращает все переменные, которые должны были пойти в шаблон блок-контроллера.
Параметр | Тип | Назначение | Обязательный | Значение по-умолчанию |
name | string | Класс блок-контроллера | Да | |
var | string | Переменная шаблона, в которую будут записаны переменные блока | Да | |
Остальные атрибуты поступают в качестве параметров блок-контроллеру соответственно.
Пример:
{modulegetvars name="\Article\Controller\Block\Article" article_id=9 var="article"}
{$article.article.short_content}
split_list
Плагин разбивает массив на подмассивы. Обычно используется в местах, где необходимо использовать табличную верстку, а большой список данных необходимо отобразить в нескольких колонках таблицы.
Параметр | Тип | Назначение | Обязательный | Значение по-умолчанию |
item | array | Исходный массив объектов | Да | |
var | string | Переменная шаблона, в которую будет записаны переменные блока | Да | |
incols | string | Количество колонок, если указано одно число. Количество элементов, от которого будет появляться колонка через запятую | Нет | 0,11,21. Если элементов будет менее 11, то будет 1 колонка. Если элементов будет от 11 до 21, то будет 2 колонки. Если элементов будет более 21, то будет 3 колонки |
horizontal | bool | Принцип распределения элементов по колонкам. Если присутствует, то горизонтально, иначе - вертикально | Нет | null |
Пример:
{assign var=source_array value=['one', 'two', 'three', 'four', 'five', 'six', 'seven']}
{split_list item=$source_array var=result incols="2"}
{print_r($result)}
{*
Результат: 4 строки, 2 колонки:
Array (
[0] => Array (
[0] => one
[1] => five )
[1] => Array (
[0] => two
[1] => six )
[2] => Array (
[0] => three
[1] => seven )
[3] => Array (
[0] => four
[1] => )
)
*}
{* Используется в таблице следующим образом *}
<table border="1">
{foreach from=$result item=row}
<tr>
{foreach from=$row item=col}
<td>{$col} </td>
{/foreach}
</tr>
{/foreach}
</table>
{* Горизонтальное расположение элементов *}
{split_list item=$source_array var=result incols="2" horizontal=true}
{print_r($result)}
{*
Результат: 4 строки, 2 колонки:
Array (
[1] => Array (
[0] => one
[1] => two )
[2] => Array (
[0] => three
[1] => four )
[3] => Array (
[0] => five
[1] => six )
[4] => Array (
[0] => seven
[1] => )
)
*}
{assign var=source_array value=['one', 'two', 'three', 'four', 'five', 'six', 'seven']}
{* от 0 до 4 элементов - 1 колонка
от 4 до 7 элементов - 2 колонки
от 7 и выше - 3 колонки
так как у нас - 7 элементов, то формируется 3 колонки
*}
{split_list item=$source_array var=result incols="0,4,7"}
{print_r($result)}
{*
Результат: 3 строки, 3 колонки:
Array (
[0] => Array (
[0] => one
[1] => four
[2] => seven )
[1] => Array (
[0] => two
[1] => five
[2] => )
[2] => Array (
[0] => three
[1] => six
[2] => )
)
*}
static_call
Выполняет любую функцию в системе.
Параметр | Тип | Назначение | Обязательный | Значение по-умолчанию |
callback | callback | Функция, которую необходимо вызвать | Да | |
var | string | Переменная шаблона, в которую будет записан разультат выполнения функции | Да | |
params | array | Параметры, которые необходимо передать в качестве аргументов в функцию | Нет | |
Пример:
{static_call var=result callback=date params=['Y-m-d']}
{$result} {* 2014-01-05 *}
{static_call var=result callback=['\Catalog\Model\DirApi', 'staticSelectList']}
{$result} {* Array *}
urlmake
Возвращает URL, составленный с учетом изменений текущего. Для построения нового URL используется текущий маршрут, поэтому переменная будет подставлена с учетом маски маршрута. Вызывает метод RS::Http::Request::replaceKey.
Параметр | Тип | Назначение | Обязательный | Значение по-умолчанию |
__searchkey | string | Переменные, которые должны остаться в итоговом URL. Указываются через запятую | Нет | |
__prefix | string | Префикс, который будет приписан ко всем новым именам переменных слева | Нет | |
Остальные параметры используются для добавления/изменения их в URL.
Пример:
{* Если маска текущего маршрута: /catalog/{category_id}/
И текущий URL: /catalog/notebooks/,
то итоговый URL будет: /catalog/smartphones/?filter[key1]=value1&filter[key2]=value2
*}
{urlmake category_id="smartphones" filter=['key1' => 'value1', 'key2' => 'value2']}
{* Если маска текущего маршрута: /catalog/{category_id}/
И текущий URL: /catalog/smartphones/?filter[key1]=value1&filter[key2]=value2,
то итоговый URL будет: /catalog/new/
Атрибут, который равен false, означает что необходимо убрать данный параметр из URL
*}
{urlmake category_id="new" filter=false}
{* Если маска текущего маршрута: /catalog/{category_id}/
И текущий URL: /catalog/smartphones/?filter[key1]=value1&filter[key2]=value2,
то итоговый URL будет: /catalog/smartphones/?filter[key1]=value1&filter[key2]=value2&foo=bar
*}
{urlmake foo=bar}
{* Если маска текущего маршрута: /catalog/{category_id}/
И текущий URL: /catalog/smartphones/?key1=value1&key2=value2&key3=value3
то итоговый URL будет: /catalog/smartphones/?key1=value1
*}
{urlmake __searchkey="category_id,key1"}
{* Вернет текущий URL без изменений *}
{urlmake}
verb
Вставляет правильную форму множественного числа существительного в зависимости от рядом стоящего числа.
Параметр | Тип | Назначение | Обязательный | Значение по-умолчанию |
item | integer | Число | Да | |
values | string | 3 формы слова, через запятую, которые должны использоваться в количестве 1,2,5. Например:год,года,лет. | Да | |
onlyword | bool | Возвращать только слово. Если не задано, то перед словом будет располагаться цифра | Нет | null |
Пример:
{* Результат: 1 сообщение *}
{verb item=1 values="сообщение,сообщения,сообщений"}
{* Результат: 2 сообщения *}
{verb item=2 values="сообщение,сообщения,сообщений"}
{* Результат: 5 сообщений *}
{verb item=5 values="сообщение,сообщения,сообщений"}
Модификаторы
devnull
Всегда возвращает null. Удобно использовать для подавления результата выполнения функций.
Пример:
{* Произойдет вызов функции, однако никакого результата выведено не будет *}
{$product->fillProperty()|devnull}
substr
Возвращает часть строки. Вызывает функцию mb_substr.
Параметры:
Параметр | Тип | Назначение | Обязательный | Значение по-умолчанию |
1 | integer | Начальная позиция в строке | Да | |
2 | integer | Длина | Да | |
Пример:
{assign var=str value="Съешь еще этих мягких французских булок"}
{$str|substr:6:9}
teaser
Обрезает текст до нужного количества символов. Текст обрезается по словам.
Параметры:
Параметр | Тип | Назначение | Обязательный | Значение по-умолчанию |
1 | integer | Длина | Да | |
2 | bool | Если false, то HTML теги будут вырезаны, иначе - нет | Нет | false |
Пример:
{* Результат: Съешь еще... *}
{assign var=str value="Съешь еще этих мягких французских булок"}
{$str|teaser:10}