解密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 数组遍历的差异(array_diff 的实现)
Mar 23 PHP
php字符串分割函数explode的实例代码
Feb 07 PHP
深入php函数file_get_contents超时处理的方法详解
Jun 03 PHP
PHP 安全检测代码片段(分享)
Jul 05 PHP
php支付宝接口用法分析
Jan 04 PHP
php根据生日计算年龄的方法
Jul 13 PHP
php实现json编码的方法
Jul 30 PHP
php封装好的人民币数值转中文大写类
Dec 20 PHP
3种方法轻松处理php开发中emoji表情的问题
Jul 18 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
PHP 图片处理
Sep 16 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
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
Laravel框架数据库CURD操作、连贯操作总结
2014/09/03 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
php上传图片类及用法示例
2016/05/11 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
php显示页码分页类的封装
2017/06/08 PHP
prototype 1.5 &amp; scriptaculous 1.6.1 学习笔记
2006/09/07 Javascript
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
Jquery元素追加和删除的实现方法
2016/05/24 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
Python Pandas 如何shuffle(打乱)数据
2019/07/30 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
python中有关时间日期格式转换问题
2019/12/25 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
英语师范专业毕业生自荐信
2013/09/21 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
详解MindSpore自定义模型损失函数
2021/06/30 Python
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python