ThinkPHP框架使用Smarty模板引擎
最近公司使用ThinkPHP框架,所以比較關注,想到之前公司使用的框架用的模板引擎是 Smarty,而且用的還挺順手的。
轉到使用ThinkPHP自帶的模板引擎還有點不習慣,所以在想換成Smarty模板引擎,網上看了一下,結果還是比較簡單。
以此記錄一下
首先ThinkPHP框架裡面要有Smarty擴充套件 位置在 ThinkPHP\Extend\Vendor\Smarty ,如果沒有就去 Smarty官網下一個最新版吧,也推薦使用最新版的。一般完整版的ThinkPHP框架都含有 Smarty擴充套件的。 然後只需修改配置檔案 Conf\config.php
<?php
return array(
//'配置項'=>'配置值'
'TMPL_ENGINE_TYPE' => 'Smarty',
'TMPL_ENGINE_CONFIG' => array(
'caching' => TRUE,
'template_dir' => TMPL_PATH,
'compile_dir' => TEMP_PATH,
'cache_dir' => CACHE_PATH,
'left_delimiter' => '{',
'right_delimiter' => '}',
),
);
?>
Action:
<?php
class IndexAction extends Action {
public function index(){
$data = array(
'asdf' => 1,'dfg' => 2,'asdfrg' => 3,'yhnfd' => 4,'bfws' => 1
);
$this->assign('test',$data);
$this->display();
}
}
html:
{$smarty.now}
<br />
{foreach $test as $key=>$data}
{$key}:{$data}<br />
{/foreach }
最後輸出:
1411459827
asdf:1
dfg:2
asdfrg:3
yhnfd:4
bfws:1
yes,這樣就搞定了,使用Smarty模板就這麼簡單
-------------------------------------------------------------------------------------------------------
讓thinkphp完美支援smarty模板
Published by on 2010-03-11 11:02:28 under PHP Tags:PHP,thinkphp,php框架,smarty,框架,模板 17462 views
一,去掉了系統自帶的think 模板引擎,用功能強大的smarty替代之,基本上可以說是完美支援smarty模板了。
原有的smarty模板介面只能實現基本的功能,比如判斷模板是否已經快取就無能為力,這樣使用無疑大大削減了smarty的功能。
二,去掉了分組功能
三,預設使用php模板
四,支援帶路由的dispatch
五,支援CURD方法、連貫操作、統計查詢等
六,支援語言包、模板主題
七、去掉了大部分擴充套件機制
八、完美支援smarty模板引擎(ThinkPHP\Vendor\Smarty)
預設載入 :
convention.php
defines.php
functions.php
paths.php
runtime.php //生成核心和應用快取用
core.php //include 檔案用
alias.php //include 檔案用
THinkphp/Lib/Think/Core
Log.class.php
Think.class.php
Db.class.php
Model.class.php
App.class.php
View.class.php
Action.class.php
Dispatcher.class.php
ThinkPHP\Lib\Think\Exception\ThinkException.class.php
THinkphp/Lib/Think/Util/
Debug.class.php
Session.class.php
可通過如下配置使用smarty模板引擎:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
/* 模板引擎設定 */ 'TMPL_ENGINE_TYPE' => 'Smarty', 'TMPL_TEMPLATE_SUFFIX' => '.html', // 預設模板檔案字尾 'TMPL_CACHFILE_SUFFIX' => '.php', // 預設模板快取字尾 'TMPL_PARSE_STRING' => array('__UPLOAD__'=>__ROOT__.'/Content/',), // 模板引擎要自動替換的字串,必須是陣列形式。 'TMPL_ENGINE_CONFIG' => array( 'debugging'=>true, // 'error_reporting'=>'', // 'exception_handler'=>array('ExceptionClass','ExceptionMethod'), 'template_dir' => TMPL_PATH, //模板目錄 'compile_dir' =>TEMP_PATH ,//編譯目錄 'cache_dir' =>CACHE_PATH, //快取目錄 'caching' => false, //是否啟用快取 'cache_lifetime' =>60*60*24,//快取時間s 'left_delimiter'=>'<{', 'right_delimiter' =>'}>', ) , 'TMPL_ENGINE_SMARTY_FILTER'=>array( 'output'=>'trimwhitespace', ), |
這裡初定義了smarty的編譯目錄、快取目錄、是否啟用快取、快取時間、以及左定界符和右定界符,還有smarty的filter外掛。(此處的trimwithespace用於過濾輸出的html程式碼的空白。)
由於是開發時期,所以我還開啟了smarty 的debugging(注意,由於修改了左右定界符,所以smarty的debugging模板也要作相應修改)。
關於 thinkphp的檢視類(view)
thinkphp的檢視類(view)是在核心庫檔案Action.class.php中__construct的例項化的,此__construct同時執行_initialize方法。
Action.class.php中的display方法是用於呼叫模板引擎的顯示方法的,此處即為smarty的顯示方法。為了讓ThinkPHP支援Smarty的fetch方法和display方法的cache_id,讓thinkphp裡面呼叫display和fetch就像用smarty時一模一樣,因此必須修改thinkphp
Action.class.php中的:
protected function display
protected function fetch
我還增加了幾個方法(都是smarty裡面的):
protected function is_cached
protected function clear_cache
具體程式碼如下: