"Smarty это - движок шаблонов (шаблонизатор) для PHP. Точнее, он предоставляет легко управляемый способ отделения логики и содержания приложения от его внешнего вида." ©документация.
Ещё не встречал случаев, когда в приложениях просто необходимо отделять логику от отображения. Возможно мне не приходилось работать с такими большими задачами. В моей практике я использую Smarty немного иначе, что можно понять из заголовка.
Установка Smarty подробно описана в документации. Только отмечу, что гораздо удобнее использовать продвинутую установку, т.е. создать свой класс, расширяющий класс Smarty и задающий начальные установки:
require_once('Smarty-X.X.XX/libs/Smarty.class.php');
class MySmarty extends Smarty
{
 function __construct()
 {
  parent::__construct();
  $this->template_dir = CWD . '/modules/Smarty-X.X.XX/templates/';
  $this->compile_dir = CWD . '/modules/Smarty-X.X.XX/templates_c/';
  $this->config_dir = CWD . '/modules/Smarty-X.X.XX/configs/';
  $this->cache_dir = CWD . '/modules/Smarty-X.X.XX/cache/';
  //$this->caching  = Smarty::CACHING_OFF;
  //$this->debugging  = true;
  //$this->error_reporting = E_ALL;
 }
}
$Smarty = new MySmarty();
При обычном использовании шаблоны Smarty отображаются функцией display() :
$Smarty->assign('lang_code', 'RU');
$Smarty->assign('curr_date', date('d.m.Y') );
$Smarty->display('test_templ.tpl');
В моём случае была задача введения переменных в тело письма при автоматизированных рассылках с помошью скрипта. Переменные (дата, имя, фамилия и т.д.) вставляются оператором в тексты стандартных писем, и во время самой рассылки переменные в каждом письме должны подменяться соответствующей информацией.
Я решил попробовать использовать Smarty для этой цели. Как оказалось функции display() и fetch() используют понятие ресурс: в первом параметре, перед основным значением можно вставить строку "string: " и тогда остальное значение будет воспринято как текст шаблона вместо пути к файлу. И в сочетании с функцией fetch(), возвращающей результат в виде строки, это всё что нужно для моей задачи.
В этом схематичном примере сначала Smarty переменные в тексте заменяются нужными значениями, затем текст вставляется в подготовленный заранее шаблон с HTML:
set_time_limit(0);
require_once(CWD . '/modules/Smarty.php');
while (true)
{
 $res = db_query('...');
 while ($row = db_fetch($res))
 {
  $Smarty->assign('FirstName',  $row['first_name']);
  $Smarty->assign('LastName',  $row['last_name']);
  $text_ready  = $Smarty->fetch('string: ' . $row['text']);
  $Smarty->assign('text',  $text_ready);
  $mail_body  = $Smarty->fetch(CWD . 'mail/generic_templ.tpl');
  mail($row['to'], $row['subj'], $mail_body);
  db_query('...'); // set mail as sent
  $Smarty->clearAllAssign();
 }
}
Помимо "string: " для работы со строками есть ещё "eval: " отличающийся только тем, что шаблон перекомпилируется каждый раз заново.
 
