1.模版定義
默認的模板文件定義規則是:
模板目錄/模板主題/[分組名/]模塊名/操作名+模板后綴
模板目錄默認是項目下面的Tpl, 模板主題默認是default,模板主題功能是為了多模板切換而設計的,如果有多個模板主題的話,可以用TMPL_DEFAULT_THEME 參數設置默認的模板主題名。
在每個模板主題下面,是以項目的模塊名為目錄,然后是每個模塊的具體操作模板文件,例如:
User模塊的add操作 對應的模板文件就應該是:Tpl/default/User/add.html
模板文件的默認后綴的情況是.html,也可以通過TMPL_TEMPLATE_SUFFIX來配置成其他的。
如果項目啟用了模塊分組功能(假設User模塊屬于Home分組),那么默認對應的模板文件可能變成:Tpl/default/Home/User/add.html
2. 模版賦值
要在模板中輸出變量,必須在在Action類中把變量傳遞給模板,視圖類提供了 assign方法對模板變量賦值,無論何種變量類型都統一使用assign賦值。
3.模版調用
模板變量賦值后就需要調用模板文件來輸出相關的變量,模板調用通過display方法來實現,我們在操作方法的最后使用:
$this->display();
根據前面的模板定義規則,因為系統會按照默認規則自動定位模板文件,所以通常display方法無需帶任何參數即可輸出對應的模板,這是模板輸出的最簡單的用法.
一、調用當前模塊的其他操作模板
格式:display('操作名')
例如,假設當前操作是User模塊下面的read操作,我們需要調用User模塊的edit操作模版,使用:
$this->display('edit');
不需要寫模板文件的路徑和后綴。
二、調用其他模塊的操作模板
格式:display('分組名:模塊名:操作名') 其中分組名是可選的
例如,當前是User模塊,我們需要調用Member模塊的read操作模版,使用:
$this->display('Member:read');
三、調用其他主題的操作模板
格式:display('主題名@模塊名:操作名')
例如我們需要 調用Xp主題的User模塊的edit操作模版,使用:
$this->display('Xp@User:edit');
四、直接全路徑輸出模板
格式:display('模板文件名')
例如,我們直接輸出當前的Public目錄下面的menu.html模板文件,使用:
$this->display('./Public/menu.html');
這種方式需要指定模板路徑和后綴,這里的Public目錄是位于當前項目入口文件位置下面,如果是其他的后綴文件,也支持直接輸出
4.模板替換
在進行模板輸出之前,系統還會對渲染的模板結果進行一些模板的特殊字符串替換操作,也就是實現了模板輸出的替換和過濾,這個機制可以使得模板文件的定義更加方便,默認的替換規則有:
./ Public: 會被替換成當前項目的公共模板目錄 通常是 /項目目錄/Tpl/default/Public/
__ PUBLIC __:會被替換成當前網站的公共目錄 通常是 /Public/
__ TMPL __: 會替換成項目的模板目錄 通常是 /項目目錄/Tpl/dfault/
__ ROOT __: 會替換成當前網站的地址(不含域名)
__ APP __: 會替換成當前項目的URL地址 (不含域名)
__ URL __: 會替換成當前模塊的URL地址(不含域名)
__ ACTION __:會替換成當前操作的URL地址 (不含域名)
__ SELF __: 會替換成當前的頁面URL
注意這些特殊的字符串是嚴格區別大小寫的,并且這些特殊字符串的替換規則是可以更改或者增加的,我們只需要在項目配置文件中配置TMPL_PARSE_STRING就可以完成,如果有相同的數組索引,就會更改系統的默認規則:
- TMPL_PARSE_STRING => array(
- '__ PUBLIC __' => '/Common', // 更改默認的__ PUBLIC __ 替換規則
- '__UPLOAD__' => '/Public/Uploads/', // 增加新的上傳路徑替換規則
- )
5. 獲取內容
有些時候我們不想直接輸出模板內容,而是希望對內容再進行一些處理后輸出,就可以使用fetch方法來獲取解析后的模板內容,在Action類里面使用:
$content = $this->fetch();
fetch的參數用法和Display方法基本一致,
6. 靜態生成
ThinkPHP提供了靈活的靜態文件生成功能,可以在輸出模板的同時生成需要的靜態文件,以供調用.
在Action中使用buildHtml方法即可創建靜態文件,buildHtml方法的第一個參數就要生成的靜態文件名,后面的參數和display方法一致,內部其實是調用了前面提到的fetch方法獲取模板輸出然后創建靜態文件,用法如下:
$this->buildHtml('靜態文件', '靜態路徑','模板文件');
靜態路徑如果留空的話 默認保存在HTML_PATH(默認的HTML_PATH路徑位于項目目錄下面的Html目錄,如果沒有的話手動創建)定義的路徑下面,靜態文件可以隨意設置,也可以包括路徑,如果不存在的路徑系統會自動創建
7. 模板引擎
系統支持原生的PHP模板,而且本身內置了一個基于XML的高效的編譯型模板引擎,無論在功能還是性能方面都優秀過Smarty,系統默認使用的模板引擎是內置模板引擎,關于這個模板引擎的標簽詳細使用可以參考模板指南部分。
內置的模板引擎也可以直接支持在模板文件中采用PHP原生代碼和模板標簽的混合使用,如果需要完全使用PHP本身作為模板引擎,可以配置:
'TMPL_ENGINE_TYPE' => 'PHP'
可以達到最佳的效率
8. 使用第三方模板引擎
系統支持模板引擎的擴展機制,并且官方提供了包括Smarty、EaseTemplate、TemplateLite和Smart在內的第三方模板引擎擴展。我們以Smarty模板引擎為例,來說明下如何使用第三方模板引擎。
首先,需要下載官方的模板引擎擴展,并放到系統目錄的LibThinkUtilTemplate目錄下面,然后,下載最新的Smarty模板引擎文件放到系統目錄的Vendor第三方類庫目錄。
剩下的,我們要做的只是簡單的配置下模板引擎名稱即可,例如在項目配置文件里面設置:'TMPL_ENGINE_TYPE' => 'Smarty'
區別就在于display方法直接輸出模板文件渲染后的內容,而fetch方法是返回模板文件渲染后的內容。如何對返回的結果content進行處理,完全由開發人員自行決定了。這是模板替換的另外一種高級方式,比較靈活,而且不需要通過配置的方式。
注意,fetch方法仍然會執行上面的模板替換操作。
9.布局模版
<!-- layout::模板文件規則::緩存時間(秒) -->
<!-- layout::Public:header::60 -->
10.系統模板
系統有一些內置的模板文件用于異常頁面和頁面Trace功能的輸出,你可以定制這些模板頁面,滿足自己的需要。默認的系統模板主要有:
頁面Trace模板:默認位于系統目錄的Tpl/PageTrace.tpl.php 是一個php文件,可更改TMPL_TRACE_FILE進行配置.
異常模板:默認位于系統目錄的Tpl/ThinkException.tpl.php,可以更改TMPL_EXCEPTION_FILE進行配置.
|
新聞熱點
疑難解答
圖片精選