继承结构可以是多层次的,所以你可以继承于一个文件,而这个文件又是继承于其他文件,等等。
在覆盖父模板的块以外的地方,子模板不能定义任何内容。任何在
{block}
以外的内容都会被自动忽略。在子模板和父模板中的内容,可以通过
append
和prepend
来进行合并。{block}
的选项,和{$smarty.block.parent}
或{$smarty.block.child}
会持有这些内容。模板继承在编译时将编译成单独的一个编译文件。对比效果相似的包含模板功能,模板继承的性能更高。
Note
如果你的子模板里面有用到 来包含模板,而被包含的模板里面存在供模板 调用的区域, 那么在最顶层的父模板里面,你需要放置一个空的 {block}
来作为继承。
Example 17.6. 模板继承例子
layout.tpl (父模板)
myproject.tpl (子模板)
- {extends file='layout.tpl'}
- {block name=head}
- <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
- <script src="/js/mypage.js"></script>
- {/block}
mypage.tpl (孙子模板)
- $smarty->display('mypage.tpl');
页面将输出:
Example 17.7. 用extends:
来进行模板继承
代替模板内使用的继承方式,你可以通过在PHP内定义继承树来进行继承,使用extends:
的资源类型。
下面的代码将返回和上面例子一样的结果:
- <?php
- $smarty->display('extends:layout.tpl|myproject.tpl|mypage.tpl');
- ?>
参见 , {extends}
和