>[info] `ThinkTemplate`是一個基于XML的性能卓越的編譯型模板引擎,支持兩種類型的模板標簽,使用了動態編譯和緩存技術,而且支持自定義標簽庫,一直作為`ThinkPHP`的內置模板引擎,現已經支持獨立使用。
## 主要特性:
* 支持模板標簽定界符定義;
* 支持直接使用PHP代碼書寫;
* 支持文件包含;
* 支持多級標簽嵌套;
* 支持布局模板功能;
* 一次編譯多次運行,編譯和運行效率非常高;
* 模板文件和布局模板更新,自動更新模板緩存;
* 系統變量無需賦值直接輸出;
* 支持多維數組的快速輸出;
* 支持模板變量的默認值;
* 支持頁面代碼去除Html空白;
* 支持變量組合調節器和格式化功能;
* 允許定義模板禁用函數和禁用PHP語法;
* 通過標簽庫方式擴展。
每個模板文件在執行過程中都會生成一個編譯后的緩存文件,其實就是一個可以運行的PHP文件。
>[info] 由于編譯型模板引擎的特性,模板緩存不能關閉,就算關閉緩存也會在每次渲染的時候重新生成模板緩存。
模板引擎支持普通標簽和XML標簽方式兩種標簽定義,分別用于不同的目的:
| 標簽類型 | 描述 |
| --- | --- |
| 普通標簽 | 主要用于輸出變量、函數過濾和做一些基本的運算操作 |
| XML標簽 | 也稱為標簽庫標簽,主要完成一些邏輯判斷、控制和循環輸出,并且可擴展 |
這種方式的結合保證了模板引擎的簡潔和強大的有效融合。
模板文件可以同時包含普通標簽和標簽庫標簽,標簽的定界符都可以重新配置。
## 普通標簽
普通標簽用于變量輸出和模板注釋,普通模板標簽默認以`{` 和 `}` 作為開始和結束標識,并且在開始標記緊跟標簽的定義,如果之間有空格或者換行則被視為非模板標簽直接輸出。 例如:`{$name}` 、`{$vo.name}` 、`{$vo['name']|strtoupper}` 都屬于正確的標簽,而`{ $name}` 、`{ $vo.name}`則不屬于。
要更改普通標簽的起始標簽和結束標簽,可以更改`template.php`中的配置參數:
~~~
// 普通標簽開始標記
'tpl_begin' => '<{',
// 普通標簽結束標記
'tpl_end' => '}>'
~~~
普通標簽的定界符就被修改了,原來的 `{$name}` 和 `{$vo.name}` 必須使用 `<{$name}>` 和 `<{$vo.name}>` 才能生效了。
>[danger] 本手冊后面的內容均使用默認的標簽定界符配置進行說明
## 標簽庫標簽
標簽庫標簽可以用于模板變量輸出、文件包含、條件控制、循環輸出等功能,而且完全可以自己擴展功能。
5.1版本的標簽庫默認定界符和普通標簽一樣使用`{`和`}`,是為了便于在編輯器里面編輯不至于報錯,當然,你仍然可以更改標簽庫標簽的起始和結束標簽,修改下面的配置參數:
~~~
//標簽庫標簽開始標簽
'taglib_begin' => '<',
//標簽庫標簽結束標記
'taglib_end' => '>',
~~~
原來的
~~~html
{eq name="name" value="value"}
相等
{else/}
不相等
{/eq}
~~~
就需要改成
~~~html
<eq name="name" value="value">
相等
<else/>
不相等
</eq>
~~~