加入收藏 | 网站地图 | | RSS | WAP
你好,游客 登录 注册 搜索
背景:
阅读内容  领跑条码、标签打印软件 | 来电弹出客户资料

ThinkPHP3.1编程开发快速入门教程之:模板布局

[日期:2012-12-04] 作者: 来源: [字体: ]
ThinkPHP的模板引擎内置了布局模板功能支持,可以方便的实现模板布局以及布局嵌套功能。
有三种布局模板的支持方式:

第一种方式:全局配置方式

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

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

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

Class UserAction extends Action {
    Public function add() {
        $this->display('add');
    }
 }

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

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

读取layout模板之后,会再解析User/add.html 模板文件,并把解析后的内容替换到layout布局模板文件的{__CONTENT__} 特定字符串。
当然可以通过设置来改变这个特定的替换字符串,例如:

'TMPL_LAYOUT_ITEM'      =>  '{__REPLACE__}'

但是一个布局模板同时只能有一个特定替换字符串。
采用这种布局方式的情况下,一旦User/add.html 模板文件或者layout.html布局模板文件发生修改,都会导致模板重新编译。
如果需要指定其他位置的布局模板,可以使用:

'LAYOUT_NAME'=>'Layout/layoutname',

就表示采用Tpl/Layout/layoutname.html作为布局模板。

如果某些页面不需要使用布局模板功能,可以在模板文件开头加上 {__NOLAYOUT__} 字符串。
如果上面的User/add.html 模板文件里面包含有{__NOLAYOUT__},则即使当前开启布局模板,也不会进行布局模板解析。

第二种方式:模板标签方式

这种布局模板不需要在配置文件中设置任何参数,也不需要开启LAYOUT_ON,直接在模板文件中指定布局模板即可,相关的布局模板调整也在模板中进行。
以前面的输出模板为例,这种方式的入口还是在User/add.html 模板,但是我们可以修改下add模板文件的内容,在头部增加下面的布局标签(记得首先关闭前面的LAYOUT_ON设置,否则可能出现布局循环):

<layout name="layout" />

表示当前模板文件需要使用layout.html 布局模板文件,而布局模板文件的写法和上面第一种方式是一样的。当渲染User/add.html 模板文件的时候,如果读取到layout标签,则会把当前模板的解析内容替换到layout布局模板的{__CONTENT__} 特定字符串。
一个模板文件中只能使用一个布局模板,如果模板文件中没有使用任何layout标签则表示当前模板不使用任何布局。
如果需要使用其他的布局模板,可以改变layout的name属性,例如:

<layout name="newlayout" />

还可以在layout标签里面指定要替换的特定字符串:

<layout name="Layout/newlayout"  replace="{__REPLACE__}" />

由于所有include标签引入的文件都支持layout标签,所以,我们可以借助layout标签和include标签相结合的方式实现布局模板的嵌套。例如,上面的例子

<include file="Public:header" />
 <div id="main" class="main" >
 {__CONTENT__}
 </div>
 <include file="Public:footer" />

在引入的header和footer模板文件中也可以添加layout标签,例如header模板文件的开头添加如下标签:

<layout name="menu" />

这样就实现了在头部模板中引用了menu布局模板。
也可以采用两种布局方式的结合,可以实现更加复杂的模板布局以及嵌套功能。

关键词:布局  模板  ThinkPHP 

收藏 推荐 打印 | 录入:blue1000 | 阅读:
本文评论   查看全部评论 (2)
表情: 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事/刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
第 2 楼
* 匿名 发表于 2017/1/16 0:15:22
http://www.blue1000.com/bkhtml/c117/2006-01/42258.htm 初中跑步作文:http://www.135995.com/details/zs879.html 心灵的春天作文:http://www.135995.com/details/zs1427.html
第 1 楼
* 匿名 发表于 2016/12/24 17:38:33
http://www.blue1000.com/bkhtml/c117/2006-01/42258.htm 企业团支部工作总结 http://www.135995.com/show/196.html 学校团支部工作总结 http://www.135995.com/show/195.html