天天看點

smarty學習心得

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. 從後端想前端添加資料中1-11引用http://www.chinaz.com/program/2010/0224/107006.shtml

繼續閱讀