ThinkPHP包含了一个基于
XML和TagLib技术的
模板标签。基本上,新的标签
技术包含了普通模板有的功能,并且有了一些方面的增强和补充,更重要的一点是新的标签库模板技术更加具有扩展性。
新的TagLib标签库具有命名空间功能,ThinkPHP框架内置了两个小型的标签库实现:
CX和Html。
要在模板
页面中使用TagLib标签库功能,需要在开始时候使用taglib 标签导入需要使用的标签,防止以后标签库大量扩展后增加解析工作量,用法如下:
- <tagLib name='cx,html' />
引入标签库后,就可以使用标签库
定义的标签来定义模板了,例如:
//可以使用下面的模板标签定义。
- <cx:vo name='user' property='name' />
- <
cx:volist id='user' name='userList' >- <
cx:vo name='user' property='name' />- </
cx:volist>- <
html:select options='name' selected='value' />
标签库使用的时候忽略大小写,因此下面的方式一样有效:
- <CX:VO NAME='user' property='name' />
实际上,ThinkPHP框架模板
引擎会默认加载CX标签库,所以下面的方式效果相同:
并且,默认加载的CX库可以不使用CX命名空间前缀,也就是说
- <vo name='user' property='name' />//等效于 <cx:vo name='user' property='name' />
CX标签库
CX标签库主要用于输出ThinkPHP框架的
变量、包含
文件和实现一定控制判断。主要有:
- include 包含文件 支持的标签属性有 file
- comment 模板注释 无标签属性
- iterate 迭代因子输出,循环内可以结合write标签
- 支持的标签属性有 id
| name | offset | length | emptywrite 复杂变量输出,包括数组、对象 ,有函数支持- 支持的标签属性有 name
| property | key | format | functionvolist 数据对象列表输出,循环内可以结合vo标签- 支持的标签属性有 id
| name | offset | length | emptyvo 数据对象输出- 支持的标签属性有 name
| property | format | function- var
变量输出 用于普通变量- 支持的标签属性有 name
| format | functionequal 判断是否相同- notequal 判断是否不同
- 支持的标签属性有 name
| property | key | value | functionpresent 判断是否定义- notpresent 判断是否没有定义
- 支持的标签属性有 name
| property | key
Html标签库
Html标签库主要用于实现一些Html标记的动态生成和变量封装,主要有:
- select 动态生成select列表
- checkbox 动态生成checkbox
- radio 动态生成radio
- link 动态加载js或者css文件
- imageLink 带有链接的图片
- imageBtn 图片按钮
- mulitSelect 多选组件
list DataGrid组件
要使用Html标签库,需要添加html命名前缀,如
- <html:link href='/path/to/common.js' />//这是一个复杂的DataGrid组件的标签定义<html:list id='checkList' style='list' name='action' checkbox='true' action='true' datasource='list' show='id:编号|8%,name:名称,title:显示名,status|getStatus:状态|8%' actionlist='edit:编辑,del:删除,forbid|resume:禁用|恢复' />
模板标签的混合使用
现在我们已经知道了ThinkPHP模板引擎的两种标签定义方式,其实,搭配使用两种定义方式能够带来更大的效率。
举个VOLIST标签的例子,我们可以用下面的方式输出一个VoList对象 userList:
- <volist id='user' name='userList' >
- <
vo name='user' property='name' />- <
vo name='user' property='age' />- <
vo name='user' property='email' />- </
volist>
但是,用
- <volist id='user' name='userList' >
- {
$user.name }- {
$user.age }- {
$user.email }- </
volist>
的方式似乎更加简单。
对于不太复杂的变量输出,建议多采用{$var} 方式,因为单纯从易用性方面而言,这种方式最简洁,而且功能也比较完善。
系统默认加载的标签库只是一个很小型的实现,你完全可以自定义标签库。至于如何自定义标签库放到高级篇里面叙述,相信能够使用好系统标签库已经足以应付大部分模板功能。