Smarty {include}文件+标签如果存在,否则回退到文件

时间:2014-12-09 14:08:43

标签: php smarty smarty3

我正在制作白标产品,并希望能够快速覆盖一些模板,但不能全部覆盖所有模板。

我的想法是拥有类似的东西,比如index.tpl

{include file="header.tpl" tag=$whitelabelname} 
{include file="body.tpl" tag=$whitelabelname} 
{include file="footer.tpl" tag=$whitelabelname}

如果有任何办法,我希望能够自动包含文件header-whitelabelname.tpl(如果存在),或者header.tpl(如果存在)。

$tagTemplate = substr($template, 0, -4) . "-" . $tag . ".tpl";
if ( file_exists($tagTemplate) ) $template = $tagTemplate;

这样做的原因是替代方案需要将所有模板文件更改为每个包含的大型switch语句,这将最终导致非常大且复杂的模板。

是否可以以某种方式扩展{include}指令以包含我的逻辑,而不是自己手动更改smarty_internal_compile_include.php。

由于

1 个答案:

答案 0 :(得分:0)

您可以通过实施Smarty resource plugin来实现此目的。查看文档页面上的示例。您必须在第一个函数中实现file_exists()逻辑。另请查看方法register_resource(),了解如何使用该插件。