Ссылки

Что такое Smarty?

Smarty - это компилирующий обработчик шаблонов для PHP. Говоря более четко, он предоставляет один из инструментов, которые позволяет добиться отделения прикладной логики и данных от представления. Это очень удобно в ситуациях, когда программист и верстальщик шаблона - различные люди.

Например, скажем, вы создаете страницу, которая показывает газетную статью.

  • Название статьи, автор и сама статья - элементы, которые не содержат никакой информации о том, как они будут представлены. Их передают в Smarty из приложения.
  • Затем верстальщик шаблона редактирует шаблоны и использует комбинацию тэгов HTML и тэгов шаблона, чтобы отформатировать представление этих переменных, содержащих элементы типа таблиц HTML, фоновых цветов, размеров шрифта, стилей, SVG и т.д.).
  • Однажды программист захочет изменить способ хранения статьи, то есть внести изменения в логику приложения. Это изменение не вызовет изменений в шаблонах. Содержание будет все еще передаваться в шаблон таким же самым способом.
  • Аналогично, если верстальщик захочет полностью перепроектировать шаблоны, это не потребует никаких изменений в прикладной логике.
  • Таким образом, программист может вносить изменения в прикладную логику без необходимости изменения шаблонов, а дизайнер шаблонов может вносить изменения в шаблоны без вреда для прикладной логики.

Одно из предназначений Smarty - это отделение логики приложения от представления.

  • Конечно же, шаблоны могут содержать в себе логику, но лишь при условии, что эта логика необходима для правильного представления данных. Такие задачи, как подключение других шаблонов, чередующаяся окраска строчек в таблице, приведение букв к верхнему регистру, циклический проход по массиву для его отображения и т.д. - всё это примеры логики представления.
  • Тем не менее, не следует полагать, что Smarty заставляет вас разделять прикладную логику и логику представления. Smarty не видит разницы между этими вещами, так что переносить прикладную логику в шаблоны вы можете на свой страх и риск.
  • Если же вы считаете, что в шаблоне вообще не должно быть логики, вы можете ограничиться использованием чистого текста и переменных.

Одна из уникальных возможностей Smarty - компилирование шаблонов. Это означает, что Smarty читает файлы шаблонов и создает PHP-код на их основе. Код создаётся один раз и потом только выполняется. Поэтому нет необходимости в медленной обработке файл шаблона для каждого запроса. Каждый шаблон может пользоваться всеми преимуществами таких компиляторов PHP и кэшируюших решений, как eAccelerator, ionCube, mmCache, Zend Accelerator и прочих.

Некоторые особенности Smarty:

  • Он достаточно быстр.
  • Он эффективен, так как обработчик PHP делает за него грязную работу.
  • Никакой лишней обработки шаблонов, они компилируются только один раз.
  • Перекомпилируются только те шаблоны, которые изменились.
  • Вы можете легко создавать собственные пользовательские функции и модификаторы переменных, что делает язык шаблонов чрезвычайно расширяемым.
  • Настраиваемые {разделители} тэгов шаблона, то есть вы можете использовать {$foo}, <!–{$foo}–> и т.д.
  • Конструкции {if}..{elseif}..{else}..{/if} передаются обработчику PHP, так что синтаксис выражения {if…} может быть настолько простым или сложным, насколько вам угодно.
  • Допустимо неограниченное вложение секций, условий и т.д.
  • Существует возможность включения PHP-кода прямо в ваш шаблон, однако обычно в этом нет необходимости (и это не рекоммендуется), так как движок весьма гибок и расширяем.
  • Встроенный механизм кэширования.
  • Произвольные источники шаблонов.
  • Пользовательские функции кэширования.
  • Компонентная архитектура.

Пример использования Smarty

Допустим, нам необходимо вывести из Базы Данных десять новостей. Создаем два файла:

<?php     
 
// подключаем класс Smarty
require_once('smarty/Smarty.class.php');     
 
// Создаем объект класса
$smarty = new Smarty();     
 
// Устанавливаем папки шаблонов
// 'templates' – каталог, в котором хранятся шаблоны
// 'templates_c' - туда Smarty сохраняет скомпилированные шаблоны     
 
$smarty->template_dir = 'templates';
$smarty->compile_dir  = 'templates_c';      
 
// Получение данных их БД (в виде ассоциативного массива)
$news = $DB->query("SELECT * FROM news ORDER BY id LIMIT 0,10");     
 
// передаем массив в шаблонизатор
$smarty->assign('news', $news);     
 
/* Допустим что наша задача была в простом выводе данных в шаблон, что мы уже и сделали,
и это конечный этап – вызываем метод display() класса smarty, который выводит,
передаёт данные в шаблон, перекомпилирует (если были изменения) и выводит контент.
Методу передается имя файла шаблона, в котором как предполагается был обработан
нужным образом массив news */     
 
$smarty->display('news.tpl');
?>

Теперь рассмотрим непосредственно файл шаблона news.tpl. Фактически это обычный html, со вставками переменных и конструкций циклов. Все переменные заключены в фигурные скобки.

<html>     
 
{foreach from=$news item=item}
Заголовок: {$item.title}     
 
Текст новости:
{item.description}     
 
<a href="index.php?id={$item.id}" mce_href="index.php?id={$item.id}">Подробнее...</a>
{/foreach}     
 
</html>

Вот собственно и все. Это рабочий пример, который будет выводить 10 извлечённых нами новостей из базы данных. Может показаться, что в данном примере можно было бы обойтись обычным php с html-вставками. Но в большом проекте шаблонизатор заметно сокращает время, потраченое на изготовление шаблона.

Если вдруг появится необходимость использовать php код прямо в шаблоне, то помещаем в шаблоне блок {php}{/php} – между тегами php код, без параметров .

Ещё существует проблема, когда в коде шаблона вставлены блоки java script, некоторые его операторы, в частности if, компилятор smarty будет рассматривать как операторы smarty. Поэтому JS код лучше выносить в отдельные файлы, либо вокруг кода ставить оператор {literal}{/literal}, внутри этого оператора компилятор не будет искать другие операторы smarty.

Подробный учебник online по Smarty можно прочесть здесь


Автор: Виталий Колесник, источник - здесь

Записала feba7


Ссылки
 
справочник/smarty_-_компилирующий_обработчик_шаблонов.txt · Последние изменения: 2009/11/14 16:26 От feba7