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 | empty
write 复杂变量输出,包括数组、对象 ,有函数支持- 支持的标签属性有 name | property | key | format | function
volist 数据对象列表输出,循环内可以结合vo标签- 支持的标签属性有 id | name | offset | length | empty
vo 数据对象输出- 支持的标签属性有 name | property | format | function
- var 变量输出用于普通变量
- 支持的标签属性有 name | format | function
equal 判断是否相同- notequal 判断是否不同
- 支持的标签属性有 name | property | key | value | function
present 判断是否定义- 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} 方式,因为单纯从易用性方面而言,这种方式最简洁,而且功能也比较完善。
系统默认加载的标签库只是一个很小型的实现,你完全可以自定义标签库。至于如何自定义标签库放到高级篇里面叙述,相信能够使用好系统标签库已经足以应付大部分模板功能。
|