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 Home\Controller;use 
2 Think\Controller;
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__},则即使当前开启布局模板,也不会进行布局模板解析。

 

 

posted @ 2014-04-06 23:10  赵亚飞  阅读(4788)  评论(0编辑  收藏  举报