Раньше некогда не пользовался Smarty, считал его через чур перегруженным излишествами и медленным, как наверное многие кто начинал изучать PHP с разработки своей CMS Wetas и писал свои template движки. Помню, как сначала использовал функцию str_replace, в которую передавал набор значений и текст файла с шаблоном. Но бегать по всему тексту и искать место для вставки не лучший способ реализации, особенно если этих мест для вставки много и шаблон большой, потому со временем поменял этот способ на другой, более шустрый. Подгружал файл с шаблоном в локальное пространство парсера, в котором уже был готов набор значений для вставки, сами значения хранились в массиве, весь вывод был между ob_start и ob_end_clean, потом заполненный и готовый шаблон отдавался браузеру.
Но на днях, в одном из новых проектов, все шаблоны были сделаны на Smarty и от меня требовалось добавить новый модуль, который выводил бы результат в темплейт с Smarty – пришлось познакомится с этим монстром.
А начнем мы с возможностей:
Скачиваем и устанавливаем Smarty.
Подключение:
Подключить Smarty к работающему проекту можно двумя способами:
Структура директорий, используемая 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 на русском.