1. 程式人生 > >ThinkPHP框架使用Smarty模板引擎

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模板

一,去掉了系統自帶的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
具體程式碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
    protected function display($templateFile='',$cache_id = null,$compile_id=null,$charset='',$contentType='text/html')
    {
        $this->view->display($templateFile,$cache_id,$compile_id,$charset,$contentType);
    }

 
    protected function fetch($templateFile='',$cache_id = null,$compile_id=null,$charset='',$contentType='text/html')
    {
        return $this->view->fetch($templateFile,$cache_id ,$compile_id,$charset,$contentType);
    }

  //判斷模板檔案是否已經被快取
   //如果不是檢查當前模組的操作模板,引數請用 module:action  方式
    protected function is_cached($template, $cache_id = null, $compile_id = null)
    {
        if(!file_exists_case($template))
           // 自動定位模板檔案
            $template   = $this->view->parseTemplateFile($template);
        $template=substr($template,strlen(TMPL_PATH));
        return $this->view->smarty->is_cached($template, $cache_id, $compile_id);
    }
    
    //清除單一模板檔案的快取
    //如果不是清除當前模組的操作模板,引數請用 module:action  方式
    protected function clear_cache($template_name, $cache_id=null, $compile_id=null, $exp_time=null)
    {
            if(!file_exists_case($template_name))
           // 自動定位模板檔案
            $template_name  = $this->view->parseTemplateFile($template_name);
        $template_name=

相關推薦

ThinkPHP框架使用Smarty模板引擎

最近公司使用ThinkPHP框架,所以比較關注,想到之前公司使用的框架用的模板引擎是 Smarty,而且用的還挺順手的。 轉到使用ThinkPHP自帶的模板引擎還有點不習慣,所以在想換成Smarty模板引擎,網上看了一下,結果還是比較簡單。 以此記錄一下 首先ThinkPHP

THINKPHP 框架模板技術

bsp index.php tom length isp 自定義 peter 引擎 運算 //echo C(‘name‘); App/Action/IndexAction.class.php文件夾下的 URL模式 //輸出URL模式//echo C(‘URL_MODEL‘)

Smarty模板引擎

緩存技術 程序 span php程序 定義 變化 引擎 緩存 客戶端請求 Smarty模板引擎是一個完全由PHP程序寫出來的模板引擎,優點如下: 速度:Smarty模板引擎相比其他的模板引擎速度更快 繼承技術:在Smarty裏面可以定義一個父模板,讓子模板來繼承父模板 緩存

Smarty模板引擎模板檔案.tpl和.html的區別

在WEB開發中,PHP作為業務邏輯,HTML作為表現邏輯.但是在Smarty一些文件中可以看到模板檔案的拓展名是.tpl,而不是.html,其實所謂的.tpl就是.html. 模版檔案可以用任意的副檔名,如果是.html副檔名,渲染模板為$smarty->display('xx.html');&nbs

php smarty模板引擎的6個小技巧

轉載地址:http://www.jb51.net/article/49318.htm 下面本文將以具體的例子一一分析: capture標籤 capture的中文意思是抓取,它的作用是抓取模板輸出的資料,當我們需要它的時候,呼叫它,以得到抓取資料的目的。如下例子:

smarty模板引擎工作原理

1、模板引擎是什麼 展示給使用者的頁面由資料及承載資料的標籤組成,標籤就是html,而資料就是由php處理的變數,這樣就涉及到了前端和後端的互動,模板引擎就是將php程式碼與html程式碼分離的技術。 smarty是最常用的php模板引擎,由zend公司使用php編寫的一套模板引擎。

PHP模板引擎Smarty(三)深入淺出之Smarty模板引擎工作機制(二)

轉自:http://www.cnblogs.com/hongfei/archive/2011/12/10/Smarty-two.html 接下來根據以下的Smarty模板引擎原理流程圖開發一個自己的模板引擎用於學習,以便加深理解。 Smarty模板引擎的原理,其實是

web中程式語言、框架模板引擎概念梳理

一朝入程式設計,一天三個坑(已經很客氣了)。 軟體工程的複雜性,在於需求的不確定、問題的虛擬化無實體、方法無固定規律可循(大學軟工課所學)。為了降低程式設計的複雜度,使軟體工程儘可能可控,各路大牛創語言、構框架、建模板,努力營造良好的程式設計生態。 兩年前,作為新一代初入

PHP模板引擎Smarty(二)深入淺出之Smarty模板引擎工作機制(一)

深入淺出Smarty模板引擎工作機制,我們將對比使用smarty模板引擎和沒使用smarty模板引擎的兩種開發方式的區別,並動手開發一個自己的模板引擎,以便加深對smarty模板引擎工作機制的理解。 在沒有使用Smarty模板引擎的情況下,我們都是將PHP程式和網頁模

cms概述 。比較shopex和ecshop區別 。smarty模板引擎的入門

cms概述   為了找到一個合適的cms網站系統,我花了一番功夫搜尋了多種cms,包括我用過的和沒用過的,知道的和不知道的,當然,必須是開源的、免費的、生成靜態頁面的.到各自的官方網站,查看了有關資料,下載了最新版試用,對比各自優缺點。 風訊網站內容管理系統(Foosun

《開源框架那點事兒25》:對框架模板引擎實現方式的改造實錄

port 內嵌 代碼調試 iter put 文件路徑 children nts fault 點滴悟透設計思想,Tiny模板引擎優化實錄! 增加框架設計興趣小組:http://bbs.tinygroup.org/group-113-1.html Tiny模板引擎的實

express框架結合ejs模板引擎使用

.cn ejs func get src ren 項目 maximum png 我們在項目裏建立一個views文件夾(必須),然後在裏面建立一個模板文件news.ejs: <!doctype html> <html lang="en"> <h

express框架結合jade模板引擎使用

lis end class sid 引擎 java highlight 框架 script 在views文件夾裏新建一個jade.jade文件作為模板: html head title 哈哈 body #box

微擎框架下拉分頁(使用js模板引擎

contain don obi 方式 get onf info 循環 time 1.需要分頁的頁面,引入一下文件 <script language="javascript" src="\addons\{$_GPC[‘m‘]}\template\mobile\js/re

php模板原理PHP模板引擎smarty模板原理淺談

ret 數據庫 數據 編譯 php 清晰 urn return 情況下  mvc是開發中的一個偉大的思想,使得開發代碼有了更加清晰的層次,讓代碼分為了三層各施其職、無論是對代碼的編寫以及後期的閱讀和維護,都提供了很大的便利。   我們在php開發中,視圖層view是不允許

PHP模板引擎Smarty定義

就是 視圖 混合 html 處理 php應用 編程 必須 內容 PHP模板引擎:PHP是一種HTML內嵌式的在服務器端執行的腳本語言。初始的開發模板就是混合層的數據編程,雖然通過MVC的設計模式可以實現將程序的應用邏輯與網頁的呈現邏輯強制分離,但也只是將程序的輸入,處理,輸

模板引擎Smarty(部分內容採集網路)

1.Smarty是一種模板引擎技術 模板引擎是什麼? 在使用者頁面展示的一個頁面,由兩方面,資料及承載資料的標籤。標籤就是html,而資料是由php處理。這樣就造成一個文件牽涉了兩種工作人員(前端與後臺)。模板引擎技術就是將,php程式碼與html程式碼分離。 Smarty是zend

template-web.js模板引擎框架

web前端模板引擎框架之一的template-web.js模板引擎框架,用於引入多條相同的資料。 步驟: 1.匯入模板檔案,這裡是用的是art_template 2.寫好模板,是待作為複製的物件,寫在script中,type為text/hml,這樣不會再頁面中解析。 3.引入需要使用模板的資

【web名詞】模板引擎,js框架, js模組載入器區別

供學習記錄,可能有錯誤。 模板引擎 controller請求,後端怎麼傳資料,前端怎麼獲取。 比如:japidview, rythm。 以japidview為例。後端controller繼承JapidController,render資料,前端@args獲取,

thymeleaf模板引擎和shiro框架的整合

shiro許可權框架,前端驗證是為jsp設計的,其中的tag只能用於jsp系列的模板引擎。最近專案使用了thymeleaf作為前端模板引擎,使用HTML檔案,沒法引入shiro的tag lib,此時如果要使用shiro的話,可以引入 thymeleaf-extras-shi