Smarty

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Smarty
Smarty-logo-orange.gif
Тип

Компилирующий обработчик шаблонов

Разработчик

New Digital Group, Inc.

Операционная система

Кроссплатформенное программное обеспечение

Последняя версия

3.1.16 (17 декабря 2013 г.)

Лицензия

GNU LGPL

Сайт

smarty.net

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

Язык шаблонов Smarty расширяет HTML smarty-тегами, встраиваемыми в документ. Эти теги могут представлять собой PHP-переменные (возможно, снабжённые модификаторами, напр. {$variable|nl2br}), функции или базовые конструкции структурного программирования, такие как {if …}{else}{/if}.

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

Smarty — первая шаблонная библиотека, использующая механизм кэширования байт-кода.

Возможности[править | править исходный текст]

Smarty позволяет:

  • Создавать пользовательские функции и модификаторы.
  • Использовать настраиваемые разделители тегов шаблона: {}, , и т. д.
  • Возможность включения PHP-кода прямо в шаблон.
  • Пользовательские функции кэширования.
  • Использование компонентной архитектуры.

Для упрощения создания масштабируемых веб-приложений в Smarty встроен механизм кэширования.

Механизм действия[править | править исходный текст]

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

Компиляция шаблонов позволяет достичь производительности, сравнимой с производительностью PHP-шаблонов, написанных вручную[1]. Конструкции if/elseif/else/endif передаются обработчику PHP, так что синтаксис выражения {if …} может быть настолько простым или сложным, насколько это требуется. Возможно неограниченное вложение секций, условий и т. д.

Пример кода[править | править исходный текст]

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');

Критика[править | править исходный текст]

Smarty (и основанные на подобном подходе библиотеки) обычно критикуют с двух направлений. Сторонники использования в качестве языка шаблонов подмножества PHP считают, что поскольку «он, в основном, предоставляет интерфейс к PHP с использованием нового синтаксиса» и поэтому не дает особых преимуществ.[2] Сторонники же XSLT находят, что Smarty оставляет слишком широкий простор для смешения логики и представления, что значительно затрудняет редактирование smarty-шаблонов сторонними разработчиками и их повторное использование.[3].

Аналоги[править | править исходный текст]

Начиная с 2008 года доступен последователь синтаксиса Smarty, шаблонизатор Quicky (Документация) основной отличительной особенностью которого является иной подход к реализации разбора шаблонов (который по заверениям автора существенно быстрее работает) и расширение уже привычного многим синтаксиса: поддержка хелперов (функций, объявленных прямо в шаблоне), наличие «магических» констант циклов, упрощенный синтаксис присвоения значений переменных без использования {math}, компилируемые управляющие конструкции.

Интересным развитием идей Smarty является библиотека Twig, которую развивает и поддерживает Fabien Potencier, ведущий разработчик и идеолог Symfony (см. также его статью-сравнительный обзор PHP-шаблонизаторов: часть 1/перевод, часть 2/перевод).

Smarty-подобный синтаксис имеют также такие обработчики шаблонов, как Dwoo или обработчик, встроенный в eZ Publish / ezComponents (англ.).

До 2007 года также развивался «облегчённый» форк Smarty — Template Lite (в первых версиях Smarty Light).

В 2013 году вышел первый релиз шаблонизатора Fenom, поддерживающий Smarty-подобный синтаксис. Отличительной чертой шаблонизатора является разбор шаблонов, который происходит без использования регулярных выражений, а базируется на встроенном токенайзере[4], что делает разбор шаблонов быстрым.

Ссылки[править | править исходный текст]

Примечания[править | править исходный текст]