Функции и команды шаблонизатора smarty

Разработка под LiveStreet CMS
Судя по некоторым комментариям, часть верстальщиков никак не может освоить английский сайт смарти и выучить базовый синтаксис команд шаблонизатора smarty, поэтому я решил собрать основные в виде небольшой шпаргалки в одном месте.


Общая информация


Все тэги шаблонов Smarty располагаются между специальными разделителями. По умолчанию это { и }.

Комментарии


Комментарии в шаблонах заключаются в звездочки *, окруженные разделителями:

{* это комментарий, который видно только в шаблоне, но не в html странице *}


Smarty не покажет такие комментарии в выводе шаблона, в отличие от хтмл комментариев:

<!-- HTML -->


Переменные


Переменные шаблона начинаются со знака $. Они могут состоять из цифр, букв, знаков подчёркивания — как и обычные переменные в PHP. Можно обращаться к массивам по числовым и не числовым индексам, к свойствам и методам объектов. Переменные конфигурационного файла — это исключения из долларового синтаксиса — к ним можно обращаться, окружив их #решетками# или воспользовавшись специальной переменной $smarty.config:

{$foo}        <-- отображение простой переменной (не массив и не объект)
{$foo[4]}     <-- отображает 5-й элемент числового массива (нумерация с нуля)
{$foo.bar}    <-- отображает значение ключа "bar" ассоциативного массива, подобно PHP $foo['bar']
{$foo.$bar}   <-- отображает значение переменного ключа массива, подобно PHP $foo[$bar]
{$foo->bar}   <-- отображает свойство "bar" объекта
{$foo->bar()} <-- отображает возвращаемое значение метода "bar" объекта
{#foo#}       <-- отображает переменную "foo" конфигурационного файла
{$smarty.config.foo} <-- синоним для {#foo#}
{assign var=foo value='baa'}{$foo} <--  отображает "baa"


Также доступно множество других комбинаций

{$foo.bar.baz}
{$foo.$bar.$baz}
{$foo[4].baz}
{$foo[4].$baz}
{$foo.bar.baz[4]}
{$foo->bar($baz,2,$bar)} <-- передача параметра
{"foo"}       <-- статические значения также разрешены

{* отображает серверную переменную "SERVER_NAME" ($_SERVER['SERVER_NAME']) *}
{$smarty.server.SERVER_NAME}

Переменные, назначенные из PHP


К переменным, которые были назначены из PHP можно обратиться, указав перед их именем знак доллара $. Переменные, назначенные внутри шаблона при помощи функции {assign} работают таким же образом.

{$iNumFromPHP}


Переменные запроса


К переменным запроса, таким как $_GET, $_POST, $_COOKIE, $_SERVER, $_ENV и $_SESSION, можно получить доступ так:

{* отображение параметра page из URL ($_GET) http://example.com/index.php?page=foo *}
{$smarty.get.page}

{* отображение параметра "page" из формы ($_POST['page']) *}
{$smarty.post.page}

{* отображение значения cookie "username" ($_COOKIE['username']) *}
{$smarty.cookies.username}

{* отображение серверной переменной "SERVER_NAME" ($_SERVER['SERVER_NAME'])*}
{$smarty.server.SERVER_NAME}

{* отображение переменной системного окружения "PATH" *}
{$smarty.env.PATH}

{* отображение переменной сессии PHP "id" ($_SESSION['id']) *}
{$smarty.session.id}

{* отображение переменной "username" из смешенных get/post/cookies/server/env *}
{$smarty.request.username}

Текущая временная метка


Содержится в переменной

{$smarty.now}


Это значение отражает количество секунд, которые прошли с момента наступления так называемой Эпохи Юникс (1 января 1970 года). Её можно прямо передавать модификатору date_format для отображения текущей даты/времени. Обратите внимание, что time() вызывается при каджом обращении; к примеру, скрипт, работающий три секунды и вызывающий $smarty.now в начале и в конце работы, покажет разницу в три секунды.

{* использование модификатора date_format для отображения текущей даты/времени*}
{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}


Обрезать длину переменной


Модификатор

truncate


Обрезает переменную до определенной длинны, по умолчанию — 80 символов. В качестве необязательного второго параметра, можно передать строку текста, которая будет отображаться в конце обрезанной переменной. Символы этой строки не включаются в общую длину обрезаемой строки. По умолчанию, truncate попытается обрезать строку в промежутке между словами. Если вы хотите обрезать строку строго на указанной длине, передайте в третий необязательный параметр значение true.

Позиция параметраТипОбязателенПо умолчаниюОписание
1integerНет80Определяет максимальную длинну обрезаемой строки.
2stringНет...Текстовая строка, которая заменяет обрезанный текст. Её длинна не включена в максимальную длинну обрезаемой строки.
3booleanНетfalseОпределяет, обрезать ли строку в промежутке между словами (false) или строго на указаной длинне (true).
4booleanНетfalseОпределяет, нужно ли обрезать строку в конце (false) или в середине строки (true). Обратите внимание, что при включении этой опции, промежутки между словами игнорируются.

Пример:


<?php
$smarty -> assign ('articleTitle', 'Two Sisters Reunite after Eighteen Years at Checkout Counter.');
?>

В шаблоне:


{$articleTitle}
{$articleTitle|truncate}
{$articleTitle|truncate:30}
{$articleTitle|truncate:30:""}
{$articleTitle|truncate:30:"---"}
{$articleTitle|truncate:30:"":true}
{$articleTitle|truncate:30:"...":true}
{$articleTitle|truncate:30:'..':true:true}

Результат обработки:

Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after...
Two Sisters Reunite after
Two Sisters Reunite after---
Two Sisters Reunite after Eigh
Two Sisters Reunite after E...
Two Sisters Re..ckout Counter.

Как видим — ничего сложного, почти все нужные базовые команды умещаются в небольшой заметке.
0 комментариев
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.