time

Smarty – монстр шаблонов для PHP

smarty-logo-orange.gif Раньше некогда не пользовался Smarty, считал его через чур перегруженным излишествами и медленным, как наверное многие кто начинал изучать PHP с разработки своей CMS Wetas и писал свои template движки. Помню, как сначала использовал функцию str_replace, в которую передавал набор значений и текст файла с шаблоном. Но бегать по всему тексту и искать место для вставки не лучший способ реализации, особенно если этих мест для вставки много и шаблон большой, потому со временем поменял этот способ на другой, более шустрый. Подгружал файл с шаблоном в локальное пространство парсера, в котором уже был готов набор значений для вставки, сами значения хранились в массиве, весь вывод был между ob_start и ob_end_clean, потом заполненный и готовый шаблон отдавался браузеру.

Но на днях, в одном из новых проектов, все шаблоны были сделаны на Smarty и от меня требовалось добавить новый модуль, который выводил бы результат в темплейт с Smarty – пришлось познакомится с этим монстром.

А начнем мы с возможностей:

  • достаточный набор встроенных команд – конструкции для условного выполнения и циклического перебора данных
  • компилирование шаблонов – конвертирование шаблонов в сопоставимый PHP скрипт
  • кэширование шаблонов – моментальное отображение, без рендринга
  • настраиваемые и расширяемые возможности – ООП архитектура позволяет расширять возможности Smarty

Скачиваем и устанавливаем Smarty.

Подключение:

Подключить Smarty к работающему проекту можно двумя способами:

  1. Через константу SMARTY_DIR, указав путь
  2. Обычным способом, указав путь в include_path

Структура директорий, используемая Smarty

templates – тут лежат все шаблоны.

configs – содержит специфические настройки Smarty для текущего сайта.

templates_c – содержит шаблоны, скомпилированые Smarty.

cache – содержит закишированые теплейты (если включено кэширование)

Путь к этим директориям можно поменять, изменив значения следующих атрибутов класса Smarty: $template_dir, $compile_dir, $config_dir, $cache_dir .

Пример использование:

Текст шаблона приведен ниже, назовем файл, например, welcome.tpl и закидываем в папку templates.

<html>
<head>
<title>{$title}</title>
</head>
<body>
<p>Hello, {$user_name}. Welcome to the wonderful world of Smarty.</p>
</body>
</html>

Создаем php-файл, в который помещаем такой код:

require("Smarty.class.php");
$smarty = new Smarty;
$smarty->assign("name", "Agent 007");
$smarty->assign("title", "Welcome!");
$smarty->display("welcome.tpl");

Любая переменная в шаблоне может иметь модификатор, который заданным способом меняет значение, хранящиеся в этой переменной.

Пример применения: {$var|modifier} Возможные значения: capitalize, count_words, date_format, default, strip_tags, truncate.

Управляющие конструкции

Условный оператор if-elseif-else

{if $dayofweek > 5}
Выходные!
{/if}

Оператор цикла foreach. Код с контролером:

require("Smarty.class.php");
$smarty = new Smarty;
$daysofweek = array("Пн","Вт","Ср","Чт","Пт","Сб","Вс");
$smarty->assign("daysofweek", $daysofweek);
$smarty->display("daysofweek.tpl");

Текст шаблона:

{foreach key=key item=item from=$daysofweek}
{$key}: {$item}
{foreachelse}
Значения не найдены.
{/foreach}

Дополнительное чтиво: Официальная документация по Smarty на русском.

blog comments powered by Disqus