Smarty
Кое что заимствовано с http://courses.janvarev.ru/acourses/4 а кое-что с http://www.smarty.net/
Общая информация
Smarty – язык разметки шаблонов и интерпретатор этих шаблонов.
Smarty написан на языке PHP и может быть скачан по адресу: http://www.smarty.net/
Документация по Smarty на русском доступна здесь: http://www.smarty.net/manual/ru/
Smarty – это компилирующий обработчик шаблонов для PHP. Говоря более четко, он предоставляет один из инструментов, которые позволяет добиться отделения прикладной логики и данных от представления. Это очень удобно в ситуациях, когда программист и верстальщик шаблона – различные люди.
Например, скажем, вы создаете страницу, которая показывает газетную статью.
- Название статьи, автор и сама статья – элементы, которые не содержат никакой информации о том, как они будут представлены. Их передают в Smarty из приложения.
- Затем верстальщик шаблона редактирует шаблоны и использует комбинацию тэгов HTML и тэгов шаблона, чтобы отформатировать представление этих переменных, содержащих элементы типа таблиц HTML, фоновых цветов, размеров шрифта, стилей, SVG и т.д.).
- Однажды программист захочет изменить способ хранения статьи, то есть внести изменения в логику приложения. Это изменение не вызовет изменений в шаблонах. Содержание будет все еще передаваться в шаблон таким же самым способом.
- Аналогично, если верстальщик захочет полностью перепроектировать шаблоны, это не потребует никаких изменений в прикладной логике.
- Таким образом, программист может вносить изменения в прикладную логику без необходимости изменения шаблонов, а дизайнер шаблонов может вносить изменения в шаблоны без вреда для прикладной логики.
Комментарии, вывод переменных
Пример PHP-кода, работающего со Smarty:
<?php
// создаем новый объект
$sm = new Smarty();
// присваиваем Smarty-переменной значение (строка).
$sm->assign('title', 'Заголовок');
// интерпретируем шаблон index.tpl и выводим результат
echo $sm->fetch('index.tpl');
?>
Пример шаблона index.tpl:
{* Это многострочный комментарий *} Заголовок: <b>{$title}</b>.
Варианты работы с переменными
Также доступно множество других комбинаций
Для более полного понимания нужно прочитать главу здесь: http://www.smarty.net/manual/ru/language.variables.php
Встроенные функции
Вообще функции вызываются следующим образом:
{имя_функции пар1=знач1 пар2=знач2...}
Например:
{include file='page_header.tpl'}
Встроенные функции позволяют работать с нетривиальной логикой внутри шаблона. Например, они позволяют вставлять условия и циклы.
В данном разделе перечислены только основные функции, без которых жизнь не мила :)
Функция IF: http://www.smarty.net/manual/ru/language.function.if.php
Пример:
Функция FOREACH: http://www.smarty.net/manual/ru/language.function.foreach.php (обязательно обратить внимание, как осуществить проверку на последний и первый элемент массива)
Пример:
Обработка переменных
Подробнее: http://www.smarty.net/manual/ru/language.variables.smarty.php
Модификаторы
Модификаторы – это мегаудобная штука, если надо произвести какую-то простенькую обработку переменных. В отличие от функций, которые всегда требуют на вход несколько параметров, модификатор обычно оперирует только одним – текстом. Благодаря этому модификаторы могут комбинироваться (читать про комбинирование).
Синтаксис: {переменная|модификатор).
Пример:
<?php
$smarty->assign('articleTitle', 'Two Sisters Reunite after Eighteen Years at Checkout Counter.');
?>
Шаблон:
{$articleTitle|upper} <— буквы – в верхний регистр
{$articleTitle|upper|truncate:30} <— добавляем обрезку по числу символов
Результат:
TWO SISTERS REUNITE AFTER EIGHTEEN YEARS AT CHECKOUT COUNTER.
TWO SISTERS REUNITE AFTER...
Полный список встроенных модификаторов можно найти здесь: http://www.smarty.net/manual/ru/language.modifiers.php
Наиболее полезные из них:
- default – для установки обработки «по умолчанию» пустых строк.
- escape – для экранирования символов (например, фильтрации ввода)
- nl2br
- strip
- truncate
Экранирование спецсимволов
Фигурные скобки Smarty также используются в JS и CSS. В этом случае Smarty будет выдавать ошибки, если специально не обработать такие ситуации.
Есть три основных способа борьбы с этим злом:
- обрамить конструкцию в теги {literal} (рекомендуется)
- использовать конструкции {ldelim} и {rdelim}
- переопределить разделители Smarty (не рекомендуется).
Предустановленные переменные в VQS
При каждом создании Smarty-объекта движок VQS автоматически устанавливает в нем ряд переменных:
- themeurl – адрес темы. Обычно обработка картинок производится QS автоматически, и перед картинками не надо ставить адрес темы. Но в других случаях это может быть востребовано.
- rooturl – адрес корня инсталляции VQS
- today – сегодняшний день, в формате Y-m-d
- yesterday – вчерашний день, в формате Y-m-d
- isadmin – является ли пользователь администратором
Встроенные в VQS модификаторы
В Very Quick Start доступны следующие дополнительные модификаторы (+ еще можно дописывать собственные):
- date_format_rus – позволяет отформатировать дату на русском языке
- date_format_rus_curbased – форматирует дату на русском языке относительно текущего дня (т.е. вставляет слова «Вчера», «Сегодня»)
- themeblock – вставляет блок сервиса ThemeBlock. Пример: <img src="images/{"customlogo"|themeblock}" alt="logo">
- themeelement – вставляет элемент темы. Пример: {"adminlinks"|themeelement}
- wackoformat – осуществляет форматирование вики-текста. Пример: {"menu"|themeblock|wackoformat}
Функции в VQS
Кроме того, в QS есть собственные хорошие функции.
- wackohref tag="tag" param="param" method="method" – вставляет ссылку на страницу. Пример: <a href="{wackohref method="answer" tag="`$course.id`/`$item.id`"}">Ответить на вопросы</a> (обратите внимание, как передаются в функцию переменные, зависящие от других Smarty-переменных).
- wackoformopen – открывает форму
- wackoformclose – закрывает форму
- virtualform id="id" name="name" default="def" – вставляет компонент виртуальной формы. Семантика параметров соответствует функции vfrmField.
Пример:
{wackoformopen} {virtualform id="comtext" name="textarea" default=""} <input type="submit" value="Добавить комментарий!" /> {wackoformclose}
Работа c AJAX
Часть работы с AJAX можно переложить на плечи Smarty-движка. Для этого используются следующие функции:
- ajxhref – ссылка, позволяющая делать AJAX-обработку.
- Параметры:
- params – параметры HTTP-запроса.
- elements – ID дивов, которые нужно обновить (через ;)
- text – какой текст отображать
- form – если нужно передать данные формы (можно опустить)
- statuselem – ID дива, который будет показываться, пока идет запрос (можно опустить)
- Параметры:
- ajxformopen – открывает форму, которая будет отослана через AJAX (закрывать обычным wackoformclose)
- Параметры:
- id – уникальный id формы
- thref – требуемые элементы темы в запросе, через точку с запятой
- actref – требуемые экшн-элементы в запросе, через точку с запятой
- statuselem – ID дива, который будет показываться, пока идет запрос (можно опустить)
- Параметры:
- startvirtual – стартовать виртуальный обновляемый по AJAX блок.
- finishvirtual block=block – финишировать блок.
Пример использования:
{* навороченные смайлы на Делаю.РУ *} <div id="divsmile"> {startvirtual} {foreach from=$item.smiles item=usersmileid} {if $usersmileid != $curUserId} {* чужой смайл *} <img src="images/elements/smile-norm.png" title="{$usersmileid|userid2name}" /> {else} {* свой смайл, анимированный *} <img src="images/elements/smile-anim.gif" /> {/if} {/foreach} {* ниже идет линк на плюсик *} {if $item.notsmilelink != "1"} {ajxhref text="<img src='plus.png' title='+1' />" elements="divsmile" params="msgid=`$item.DelayuMsg1`" statuselem="smile"} {/if} <span id="ajaxwaitsmile" style="display:none;"><b>Ставим :) подождите чуть-чуть!</b></span> {finishvirtual block="divsmile"} </div>
Ещё пример:
<div id="addmsg"> {startvirtual} {* отсылка формы по AJAX *} {ajxformopen id="my" actref="addmsg"} <input name="Name" type="text" value=""> <input type="submit" value="Send"> {wackoformclose} {finishvirtual block="addmsg"} </div>
Вам оказалась полезна эта статья? Если не трудно – дайте свою оценку тому, насколько предложенный здесь материал вам помог=)
Комментарии:
Гость | [2013-01-30 16:47:35] |
никак не помог, я хотел простой пример PHP файла в связке с SMARTY TPL
Илья Маркелов | [2013-01-31 04:11:30] |
Если вы предполагаете работать в vqs, то не рекомендуем опускаться до самостоятельного подключения смарти - для этого есть встроенные функции, более подробно о которых можно прочитать в разделе разработчику-как создать Extension. Там же примеры работы со смарти из PHP.
Добавить комментарий: