Ресурсы
Шаблоны можно получать из самых разных источников. Когда вы отображаете,
вызываете или подключаете один шаблон из другого, вы указываете тип ресурса,
вместе с соответствующим путём и названием шаблона.
Шаблоны из папки $template_dir
Шаблоны, лежащие в папке $template_dir, не требуют при вызове указания
типа ресурса, хотя вы можете использовать префикс file: для сохранения
стиля. Для вызова просто укажите относительный от $template_dir путь к
шаблону.
Вызов шаблона из папки $template_dir
display("index.tpl");
$smarty->display("admin/menu.tpl");
$smarty->display("file:admin/menu.tpl"); // тоже самое, что и строкой выше
{* код в шаблоне *}
{include file="index.tpl"}
{include file="file:index.tpl"} {* тоже самое, что и строкой выше *}
]]>
Шаблоны из произвольной папки
Для вызова шаблонов из папки вне $template_dir необходимо
использовать префикс file: с последующим указанием асболютного
пути и имени шаблона.
Вызов шаблона из произвольной папки
display("file:/export/templates/index.tpl");
$smarty->display("file:/path/to/my/templates/menu.tpl");
?>
]]>
А изнутри шаблона Smarty:
Файловые пути в Windows
Если вы работаете под Windows, то пути к файлам, как правило,
начинаются с буквы логического диска (например, C:). Не забудьте
указать префикс "file:" в начале пути, чтобы избежать конфликтов
имён и достичь необходимого результата.
использование шаблонов с файловіми путями Windows
display("file:C:/export/templates/index.tpl");
$smarty->display("file:F:/path/to/my/templates/menu.tpl");
?>
]]>
А изнутри шаблона Smarty:
Шаблоны из прочих источников
Вы можете вызывать шаблоны, используя любые доступные через PHP источники:
базы данных, сокеты, LDAP и так далее.
Для этого нужно написать соответствующий плагин ресурса и зарегистрировать
его в Smarty.
Смотрите раздел плагины ресурсов
для более подробной информации о тех функциях, которые вы должны
предоставить.
Обратите внимание на то, что вы не можете переопределить встроенный ресурс
file, но в ваших силах написать и зарегистрировать ресурс с
другим именем, который будет использовать другой способ вызова шаблонов из
файловой системы.
Использование собственных ресурсов
query("select tpl_source
from my_table
where tpl_name='$tpl_name'");
if ($sql->num_rows) {
$tpl_source = $sql->record['tpl_source'];
return true;
} else {
return false;
}
}
function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
// обращаемся к базе, запрашиваем поле $tpl_timestamp.
$sql = new SQL;
$sql->query("select tpl_timestamp
from my_table
where tpl_name='$tpl_name'");
if ($sql->num_rows) {
$tpl_timestamp = $sql->record['tpl_timestamp'];
return true;
} else {
return false;
}
}
function db_get_secure($tpl_name, &$smarty_obj)
{
// предполагаем, что наши шаблоны совершенно безопасны
return true;
}
function db_get_trusted($tpl_name, &$smarty_obj)
{
// не используется для шаблонов
}
// регистрируем ресурс под именем "db"
$smarty->register_resource("db", array("db_get_template",
"db_get_timestamp",
"db_get_secure",
"db_get_trusted"));
// используем ресурс из PHP скрипта
$smarty->display("db:index.tpl");
?>
]]>
А изнутри шаблона Smarty:
Функция для обработки шаблона по умолчанию
Вы можете определить функцию, которая будет использована,
если шаблон не может быть вызван из соответствующего ресурса.
Это можно использовать, к примеру, для построения недостающего
шаблона на лету.
использование функции для обработки шаблона по умолчанию
_write_file($resource_name,$template_source);
return true;
}
} else {
// не файл
return false;
}
}
// определение обработчика
$smarty->default_template_handler_func = 'make_template';
?>
]]>