Использование: по умолчанию для имен файлов на включаемых шаблонах в SMARTY 3 - PullRequest
0 голосов
/ 05 февраля 2011

Хотя я не думаю, что вопрос был так хорош, как мог бы, позвольте мне попытаться объяснить здесь лучше.

У меня есть сайт, использующий SMARTY 3 в качестве системы шаблонов. У меня есть структура шаблона, аналогичная приведенной ниже:

/templates/place1/inner_a.tpl
/templates/place1/inner_b.tpl

/templates/place2/inner_b.tpl
/templates/place2/inner_c.tpl

/templates/default/inner_a.tpl
/templates/default/inner_b.tpl
/templates/default/inner_c.tpl

Они включаются в родительский шаблон, используя

{include file="{$temp_folder}/{$inner_template}"}

Пока отлично. То, что я хотел сделать, это иметь значение по умолчанию, в случае, если файл {$temp_folder}/{$inner_template} не существует, он использует эквивалентный файл в default/{$inner_template}.

т.е. Если я сделаю {include file="place1/inner_c.tpl"}, поскольку этот файл не существует, он фактически включает в себя «default / inner_c.tpl»

Возможно ли это?

1 Ответ

0 голосов
/ 05 февраля 2011

Вам придется сделать это в php, у smarty нет способа проверить, существует ли файл.

Вы также можете написать свой собственный обработчик шаблонов.

<?php
// put this function somewhere in your application

function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp,
&$smarty_obj)
{
    if( $resource_type == 'file' ) {
        if ( ! is_readable ( $resource_name )) {
            // create the template file, return contents.
            $template_source = "This is a new template.";
            require_once SMARTY_CORE_DIR . 'core.write_file.php';
            smarty_core_write_file( array( 'filename'=>$smarty_obj->template_dir . DIRECTORY_SEPARATOR . $resource_name, 'contents'=>$template_source ), $smarty_obj ); 
            return true;
        }
    } else {
        // not a file
        return false;
    }
}

// set the default handler
$smarty->default_template_handler_func = 'make_template';
?>
...