变量之间的相关关系 ThinkTemplate模板引擎的设计和使用方法(3)
基于某些兼容性考虑,通常在模板文件中可以直接插入php代码,用来完成模板标签所无法完成或者比较困难的功能。这种方式与标签的互补可以满足绝大多数的模板需要。事实上,我在用其他模板引擎的时候,都会经常在模板文件中直接添加一些个别的php代码来辅助。需要注意的是并不是所有的模板引擎都支持在模板中直接写php代码。
扩展性
任何一个模板引擎的功能都不是为你量身定制的,具有一个良好的可扩展机制也是模板引擎的另外一个考量,Smarty采用的是插件方法来实现扩展,ThinkTemplate由于采用了标签库技术,比Smarty提供了更为强大的定制功能,和Java的TagLibs一样可以支持自定义标签库和标签,每个XML标签都有独立的解析方法,所以可以根据标签库的定义规则来增加和修改标签解析规则。在ThinkTemplate中标签库的体现是采用XML命名空间的方式,
例如:
每个命名空间都有一个对应的标签库XML定义文件,并且还包含有一个用于解析该标签库的类文件。系统默认对cx标签库进行支持,所以在定义cx标签库的标签时候,可以省略XML的命名空间前缀。当系统中存在很多的标签库的时候,每次编译都会加载所有的标签库解析文件,这样会造成一种浪费,因为很多情况,我们可能只是使用其中的一个或者二个标签库。所以,我们还必须在模板页面实现标签库引入功能,来告诉模板引擎当前模板页面需要哪些标签库的支持,从而加载需要的解析类。变量之间的相关关系在ThinkTemplate中,使用tagLib标签来实现这一功能,
例如:,
表示导入html和cx两个标签库的支持。如果没有定义,那么默认只是加载cx标签库。
利用标签库的特性,我们可以非常方便地扩展自己需要的标签,ThinkTemplate正是采用这种机制来内置集成了一些常用的HTML组件标签,
例如:
使用上面的自定义XML标签定义了一个DataGrid组件,省去了复杂的Html代码,在模板第一次执行的时候,模板引擎会把上面的组件标签解析成PHP和Html结合的代码,生成缓存文件。ThinkTemplate中包含的Html标签库中封装了很多有价值的Html组件。
三、标签使用
变量输出
格式:{$varname|function1|function2=arg1,arg2,### }
使用例子:
{$webTitle|md5| strtoupper | substr=0,3}
{$number|number_format=2}
在模板文件中可以使用{$info['name'] }来输出数组变量。
同样,可以使用{$var.key }来输出对象属性变量,并且也支持函数。
系统变量
依然支持函数使用和大小写、空格,以Think.打头,如
{$Think.server.script_name} //输出$_SERVER变量
{$Think.session.session_id|md5} //输出$_SESSION变量
{$Think.get.pageNumber} //输出$_GET变量
{$Think.cookie.name} //输出$_COOKIE变量
系统常量
{$Think.const.__FILE__}
{$Think.const.MODULE_NAME}
或者直接使用
{$Think.__FILE__}
{$Think.MODULE_NAME}
特殊变量
由ThinkPHP系统定义的常量
{$Think.version} //版本
{$Think.now} //现在时间
{$Think.template|basename} //模板页面
动画电影很期待