• 继承结构可以是多层次的,所以你可以继承于一个文件,而这个文件又是继承于其他文件,等等。

    • 在覆盖父模板的块以外的地方,子模板不能定义任何内容。任何在{block}以外的内容都会被自动忽略。

    • 在子模板和父模板中的内容,可以通过appendprepend来进行合并。{block}的选项,和{$smarty.block.parent}{$smarty.block.child}会持有这些内容。

    • 模板继承在编译时将编译成单独的一个编译文件。对比效果相似的包含模板功能,模板继承的性能更高。

    Note

    如果你的子模板里面有用到 来包含模板,而被包含的模板里面存在供模板 调用的区域, 那么在最顶层的父模板里面,你需要放置一个空的 {block} 来作为继承。


    Example 17.6. 模板继承例子

    layout.tpl (父模板)

    myproject.tpl (子模板)

    1. {extends file='layout.tpl'}
    2. {block name=head}
    3. <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
    4. <script src="/js/mypage.js"></script>
    5. {/block}
    6.  

    mypage.tpl (孙子模板)

    1. $smarty->display('mypage.tpl');
    2.  

    页面将输出:


    Example 17.7. 用extends:来进行模板继承

    代替模板内使用的继承方式,你可以通过在PHP内定义继承树来进行继承,使用extends:的资源类型。

    下面的代码将返回和上面例子一样的结果:

    1. <?php
    2. $smarty->display('extends:layout.tpl|myproject.tpl|mypage.tpl');
    3. ?>

    参见 , {extends}