我正在尝试使用 Smarty for php 创建一个模板。我希望模板可重用,因此我继承它并使用块替换值。这很好用,除非我需要在子模板中访问这些块值。我使用 smarty 的 {include} 函数调用这些子模板。
例子:
模板父(template.tpl):
<html>
<head>
{include file=sub_template.tpl}
</head>
<body>
{block name=title}No Title Provided{/block}
</body>
</html>
子模板 (sub_template.tpl)
<title>{block name=title}No Title Provided{/block}</title>
模板-子 (template_child.tpl)
{extends file="template.tpl"}
{block name=title}My Website!{/block}
当我查看该站点时,输出是:
<html>
<head>
<title>No Title Provided</title>
</head>
<body>
My Website!
</body>
</html>
在做了一些研究之后,我确实在 smarty 的网站上看到了关于将 {include} 函数包含在虚拟 {block} 标记中的注释,但在使其工作方面取得了不同程度的成功。
注意:如果你有一个包含在 {include} 中的子模板并且它包含 {block} 区域,那么它只有在从周围的 {block} 中调用 {include} 本身时才有效。在最终的父模板中,您可能需要一个虚拟 {block}。(http://www.smarty.net/docs/en/advanced.features.template.inheritance.tpl)
因此,我尝试过:
<html>
<head>
{block name=dummy}{include file=sub_template.tpl}{/block}
</head>
<body>
{block name=title}No Title Provided{/block}
</body>
</html>
在我对子模板进行任何更改之前,这似乎有效。一旦对子模板进行更改,它就会再次停止响应子模板中设置的块值。
我是否误解了通知所指的关于将 {include} 放置在虚拟块标签中的内容,或者这是 smarty 的错误?我目前没有使用缓存,但我的另一个想法是这可能是一个子模板缓存问题。
任何见解将不胜感激,谢谢!