當前位置:才華齋>計算機>php語言>

利用PHP模板引擎smarty

php語言 閱讀(8.44K)

PHP模板引擎smarty詳細介紹,本文講解了什麼是smarty、smarty優點、不適合使用smarty的地方、smarty目錄結構及版本,需要的朋友可以參考下。

利用PHP模板引擎smarty

  一、什麼是smarty?

smarty是一個使用PHP寫出來的模板PHP模板引擎,它提供了邏輯與外在內容的分離,簡單的講,

目的就是要使用PHP程式設計師同美工分離,使用的程式設計師改變程式的邏輯內容不會影響到美工的頁面設計,美工重新修改頁面不會影響到程式的程式邏輯,這在多人合作的專案中顯的尤為重要。

  二、smarty優點:

1. 速度:採用smarty編寫的程式可以獲得最大速度的提高,這一點是相對於其它的模板引擎技術而言的。

2. 編譯型:採用smarty編寫的程式在執行時要編譯成一個非模板技術的PHP檔案,這個檔案採用了PHP與HTML混合的方式,在下一次訪問模板時將WEB請求直接轉換到這個檔案中,而不再進行模板重新編譯(在源程式沒有改動的情況下)

3. 快取技術:smarty選用的一種快取技術,它可以將使用者最終看到的HTML檔案快取成一個靜態的HTML頁,當設定smarty的cache屬性為true時,在smarty設定的cachetime期內將使用者的WEB請求直接轉換到這個靜態的HTML檔案中來,這相當於呼叫一個靜態的HTML檔案。

4. 外掛技術:smarty可以自定義外掛。外掛實際就是一些自定義的函式。

5. 模板中可以使用if/elseif/else/endif。在模板檔案使用判斷語句可以非常方便的對模板進行格式重排。

  三、不適合使用smarty的地方:

1. 需要實時更新的內容。例如像股票顯示,它需要經常對資料進行更新,這型別的程式使用smarty會使模板處理速度變慢。

2. 小專案。小專案因為專案簡單而美工與程式設計師兼於一人的專案,使用smarty會喪失php開發迅速的優點。

  四、smarty目錄結構及版本

開啟smarty的官方的網站,。下載Smarty 3.1.12。有和zip分別適用於linux和windows版本。

下載好後Smarty-stable-3.1.12解壓縮會得到一個 Smarty-3.1.12 資料夾,裡面有兩個主要資料夾demo和libs

demo資料夾為示例文件夾,裡面包含預設資料夾結構,是我們要進行編寫程式程式碼的主要資料夾。demo裡資料夾的名稱都是smarty預設的目錄結構名稱,可以通過改smarty對應屬性值,再把資料夾名改成我們想要的名稱。

libs為smarty程式碼原始檔夾,一般不動。

/libs/ #主檔案

/libs/sysplugins/ #內部plugin

/libs /plugins/ #外部plugin,可自由擴充

/demo/cahce/ #放置快取檔案

/demo/configs / #放置可以載入的配置檔案

/demo/templates/ #放置模板檔案

/demo/templates_c/ #放置對模板編譯後的檔案

可以把解壓得到的 Smarty-3.1.12 資料夾名改成我們想要的專案名,demo也可以改成我們想要的具體存放編碼的資料夾的名稱

  2、除錯Smarty-3.1.12

建立自己的檔案,在demo資料夾下建立。

在templates目錄中建立模板

(幾乎可以是任何文字檔案的副檔名,常用的是tpl,php,html,不建議使用後兩者,因為可以從瀏覽器直接訪問而不安全。可以對apache的進行設定,禁止直接訪問檔案。或者將templats目錄放在網站文件樹之外。)

*/

//程式碼

require('../libs/');

$smarty = new Smarty;

//在呼叫的模板裡可以通過{$name}來輸出name的值zhang,{}為這裡的smarty分界符

$smarty->assign('name','zhang');

//呼叫模板tpl檔案裡不能執行PHP語句塊

$smarty->display('templates/');

/*

頁面內容

你好, {$name}

*/

/*

Smarty編譯時的處理過程是源php檔案->模板檔案(可能呼叫多個或多次)->源php檔案。。。

也就是說不影響原php檔案的其他處理和輸出。所以smarty模板檔案可以是完整的html,也可以是其中一部分。

smarty處理過程

smarty將php原始檔,首先編譯成中間檔案(也是php),如果啟用快取,再根據編譯檔案生成快取檔案(也是php),需要快取的部分全部是硬編碼。

之後的每次訪問都會訪問編譯檔案(如果編譯檔案已經存在),一次編譯多次呼叫(可以是單檔案的多次,也可以是多檔案的多次),如果啟用快取且有快取檔案而且沒有過期,則直接訪問快取檔案,跳過編譯檔案。

編譯檔案一經生成,就不會被自動更新,除非模板檔案或者配置檔案更改。源php檔案修改是不會引發重新編譯的。一旦編譯檔案重新生成,快取檔案也必然重新生成。

*/

//Smarty允許有兩種特殊的編譯設定存在:

//1、 任何時候都不自動重新編譯(上線階段):只有沒有該檔案的編譯檔案時才生成,模板檔案或者配置檔案的更改,不會引發重新編譯。

$smarty->setCompile_check(false);//預設為true,false表示任何時候都不在檔案發生變更的情況下生成編譯檔案,除了無編譯檔案。

$smarty->getCompile_check();//獲得當前編譯檢查的設定

//2、任何時候都重新編譯(除錯階段):任何時候都重新編譯。

$smarty->setForce_compile(true);//預設為false,true表示每次都重新編譯(啟用快取的話,每次都重新快取)

$smarty->getForce_compile();//獲得當前強制編譯的設定

//開啟快取

$smarty->setCaching(true);

$smarty->getCaching();//獲取當前快取狀態,預設是false關閉的

$smarty->setcache_lifetime(60);//設定快取時間單位秒

//{*模版檔案*}

//{nocache}

//{$name}

//{/nocache}

//{*如果開啟快取的話放在nocache標籤內的.變數不會快取,每次讀取PHP原始檔的值*}

/*

smarty分界符

在模板檔案中,區分普通html程式碼和smarty程式碼靠的是分界符。預設是 {} ,但可能會與js和css相沖突。可以進行變更。

在3.0中模板標籤將不支援空格,如{ $abc }在Smarty2中可以識別的,但是3.0裡頭就不行了,必須這樣{$abc},這樣是為了能夠更好的支援javascript和css。

*/

$smarty->left_delimiter = "{"; //左分界符,2.0屬性,3.0沿用

$smarty->right_delimiter = "}";

/*