关于模板多级继承的一个尝试

浏览:1833 发布日期:2014/05/05 分类:技术分享
我们知道TP的模板只支持继承一次,也就是模板c.html继承了模板b.html,而b.html又继承a.html,渲染的时候只渲染到b.html。
由于模板继承的特性,子模板中的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" />
cccccc
b是继承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 次 )

最佳答案
评论( 相关
后面还有条评论,点击查看>>