• Thinkphp3.2中的模板继承


    1:模板继承:
        是3.1.2版本添加的一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层。模板继承其实并不难理解,就好比 类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以 对基础模板中定义的区块进行重载。
    因此,模板继承的优势其实是设计基础模板中的区块(block)和子模板中替换这些区块。
    每个区块由标签组成,并且不支持block标签的嵌套。



    例如下面是基础模板中的一个典型的区块设计,一般用于设计网站标题:

    1 <block name="title"><title>标题</title></block>

    block标签必须指定name属性来标识当前区块的名称,这个标识在当前模板中应该是唯一的,block标签中可以包含任何模板内容,包括其他标签和变量,例如:

    1 <block name="title"><title>{$web_title}</title></block>

    当然你也可以在外部加载文件

    1 <block name="include"><include file="Public:header" /></block

    然后我们在子模板(其实是当前操作的入口模板)中使用继承:

    使用的时候则是:

    <extend name="Public/index"/>
    <block name="content">
           <link href="__STATIC__/SmohanTimeLine/css/smohan.timeline.css" rel="stylesheet" type="text/css" media="all">
           <style>
                .item{cursor: pointer;}
           </style>
           <div id="index-div">
                 <div class="lines">&nbsp;</div>
                 <div class="item" >
                   <div class="item-wraper" value='http://www.cnblogs.com/zyf-zhaoyafei/p/4486220.html' style="padding:20px 15px;">
                        <img src="__UPLOAD__/Special/19056051036.jpg">
                          <p class='disprition'>Git是目前世界上最先进的分布式版本控制系统</p>
                   </div>
                </div>
            </div>
    </block>
    <block name="script">
      <script type="text/javascript" src="__STATIC__/SmohanTimeLine/js/smohan.timeline.min.js"></script>
      <script type="text/javascript">
        $(window).load(function(){
            $(window).bind('resize',function(){
            }).resize();
        });
      </script>
    </block>

    extend 中的name与block中的name一致
      在子模板中,可以对基础模板中的区块进行重载定义,如果没有重新定义的话,则表示沿用基础模板中的区块定义,如果定义了一个空的区块,则表示删除基础模板中的该区块内容。子模板中的区块定义顺序是随意的,模板继承的用法关键在于基础模板如何布局和设计规划了,如果结合原来的布局功能,则会更加灵活。

    2:模板布局

      需在项目配置文件中添加相关的布局模板配置,就可以简单实现模板布局功能,比较适用于全站使用相同布局的情况,需要配置开启LAYOUT_ON 参数(默认不开启),并且设置布局入口文件名LAYOUT_NAME(默认为layout)。

    1 'LAYOUT_ON'=>true,
    2 'LAYOUT_NAME'=>'layout',

    开启LAYOUT_ON后,我们的模板渲染流程就有所变化,例如:

    1 namespace HomeController;use 
    2 ThinkController;
    3 Class UserController extends Controller{     
    4        Public function add() {   
    5               $this->display('add');     
    6        }
    7 }

      在不开启LAYOUT_ON布局模板之前,会直接渲染 Application/Home/View/User/add.html 模板文件,开启之后,首先会渲染Application/Home/View/layout.html 模板,布局模板的写法和其他模板的写法类似,本身也可以支持所有的模板标签以及包含文件,区别在于有一个特定的输出替换变量{__CONTENT__},例如,下面是一个典型的layout.html模板的写法:

    1 <include file="Public:header" /> 
    2 {__CONTENT__}
    3 <include file="Public:footer" />

    如果某些页面不需要使用布局模板功能,可以在模板文件开头加上 {__NOLAYOUT__} 字符串。

    如果上面的User/add.html 模板文件里面包含有{__NOLAYOUT__},则即使当前开启布局模板,也不会进行布局模板解析。

  • 相关阅读:
    第一次作业
    冯娟的第五次作业
    冯娟的第三次作业
    冯娟的第四次作业
    冯娟的第二次作业
    数据压缩第一次作业
    第二次实验
    第三次实验
    第一次实验
    第五次作业
  • 原文地址:https://www.cnblogs.com/zyf-zhaoyafei/p/3649501.html
Copyright © 2020-2023  润新知