Документация Smarty


Ресурсы

Шаблоны можно получать из самых разных источников. Когда вы отображаете или вызываете шаблон, либо когда вы подключаете один шаблон к другому, вы указываете тип ресурса, вместе с соответствующим путём и названием шаблона. Если тип ресурса явно не задан, используется значения свойства $default_resource_type.

Шаблоны из папки $template_dir

Шаблоны, которые находятся в папке $template_dir, не требуют при вызове указания типа ресурса, хотя вы можете использовать префикс file: для сохранения стиля. Для вызова просто укажите относительный от $template_dir путь к шаблону.

Пример 15-6. Вызов шаблона из папки $template_dir

<?php
$smarty
->display('index.tpl');
$smarty->display('admin/menu.tpl');
$smarty->display('file:admin/menu.tpl'); // тоже самое, что и строкой выше
?>

{* код в шаблоне Smarty *}
{include file="index.tpl"}
{include file="file:index.tpl"} {* тоже самое, что и строкой выше *}

Шаблоны из произвольной папки

Для вызова шаблонов из папки вне $template_dir необходимо использовать префикс file: с последующим указанием асболютного пути и имени шаблона.

Пример 15-7. Вызов шаблона из произвольной папки

<?php
$smarty
->display('file:/export/templates/index.tpl');
$smarty->display('file:/path/to/my/templates/menu.tpl');
?>

А изнутри шаблона Smarty:

{include file="file:/usr/local/share/templates/navigation.tpl"}

Файловые пути в Windows

Если вы работаете под Windows, то пути к файлам, как правило, начинаются с буквы логического диска (например, C:). Не забудьте указать префикс "file:" в начале пути, чтобы избежать конфликтов имён и достичь необходимого результата.

Пример 15-8. использование шаблонов с файловіми путями Windows

<?php
// PHP скрипт
$smarty->display('file:C:/export/templates/index.tpl');
$smarty->display('file:F:/path/to/my/templates/menu.tpl');
?>

А изнутри шаблона Smarty:

{include file="file:D:/usr/local/share/templates/navigation.tpl"}

Шаблоны из прочих источников

Вы можете вызывать шаблоны, используя любые доступные через PHP источники: базы данных, сокеты, LDAP и так далее. Для этого нужно написать соответствующий плагин ресурса и зарегистрировать его в Smarty.

Смотрите раздел плагины ресурсов для более подробной информации о тех функциях, которые вы должны предоставить.

Замечание: Обратите внимание на то, что вы не можете переопределить встроенный ресурс file, но в ваших силах написать и зарегистрировать ресурс с другим именем, который будет использовать другой способ вызова шаблонов из файловой системы.

Пример 15-9. Использование собственных ресурсов

// код в вашем скрипте
function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
{
    // обращаемся к базе, запрашиваем код шаблона,
    // перегружаем его в $tpl_source
    $sql = new SQL;
    $sql->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:

{include file="db:/extras/navigation.tpl"}

Функция для обработки шаблона по умолчанию

Вы можете определить функцию, которая будет использована, если шаблон не может быть вызван из соответствующего ресурса. Это можно использовать, к примеру, для построения недостающего шаблона на лету.

Пример 15-10. использование функции для обработки шаблона по умолчанию

<?php
// код в вашем скрипте

function make_template ($resource_type$resource_name, &$template_source, &$template_timestamp, &$smarty_obj)
{
    if( 
$resource_type == 'file' ) {
        if ( ! 
is_readable $resource_name )) {
            
// создаём и записываем файл шаблона.
            
$template_source "Это новый шаблон.";
            
$template_timestamp time();
            
$smarty_obj->_write_file($resource_name,$template_source);
            return 
true;
        }
    } else {
        
// не файл
        
return false;
    }
}

// определение обработчика
$smarty->default_template_handler_func 'make_template';
?>
SAPE все усложнил?

MainLink - простая и прибыльная продажа ссылок!

Последние поступления:

Размещена 10 августа 2020 года

Я по ТВ видел, что через 10 лет мы будем жить лучше, чем в Германии...
Я не понял, что это они с Германией сделать хотят?!

читать далее…

ТехЗадание на Землю

Размещена 14 марта 2018 года

Пpоект Genesis (из коpпоpативной пеpеписки)

читать далее…

Шпаргалка по работе с Vim

Размещена 05 декабря 2017 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

читать далее…

Ошибка: Error: Cannot find a valid baseurl for repo

Размещена 13 сентабря 2017 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

читать далее…

Linux Optimization

Размещена 30 июля 2012 года

Prelink

читать далее…