zoukankan      html  css  js  c++  java
  • smarty中的母板极制_extends和block标签

    模板继承 继承是从面向对象编程而来的概念,模板继承可以让你定义一个或多个父模板,提供给子模板来进行扩展。 扩展继承意味着子模板可以覆盖部分或全部父模板的块区域。

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

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

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

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

    子模板继承使用{extends}标签, 该标签一定放要在子模板的第一行。 另一种做法是将整个模板继承树,在PHP程序调用fetch() 或 display()的时候, 用extends:的模板资源类型,该做法有更大的灵活性。

    Note 当开启了$compile_check,继承树里面的全部文件都会在每次调用的时候检查是否有修改。 因此,在生产环境中你最好关闭$compile_check。

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

    Example 17.6. 模板继承例子

    layout.tpl (父模板)

    <html>
    <head>
      <title>{block name=title}默认页面标题{/block}</title>
      {block name=head}{/block}
    </head>
    <body>
    {block name=body}{/block}
    </body>
    </html>

    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 (孙子模板)

    {extends file='myproject.tpl'}
    {block name=title}我的页面标题{/block}
    {block name=head}
      <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
      <script src="/js/mypage.js"></script>
    {/block}
    {block name=body}我的HTML页面内容在这里{/block}

    显示上面的模板

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

    页面将输出:

    <html>
    <head>
      <title>我的页面标题</title>
      <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
      <script src="/js/mypage.js"></script>
    </head>
    <body>
    我的HTML页面内容在这里
    </body>
    </html>

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

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

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

    <?php
    $smarty->display('extends:layout.tpl|myproject.tpl|mypage.tpl'); 
    ?>
  • 相关阅读:
    只出现一次的数字
    SpringBoot整合Redis
    MFC 0误差画图
    模仿.NET的序列化机制
    求最大子数组
    让CFrameWnd派生类的对象响应鼠标消息的“变态”方法
    关于chm文件和'#'的惊人发现
    CxImage学习笔记
    C++指针系列
    MFC,C++ 截屏
  • 原文地址:https://www.cnblogs.com/a-xu/p/4177776.html
Copyright © 2011-2022 走看看