thinkphp
模板继承
模板继承是一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该是在模板布局的上层。模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义的相关的区块(block) ,然后继承(extend)该基础模块的子模板中就可以对基础模板中定义的区块进行重载。
因此,模板继承的优势其实是设计基础模块中的区块{block}和子模块中替换这些区块。
每个区块由{block}{/block}标签组成。下面就是基础模板中的一个典型的区块设计。
{
block name="title"}<title>网站标题</title>{
/block}
block标签必须指定name属性来标识当前区块的名称,这个标识在当前模板中应该是唯一的,block标签中可以包含任何模板内容,包括其他标签和变量。
{
block name="title"}<title>{
$web_title}</title>{
/block}
一个模板中可以定义任意多个名称标识不重复的区块,例如我们在view视图目录下面定义了一个base .html基础模板:
<html>
<head>
<meta charset="utf-8">
<title>模板继承的演示</title>
</head>
<body>
{(block name="head"}这是头部{/block}
{block name="footer"}这是底部{/block}
</body>
</html>
然后我们在子模板(其实是当前操作的入口模板)中使用继承:
练习
{
extend name="base" /}
{
block name="head"}这里是子模板里面的区块,用来替换基础模板里面的内容的。{
/block}
{
block name="footer"}这里是子模板里面的底部内容。{
/block}
上例中,我们可以看到在子模板中使用了extend标签来继承base模板。
在子模板中,可以对基础模板中的区块进行重载定义,如果没有重新定义的话,则表示沿用基础模板中的区块定义,如果定义了一个空的区块,则表示删除基础模板中的该区块内容。
{ block}这个标签,当区块中有这个标记时,就不只是直接重载这个区块,他表示引用所继承模板对应区块的内容到这个位置,最终这个区块是合并后的内容。
练习
在当前子模板中,只能定义区块而不能定义其他的模板内容,否则将会直接忽略,并且只能定义基础模板中已经定义的区块。
模板可以多级继承,比如B维承了A,而C又继承了B,最终C中的区块会覆盖B和A中的同名区块,但C和B中的区块必须是A中已定义过的。
子模板中的区块定义顺序是随意的,模板继承的用法关键在于基础模板如何布局和设计规划了,如果结合原来的布局功能,则会更加灵活。
包含文件
在当前模板文件中包含其他的模板文件使用include标签,标签语法:
{
include file='模板文件1,模板文件2,.....'/}
包含的模板文件中不能再使用模板布局或者模板继承。
路径以项目目录/public/路径下为起点
可以直接包含一个模板文件名(包含完整路径),例如:
{
include file=" ../ application/index/view/index/lang.html"/}
包含文件中可以再使用include标签包含别的文件,但注意不要形成A包含A。或者A包含B而B又包含A这样的死循环。
练习
内置标签
变量输出使用普通标签就足够了,但是要完成其他的控制、循环和判断功能,就需要借助模板引擎的标签库功能了,系统内置标签库的所有标签无需引入即可直接使用。
内置标签包括:
标签名 | 作用 |
---|---|
include | 包含外部模板文件(闭合) |
load | 导入资源文件(闭合 包括js css import别名) |
volist | 循环数组数据输出 |
foreach | 数组或对象遍历输出 |
for | For循环数据输出 |
switch | 分支判断输出 |
case | 分支判断输出(必须和switch配套使用) |
default | 默认情况输出(闭合必须和switch配套使用) |
compare | 比较输出(包括eq neq lt gt egt elt heq nheq等别名) |
range | 判断范围输出(包括in not in between not between别名) |
present | 判断是否赋值 |
notpresent | 判断是否尚未赋值 |
empty | 判断数据是否为空 |
notempty | 判断数据是否不为空 |
defined | 判断常量是否定义 |
notdefined | 判断常量是否未定义 |
define | 常量定义(闭合) |
assign | 变量赋值(闭合) |
if | 条件判断输出 |
elseif | 条件判断输出(闭合必须和if标签配套使用) |
else | 条件不成立输出(闭合可用于其他标签) |
php | 使用php代码VOLIST |
循环输出标签
VOLIST标签
volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出。在控制器中首先对模板赋值:
$list =