解密ThinkPHP3.1.2版本之模板继承


Posted in PHP onJune 19, 2014

模板继承是ThinkPHP3.1.2版本添加的一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层。模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以对基础模板中定义的区块进行重载。

因此,模板继承的优势其实是设计基础模板中的区块(block)和子模板中替换这些区块。
每个区块由<block></block>标签组成,并且不支持block标签的嵌套。
下面就是基础模板中的一个典型的区块设计(用于设计网站标题):

<block name="title"><title>网站标题</title></block>

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

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

你甚至还可以在区块中加载外部文件:

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

一个模板中可以定义任意多个名称标识不重复的区块,例如下面定义了一个base.html基础模板:

<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <block name="title"><title>标题</title></block>
 </head>
 <body>
 <block name="menu">菜单</block>
 <block name="left">左边分栏</block>
 <block name="main">主内容</block>
 <block name="right">右边分栏</block>
 <block name="footer">底部</block>
 </body>
 </html>

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

<extend name="base" />
 <block name="title"><title>{$title}</title></block>
 <block name="menu">
 <a href="/" >首页</a>
 <a href="/info/" >资讯</a>
 <a href="/bbs/" >论坛</a>
 </block>
 <block name="left"></block>
 <block name="content">
 <volist name="list" id="vo">
 <a href="/new/{$vo.id}">{$vo.title}</a><br/>
{$vo.content}
 </volist>
 </block>
 <block name="right">

最新资讯:

<volist name="news" id="new">
 <a href="/new/{$new.id}">{$new.title}</a><br/>
 </volist>
 </block>
 <block name="footer">
@ThinkPHP2012 版权所有
 </block>

可以看到,子模板中使用了extend标签定义需要继承的模板,extend标签的用法和include标签一样,你也可以加载其他模板:

<extend name="Public:base" />

或者使用绝对文件路径加载

<extend name="./Tpl/Public/base.html" />

在当前子模板中,只能定义区块而不能定义其他的模板内容,否则将会直接忽略,并且只能定义基础模板中已经定义的区块。
例如,如果采用下面的定义:

<block name="title"><title>{$title}</title></block>
 <a href="/" >首页</a>
 <a href="/info/" >资讯</a>
 <a href="/bbs/" >论坛</a>

导航部分将是无效的,不会显示在模板中。

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

PHP 相关文章推荐
php下MYSQL limit的优化
Jan 10 PHP
Thinkphp中import的几个用法详细介绍
Jul 02 PHP
linux下安装php的memcached客户端
Aug 03 PHP
PHP冒泡算法详解(递归实现)
Nov 10 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
Feb 03 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
Jun 17 PHP
调试WordPress中定时任务的相关PHP脚本示例
Dec 10 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
Dec 25 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
Oct 13 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
Nov 08 PHP
PHP实现的文件操作类及文件下载功能示例
Dec 24 PHP
php PDO属性设置与操作方法分析
Dec 27 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
Jun 19 #PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
Jun 19 #PHP
php数组合并array_merge()函数使用注意事项
Jun 19 #PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 #PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 #PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
Jun 19 #PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 #PHP
You might like
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
php的4种常见运行方式
2015/03/20 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
jQuery的12招常用技巧分享
2011/08/08 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
jquery比较简洁的软键盘特效实现方法
2015/03/19 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
jQuery插件Timelinr 实现时间轴特效
2015/10/04 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
Angular的自定义指令以及实例
2016/12/26 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
[38:39]KG vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python 域名分析工具实现代码
2009/07/15 Python
寻找网站后台地址的python脚本
2014/09/01 Python
pytorch 固定部分参数训练的方法
2019/08/17 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
HTML5 视频播放(video),JavaScript控制视频的实例代码
2018/10/08 HTML / CSS
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
优秀英语专业毕业生求职信
2013/11/23 职场文书
市三好学生主要事迹
2014/01/28 职场文书
领导干部廉政自律承诺书
2014/05/26 职场文书
会计专业毕业生自荐书
2014/06/25 职场文书
2016大学自主招生推荐信范文
2015/03/23 职场文书
初中物理教学反思
2016/02/19 职场文书