内置的模板引擎除了支持普通变量的输出之外,更强大的地方在于标签库功能。
>[info] 标签库类似于Java的Struts中的JSP标签库,每一个标签库是一个独立的标签库文件,标签库中的每一个标签完成某个功能,采用XML标签方式(包括开放标签和闭合标签)。
标签库分为内置和扩展标签库,内置标签库是`Cx`标签库。
## 导入标签库
使用taglib标签导入当前模板中需要使用的标签库,例如:
~~~
{taglib name="html" /}
~~~
> 如果没有定义html标签库的话,则导入无效。
也可以导入多个标签库,使用:
~~~
{taglib name="html,article" /}
~~~
导入标签库后,就可以使用标签库中定义的标签了,假设article标签库中定义了read标签:
~~~
{article:read name="hello" id="data" }
{$data.id}:{$data.title}
{/article:read}
~~~
在上面的标签中,`{article:read}... {/article:read}` 就是闭合标签,起始和结束标签必须成对出现。
如果是 `{article:read name="hello" /}` 就是开放标签。
>[danger] 闭合和开放标签取决于标签库中的定义,一旦定义后就不能混淆使用,否则就会出现错误。
## 内置标签
内置标签库无需导入即可使用,并且不需要加XML中的标签库前缀,ThinkPHP内置的标签库是Cx标签库,所以,Cx标签库中的所有标签,我们可以在模板文件中直接使用,我们可以这样使用:
~~~
{eq name="status" value="1" }
正常
{/eq}
~~~
如果Cx不是内置标签的话,可能就需要这么使用了:
~~~
{cx:eq name="status" value="1" }
正常
{/cx:eq}
~~~
更多的Cx标签库中的标签用法,参考后面的内置标签。
内置标签库可以简化模板中标签的使用,所以,我们还可以把其他的标签库定义为内置标签库(前提是多个标签库没有标签冲突的情况),例如:
~~~
'taglib_build_in' => 'cx,article'
~~~
配置后,上面的标签用法就可以改为:
~~~
{read name="hello" id="data" }
{$data.id}:{$data.title}
{/read}
~~~
## 标签库预加载
标签库预加载是指无需手动在模板文件中导入标签库即可使用标签库中的标签,通常用于某个标签库需要被大多数模板使用的情况。
在应用或者模块的配置文件中添加:
~~~
'taglib_pre_load' => 'article,html'
~~~
设置后,模板文件就不再需要使用
~~~html
{taglib name="html,article" /}
~~~
但是仍然可以在模板中调用:
~~~html
{article:read name="hello" id="data" }
{$data.id}:{$data.title}
{/article:read}
~~~