Smarty

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], что делает разбор шаблонов быстрым, а сам шаблонизатор легким.

Примечания

  1. https://web.archive.org/web/20010128152400/http://www.phpinsider.com/php/code/Smarty/docs/
  2. Release 5.8.0 — 2026.
  3. The smarty Open Source Project on Open Hub: Languages Page — 2006.
  4. 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)
  5. Brian Lozier. Template engines. Дата обращения: 9 октября 2010. Архивировано 27 сентября 2010 года.
  6. Реабилитация XML/XSLT технологий Архивная копия от 7 августа 2016 на Wayback Machine, статья руководителя UMI.CMS Сергея Котырева на Хабрахабре
  7. Quicky Архивная копия от 7 января 2014 на Wayback Machine (Документация Архивная копия от 2 августа 2010 на Wayback Machine)
  8. см. также его статью-сравнительный обзор PHP-шаблонизаторов: часть 1 Архивная копия от 17 января 2013 на Wayback Machine/перевод Архивная копия от 7 августа 2016 на Wayback Machine, часть 2 Архивная копия от 4 декабря 2012 на Wayback Machine/перевод Архивная копия от 7 августа 2016 на Wayback Machine
  9. Dwoo. Дата обращения: 23 октября 2010. Архивировано из оригинала 27 октября 2010 года.
  10. Template Lite. Дата обращения: 23 октября 2010. Архивировано 14 ноября 2010 года.
  11. Fenom
  12. 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.

Ссылки

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.