Разработчику/Smarty

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.




Добавить комментарий:
Представьтесь:


 
Подразделы
Раздел не содержит подстраниц.


Комменты