由于模板继承的特性,子模板中的block必须已经在父模板中定义过,所以假设如下情况:
a.html
<html>
<body>
<block name="content"></block>
</body>
</html>a模板中定义了一个content区块,我们用b继承它.b.html
<extend name="a" />
<block name="content">
bbbbbbbbb
</block>到这里为止,我们display("b")的话,最终显示的是<html>
<body>
bbbbbbbbb
</body>
</html>工作正常,这是一般的继承用法,当我有一个想法,我想再用c去继承b,然后display('c'),还能渲染吗?c.html
<extend name="b" />
<block name="content">
cccccc
</block>但是结果是:<extend name="a" />
ccccccb是继承a的,但是并没有处理,tp不支持这个机制。没办法,自己修改Think\Templates.class.php ,已经实现有限的多次继承,为什么说是有限的呢,
看个例子:
a.html还是上面那个
b.html
<extend name="a" />
<block name="content">
<block name="form"></block>
bbbbbbbbb
</block>c.html<extend name="b" />
<block name="form">
...form...
</block>看到没,在b.html中,我们在content块内部定义了一个form块,c模板只要定义form块即可,不用覆盖content块。这样就不用在a.html里定义form块了。
也就是这种块必须在上级模板某个块嵌套中。
修改后的脚本我传附件里,有兴趣可以看看,当然大部分人应该没有这么变态的需求就是了。
Template.class.zip
( 7.09 KB 下载:43 次 )
最佳答案