Ресурсы Шаблоны можно получать из самых разных источников. Когда вы отображаете, вызываете или подключаете один шаблон из другого, вы указываете тип ресурса, вместе с соответствующим путём и названием шаблона. Шаблоны из папки $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'; ?> ]]>