虽然我认为这个问题并不尽如人意,但让我试着在这里解释一下。
我有一个使用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”
有可能吗?
答案 0 :(得分:0)
你必须在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';
?>