Smarty
Smarty | |
---|---|
![]() | |
Тип | Компилирующий обработчик шаблонов |
Разработчики | New Digital Group, Inc. |
Написана на | PHP[3] |
Операционная система | Кроссплатформенное программное обеспечение |
Первый выпуск | 2001[1] и 2002 |
Последняя версия | |
Репозиторий | github.com/smarty-php/sm… |
Лицензия | 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-шаблонов, написанных вручную[4]. Конструкции 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 с использованием нового синтаксиса» и поэтому не дает особых преимуществ.[5] Сторонники же XSLT находят, что Smarty оставляет слишком широкий простор для смешения логики и представления, что значительно затрудняет редактирование smarty-шаблонов сторонними разработчиками и их повторное использование.[6].
Аналоги
Начиная с 2008 года доступен последователь синтаксиса Smarty, шаблонизатор Quicky[7] основной отличительной особенностью которого является иной подход к реализации разбора шаблонов (который по заверениям автора существенно быстрее работает) и расширение уже привычного многим синтаксиса: поддержка хелперов (функций, объявленных прямо в шаблоне), наличие «магических» констант циклов, упрощенный синтаксис присвоения значений переменных без использования {math}, компилируемые управляющие конструкции.
Интересным развитием идей Smarty является библиотека Twig, которую развивает и поддерживает Fabien Potencier, ведущий разработчик и идеолог Symfony[8].
Smarty-подобный синтаксис имеют также такие обработчики шаблонов, как Dwoo[9] или обработчик, встроенный в eZ Publish / ezComponents[англ.].
До 2007 года также развивался «облегчённый» форк Smarty — Template Lite[10] (в первых версиях Smarty Light).
В 2013 году вышел первый релиз шаблонизатора Fenom[11], поддерживающий Smarty-подобный синтаксис. Отличительной чертой шаблонизатора является разбор шаблонов, который происходит без использования регулярных выражений, а базируется на встроенном токенайзере[12], что делает разбор шаблонов быстрым, а сам шаблонизатор легким.
Примечания
- ↑ https://web.archive.org/web/20010128152400/http://www.phpinsider.com/php/code/Smarty/docs/
- ↑ Release 5.3.1 — 2024.
- ↑ The smarty Open Source Project on Open Hub: Languages Page — 2006.
- ↑ Fabien Potencier. Templating Engines in PHP Архивная копия от 17 января 2013 на Wayback Machine (перевод Архивная копия от 7 августа 2016 на Wayback Machine), Templating engines in PHP - Follow-Up Архивная копия от 4 декабря 2012 на Wayback Machine (перевод Архивная копия от 7 августа 2016 на Wayback Machine)
- ↑ Brian Lozier. Template engines . Дата обращения: 9 октября 2010. Архивировано 27 сентября 2010 года.
- ↑ Реабилитация XML/XSLT технологий Архивная копия от 7 августа 2016 на Wayback Machine, статья руководителя UMI.CMS Сергея Котырева на Хабрахабре
- ↑ Quicky Архивная копия от 7 января 2014 на Wayback Machine (Документация Архивная копия от 2 августа 2010 на Wayback Machine)
- ↑ см. также его статью-сравнительный обзор PHP-шаблонизаторов: часть 1 Архивная копия от 17 января 2013 на Wayback Machine/перевод Архивная копия от 7 августа 2016 на Wayback Machine, часть 2 Архивная копия от 4 декабря 2012 на Wayback Machine/перевод Архивная копия от 7 августа 2016 на Wayback Machine
- ↑ Dwoo . Дата обращения: 23 октября 2010. Архивировано из оригинала 27 октября 2010 года.
- ↑ Template Lite . Дата обращения: 23 октября 2010. Архивировано 14 ноября 2010 года.
- ↑ Fenom
- ↑ Fenom. How it work, основная документация Fenom
Литература
- João Prado Maia, Hasin Hayder, Lucian Gheorghe, Lucian Gheorge. Smarty: PHP Template Programming and Applications. — Packt Publishing, 2006. — 256 с. — ISBN 978-1904811404.