Существует немало решений, позволяющих отделить дизайн от кода посредством создания системы шаблонов. Многие CMS (Data Life Engine, Joomla etc) имеют в своём составе классы для работы с шаблонами. Некоторые разработчики пишут свои шаблонизаторы. Однако в большинстве своём это решения, заточенные под конкретный проект, и возможностями они особо не блещут - в основном позволяют вставку одиночных значений и парных тегов. Да и н апроизводительности их использование сказывается не лучшим образом.
Smarty - это написанный на PHP класс, который представляет собой компилирующий обработчик шаблонов. Суть его работы в том, что после обработки шаблона создаётся соответствующий PHP-код, который при последующих обращениях к этой же странице будет просто выполнен. Кроме того, Smarty предоставляет чрезвычайно богатые возможности для управления контентом - как простую вставку переменных, так и условные и циклические инструкции, работу с массивами и объектами, вызов функций, доступ к переменным окружения etc. При этом синтаксис инструкций Smarty достаточно простой и понятный. Так что верстальщик может легко и просто управлять отображением данных, комбинируя HTML и инструкции Smarty, а программист может [безнаказанно] безобязненно менять логику работы приложения и затем просто передавать данные в шаблон.
Пример использования Smarty:
PHP
- Код: выделить все
require_once('Smarty.class.php');
$smarty = new Smarty();
$str = "Smarty Demo";
$smarty->assign('title', $title);
$list = array(
'first_elem' => 'This is a first element',
'second_elem' => 'This is a second element,
);
$smarty->assign('mass, $list);
$smarty->display("main.tpl");
HTML-код шаблона (main.tpl)
{* Йа комментарий, и йа не попаду в браузер :Р *}
{* Включение файла *}
{include file=header.tpl}
{* Вставка переменной из php-скрипта *}
<h1>{$str}</h1>
<table>
{*
Циклический проход по массиву . Блок foreachelse выполняется, елси исходный массив пуст.
*}
{foreach from=$mass item=elem}
<tr><td class="data">{$elem}</td></tr>
{foreachelse}
<tr><td class="error">Data Not Found</td></tr>
{/foreach}
</table>
{include file=footer.tpl}Некоторые особенности Smarty:
- Работает быстро и эффективно. Шаблоны компилируются только один раз, повторно обрабатываются лишь те шаблоны, которые изменились
- Гибкий и настраиваемый механизм кэширования, позволяющий при повторном обращении к странице отдавать уже сгенерированный HTML-документ
- Позволяет легко расширить базовый функционал или изменить язык шаблонов посредством написания или подключения готовых плагинов, создания своих функций и модификаторов переменных(можно, например, использовать БД в качестве кэша или хранилища шаблонов)
- Прост в использовании. Неискушённый в программировании верстальщик без труда разберётся в инструкциях языка шаблонов Smarty
Боле подробно читаем здесь






