"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: " отличающийся только тем, что шаблон перекомпилируется каждый раз заново.
Комментариев нет:
Отправить комментарий