1. Итак, начет с того, для чего вобще нужен шаблонизатор.
Если уж Вы решили использовать шаблонизатор, то Вы наверняка поняли для себя, что такое отделение кода от представления (view), от того, что видно снаружи (т.н. пользовательского интерфейса). В шаблоны выносится все отображения, вся верстка и определяются места, где будут вставлены или использованы данные, пришедшие от обработчика.
Все это дело выглядит так: скрипт получает данные от пользователя (get, post и т.д.), обрабатывает их и передаёт в шаблонизатор, а уже шаблонизатор выводи эти данные используя шаблоны.
2. С чего начать (самый симпл)
Перед началом — изучаем базовый синтаксис.
Начинать надо с самого просто. Сделаем шаблон, который будет выводить переданный из скрипта текст и текущее время.
template.tpl:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head profile="http://gmpg.org/xfn/11">
<title>Изучаем smarty на ПЫХА.РУ</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<html>
<h1>Здравствуйте</h1>
<p>{$text|default:"текст не передан в шаблонизатор"}</p>
<small>{$smarty.now|date_format:"%d-%m-%Y %H:%M:%S"}</small>
</body>
</html>
Итак шаблон, в котый мы должны передать $text. В случае, если эта переменная не определена, выведется значение по умолчанию ("текст не передан в шаблонизатор"). Здесь мы воспользовались модификатором default, который и устанавливает значение по умолчанию (http://smarty.php.net/manual/ru/language.modifier.default.php).
script.php:
// подключаем смарти
require_once ('smarty/Smarty.class.php');
$smarty = new Smarty;
$text = 'Текст, который мы собираемся вывести в шаблоне.';
// передаем шаблонизатору наш текст
$smarty -> assign('text', $text);
// выводим шаблон в люди
$smarty -> display('template.tpl');
Также, необходимо обратить внимание на использование {$smarty.now} (http://smarty.php.net/manual/ru/language.variables.smarty.now.php), эта переменная выводит текущее время. Здесь для неё используется модификатор date_format (http://smarty.php.net/manual/en/language.modifier.date.format.php), форматирующий дату.
3. Немного важных мелочей, которые пригодятся в жизни
3.1 Шаблоны для удобства можно разбивать на блоки (например, шапка, тело и подвал) если они повторяются на разных страницах и подключать в основных файлах.
Пример. Допустим у нас есть главная и новостная страницы, которые имеют общую шапку и подвал. Их мы положим в папку blocks и назовем header.tpl и footer.tpl ссответственно.
index.tpl:
{include file='blocks/header.tpl'}
Текст главной страницы
{include file='blocks/footer.tpl'}
news.tpl:
{include file='blocks/header.tpl'}
Вывод новостей идет тут.
{include file='blocks/footer.tpl'}
3.2 Ещё одно замечание (обязательное!), о данных.
Абсолютно все данные, абсолютно все массивы данных должны быть сформированы в скрипте ДО передачи в шаблонизатор! Старайтесь этого не допускать, т.к. с данными в шаблонизаторе работать не нужно, он не для этого..
4. Разберем жизненную ситуацию :)
Чтобы приблизиться к реальности, разберем пример вывода новостей.
Здесь я приведу кусок кода на php, вытаскивающий и передающий новости и кусок шаблона, отвечающий за корректный и красивый вывод новостей.
news.php
// достаём наши новости из БД
$query = "SELECT `id`, `date`, `title`, `content`
FROM `news`
ORDER BY `date` DESC";
$sql = mysql_query($query) or die(mysql_error());
// создаем массив, в который будем складывать новости
$news = array();
while ($row = mysql_fetch_assoc($sql))
{
/*
** Здесь можно производить любые манипуляции с данными новостей,
** перед тем, как они попадут в массив, который будет
** в последствии передан шаблонизатору
** например, можно обработать дату, перевести месяц на русский и т.д.
*/
$news[] = $row;
}
// массив новостей отдаём шаблонизатору
$smarty -> assign('news', $news);
$smarty -> display('news.tpl');
news.tpl:
{* подключаем шапку шаблона *}
{include file='blocks/header.tpl'}
{* здесь будем организовывать вывод новостей
** используем foreach (http://smarty.php.net/manual/ru/language.function.foreach.php)
** для вывода каждого элемента массива
*}
{foreach key=key item=news_item from=$news}
<h1>{$news_item.title} ({$news_item.date})</h1>
<p>{$news_item.content}</p>
<a href="/news/{$news_item.id}/">подробнее…</a>
{/foreach}
{* подключаем подвал шаблона *}
{include file='blocks/footer.tpl'}
5. О холиварах и тому подобное
Я не спорю, что native php шаблоны это верх скорости и не буду уделять здесь внимание нескончаемым спорам.
6. Думаю
для начинающих достаточно пищи, чтобы начинать разобраться.
И помните, все начинается всегда отсюда: http://smarty.php.net/manual/ru/