Interested Article - Smarty

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

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

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

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

Возможности

Smarty позволяет:

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

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

Механизм действия

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

Компиляция шаблонов позволяет достичь производительности, сравнимой с производительностью PHP-шаблонов, написанных вручную . Конструкции 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 с использованием нового синтаксиса» и поэтому не дает особых преимуществ. Сторонники же XSLT находят, что Smarty оставляет слишком широкий простор для смешения логики и представления, что значительно затрудняет редактирование smarty-шаблонов сторонними разработчиками и их повторное использование . .

Аналоги

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

Интересным развитием идей Smarty является библиотека Twig , которую развивает и поддерживает Fabien Potencier, ведущий разработчик и идеолог Symfony .

Smarty-подобный синтаксис имеют также такие обработчики шаблонов, как Dwoo или обработчик, встроенный в .

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

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

Примечания

  1. — 2023.
  2. — 2006.
  3. от 17 января 2013 на Wayback Machine (от 7 августа 2016 на Wayback Machine ), от 4 декабря 2012 на Wayback Machine (от 7 августа 2016 на Wayback Machine )
  4. (неопр.) . Дата обращения: 9 октября 2010. 27 сентября 2010 года.
  5. от 7 августа 2016 на Wayback Machine , статья руководителя UMI.CMS Сергея Котырева на Хабрахабре
  6. от 7 января 2014 на Wayback Machine (от 2 августа 2010 на Wayback Machine )
  7. см. также его статью-сравнительный обзор PHP-шаблонизаторов: от 17 января 2013 на Wayback Machine / от 7 августа 2016 на Wayback Machine , от 4 декабря 2012 на Wayback Machine / от 7 августа 2016 на Wayback Machine
  8. (неопр.) . Дата обращения: 23 октября 2010. Архивировано из 27 октября 2010 года.
  9. (неопр.) . Дата обращения: 23 октября 2010. 14 ноября 2010 года.
  10. , основная документация Fenom

Литература

  • João Prado Maia, Hasin Hayder, Lucian Gheorghe, Lucian Gheorge. Smarty: PHP Template Programming and Applications. — Packt Publishing, 2006. — 256 с. — ISBN 978-1904811404 .

Ссылки

  • (англ.)
  • (англ.)
  • (рус.)

Same as Smarty