Smarty

Материал из Википедии — свободной энциклопедии

Перейти к: навигация, поиск
Smarty

Тип Компилирующий обработчик шаблонов
Разработчик New Digital Group, Inc.
ОС Кроссплатформенное программное обеспечение
Версия 2.6.26 — 18 июня 2009 г.
Тестовая версия 3.0 Alpha — 17 октября 2008 г.
Лицензия GNU LGPL
Сайт www.smarty.net

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

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

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

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

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

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

[править] Пример кода

HTML-страница с тегами Smarty

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
   <title>{$title_text}</title>
   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>
 
<body> {* Комментарий, которого не будет в HTML коде *}
 
<p>{$body_text}</p>
 
</body><!-- Комментарий, который будет в HTML коде -->
</html>

Логика работы в PHP-скрипте ниже:

define('SMARTY_DIR', 'smarty-2.6.22/' );
require_once(SMARTY_DIR . 'Smarty.class.php');
 
$smarty = new Smarty();
$smarty->template_dir = './templates/';
$smarty->compile_dir = './templates/compile/';
$smarty->cache_dir = './templates/cache/';
$smarty->caching = false;
$smarty->error_reporting = E_ALL; // LEAVE E_ALL DURING DEVELOPMENT
$smarty->debugging = true;
 
$smarty->assign('title_text', 'TITLE: Пример использования Smarty ...');
$smarty->assign('body_text', 'BODY: Это текст, выведенный ф-цией assign()');
 
$smarty->display('index.tpl');

[править] Ссылки

Источник — «http://ru.wikipedia.org/wiki/Smarty»