smarty學習心得
smarty是一個後端架構,主要作用是将後端的資料能夠直接快速的放到前端做好的頁面中。(比如講後端的一組數組資料發送給前端,前端就可以通過添加一些标簽使之以表格的形式顯示出來。)smarty還有一些額外的功能就是循環函數、變量調節器、緩存。下面逐個說明:
- 安裝與添加
網上很多文章都有說這個,粘一個網址備用。
- 從後端想前端添加資料(變量、數組)
我們可以看到,smarty的程式部分實際就是符合php語言規範的一組代碼,我們依次來解釋一下:
1:語句:
包含的部分為程式篇頭注釋。主要的内容應該為對程式的作用,版權與作者及編寫時間做一個簡單的介紹,這在smarty中不是必需的,但從程式的風格來講,這是一個好的風格。
2:include_once語句:
它将安裝到網站的smarty檔案包含到目前檔案中,注意包含的路徑一定要寫正确。
3:$smarty = new Smarty():
這一句建立一個Smarty對象$smarty,簡單的一個對象的執行個體化。
4:$smarty->templates(""):
這一句指明$smarty對象使用tpl模闆時的路徑,它是一個目錄,在沒有這一句時,Smarty預設的模闆路徑為目前目錄的templates目錄,實際在寫程式時,我們要将這一句寫明,這也是一種好的程式風格。
5:$smarty->templates_c(""):
這一句指明$smarty對象進行編譯時的目錄。在模闆設計篇我們已經知道Smarty是一種編譯型模闆語言,而這個目錄,就是它編譯模闆的目錄,要注意,如果站點位于linux伺服器上,請確定
teamplates_c裡定義的這個目錄具有可寫可讀權限,預設情況下它的編譯目錄是目前目錄下的templates_c,出于同樣的理由我們将其明确的寫出來。
6:$smarty->left_delimiter與$smarty->right_delimiter:
指明在查找模闆變量時的左右分割符。預設情況下為"{"與"}",但在實際中因為我們要在模闆中使用<script>,Script中的函數定義難免會使用{},雖然它有自己的解決辦法,但習慣上我們将它重新定義
為"{#"與"#}"或是"<!--{"與"}-->"或其它标志符,注意,如果在這裡定義了左右分割符後,在模闆檔案中相應的要使每一個變量使用與定義相同的符号,例如在這裡指定為"<{"與"}>",htm模闆中也要
相應的将{$name}變成<{$name}>,這樣程式才可以正确的找到模闆變量。
7:$smarty->cache("./cache"):
告訴Smarty輸出的模闆檔案緩存的位置。上一篇我們知道Smarty最大的優點在于它可以緩存,這裡就是設定緩存的目錄。預設情況下為目前目錄下的cache目錄,與templates_c目錄相當,在linux系統中
我們要確定它的可讀可寫性。
8: $smarty->cache_lifetime = 60 * 60 * 24:
這裡将以秒為機關進行計算緩存有效的時間。第一次緩存時間到期時當Smarty的caching變量設定為true時緩存将被重建。當它的取值為-1時表示建立起的緩存從不過期,為0時表示在程式每次執行時緩
存總是被重建立立。上面的設定表示将cache_lifetime設定為一天。
9: $smarty->caching = 1:
這個屬性告訴Smarty是否要進行緩存以及緩存的方式。它可以取3個值,0:Smarty預設值,表示不對模闆進行緩存;1:表示Smarty将使用目前定義的cache_lifetime來決定是否結束cache;2:表示
Smarty将使用在cache被建立時使用cache_lifetime這個值。習慣上使用true與false來表示是否進行緩存。
10:$smarty->assign("name", "zaocha"):
該數的原型為assign(string varname, mixed var),varname為模闆中使用的模闆變量,var指出要将模闆變量替換的變量名;其第二種原形為assign(mixed var),我們要在後面的例子詳細的講解這個成員函數的使用方法,assign是Smarty的核心函數之一,所有對模闆變量的替換都要使用它。
11. $smarty->display("index.tpl"):
該函數原形為display(string varname),作用為顯示一個模闆。簡單的講,它将分析處理過的模闆顯示出來,這裡的模闆檔案不用加路徑,隻要使用一個檔案名就可以了,它路徑我們已經在$smarty->templates(string path)中定義過了。
程式執行完後我們可以打開目前目錄下的templates_c與cache目錄,就會發現在下邊多出一些%%的目錄,這些目錄就是Smarty的編譯與緩存目錄,它由程式自動生成,不要直接對這些生成的檔案進行修改。
smarty.php //每次都要用到,是以單獨寫出,以後使用時直接include進來,主要路徑 <?php
include ('E:/APMServ5.2.6/ www/htdocs/mysmarty/libs/Smarty.class.php ') ;//引入檔案類,使用絕對路徑
$smarty=new Smarty; //執行個體化
$smarty->template_dir="E:/APMServ5.2.6/ www/htdocs/mysmarty/templates "; //指定模版存放目錄
$smarty->compile_dir="E:/APMServ5.2.6/ www/htdocs/mysmarty/templates_c "; //指定編譯檔案存放目錄
$smarty->config_dir="E:/APMServ5.2.6/ www/htdocs/mysmarty/config "; //指定配置檔案存放目錄
$smarty->cache_dir="E:/APMServ5.2.6/ www/htdocs/mysmarty/cache "; //指定緩存存放目錄
$smarty->caching=false; //關閉緩存(設定為true表示啟用緩存)
$smarty->left_delimiter="{"; //指定左标簽
$smarty->right_delimiter="}"; //指定右标簽
//此smarty.php用來執行個體化Smarty對象,并初始化smarty設定,
//使用smarty時需要用将此檔案include進來
//include時注意路徑, ./smarty.php代表目前檔案夾下, ../代表父檔案夾
?> 前端先寫一個example.tpl(或者.html格式)檔案放到 templates檔案夾中作為前端的一個載體. example.tpl <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>測試smarty</title> </head> <body> <h1 align="center">{$test}</br></h1> <table align="center"> <tr> <th>新聞編号:</th><th>新聞标題:</th> </tr> {section name=loop loop=$newsArray} <tr> <td>{$newsArray[loop].newsID} </td> <td>{$newsArray[loop].newsTitle} </td> </tr> {sectionelse} 對不起,沒有任何新聞輸入! {/section} </table> </body> </html>
後端向前端發送資料 <? include('./smarty.php'); $array[] = array("newsID"=>1, "newsTitle"=>"第1條新聞"); $array[] = array("newsID"=>2, "newsTitle"=>"第2條新聞"); $array[] = array("newsID"=>3, "newsTitle"=>"第3條新聞"); $array[] = array("newsID"=>4, "newsTitle"=>"第4條新聞"); $array[] = array("newsID"=>5, "newsTitle"=>"第5條新聞"); $array[] = array("newsID"=>6, "newsTitle"=>"第6條新聞"); $test = "這是一個測試!"; $smarty->assign("test",$test); $smarty->assign("newsArray", $array); //編譯并顯示位于./templates下的index.tpl模闆 $smarty->display("example.tpl"); ?>
緻謝:
- 從後端想前端添加資料中1-11引用http://www.chinaz.com/program/2010/0224/107006.shtml