samrty學習快速上手教程+例項

y0umer發表於2011-03-23

smarty

 

 

 

配置:

<?php

/**

 *

 * @version $Id: index.php

 * @package 

 * @author www.php100.com

 * @action 顯示例項程式

*/

include_once(“./Smarty/Smarty.class.php”); //包含smarty類檔案

 

$smarty = new Smarty(); //建立smarty例項物件$smarty

$smarty->templates(“./templates”); //設定模板目錄

$smarty->templates_c(“./templates_c”); //設定編譯目錄

$smarty->cache(“./cache”);       //快取目錄

$smarty->cache_lifetime = 0;     //快取時間

$smarty->caching = true;         //快取方式

 

$smarty->left_delimiter = “{#”;

$smarty->right_delimiter = “#}”;

$smarty->assign(“name”, “zaocha”); //進行模板變數替換

$smarty->display(“index.htm”);     //編譯並顯示位於./templates下的index.htm模板

?>

 

 

二:解釋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程式中的一些常用的基本元素介紹了一下,在後邊的例子中你可以看到將它們將被多次的使用。

 

語法:

 

模板呼叫,index.php:

smarty->assign(“模板變數”, “值(陣列/變數)”);

$smarty->display(“模板名稱”);  

例句:

 

$smarty->assign(“name”, “PHP100中文站”); //進行模板變數替換,替換後模板變數就是$name,切忌

$smarty->display(“index.htm”);  // 該檔案就是模板檔案,應該在模板目錄下,顯示檔案

 

引入:

三種引入模式:

{include file=”header.htm”}

 

{include file=”D:/www/head.htm”}

 

{include file=`head.htm` title=”Main Menu”}

 

判斷:

{if $name==`ok`}

 

{else}

 

{/if}

 

 

 

迴圈:

對於一維陣列:經常使用

=======無鍵值陣列

{foreach from=$name item=id}

id: {$id}<br>

{/foreach}

 

=======有鍵值陣列

{foreach key=j item=v from=$name }

{$j}: {$v}<br>

{/foreach}

–*********item:內容{鍵值},key:鍵值,from:陣列

手冊解釋:

foreach 是除 section 之外處理迴圈的另一種方案(根據不同需要選擇不同的方案).

foreach 用於處理簡單陣列(陣列中的元素的型別一致),它的格式比 section 簡單許多,缺點是隻能處理簡單陣列.

foreach 必須和 /foreach 成對使用,且必須指定 from 和 item 屬性.

name 屬性可以任意指定(字母、數字和下劃線的組合).

foreach 可以巢狀,但必須保證巢狀中的 foreach 名稱唯一.

from 屬性(通常是陣列)決定迴圈的次數.

foreachelse 語句在 from 變數沒有值的時候被執行.

 

 

 

對於二維陣列:

 

{section name=s loop=$stu}

 

{$stu[s].name}

 

{sectionelse} 

 

無內容

 

{/section}

——********

name: section的名稱,不用加$,相當於給二維陣列從新建立索引

$loop: 要迴圈的變數,在程式中要使用assign對這個變數進行操作

 

手冊解釋:

模板的 section 用於遍歷陣列中的資料. section 標籤必須成對出現. 必須設定 name 和 loop 屬性. 

名稱可以是包含字母、數字和下劃線的任意組合. 可以巢狀但必須保證巢狀的 name 唯一. 變數 loop (通常是陣列)決定迴圈執行的次數.

 當需要在 section 迴圈內輸出變數時,必須在變數後加上中括號包含著的 name 變數. sectionelse 當 loop 變數無值時被執行. 

 

輸出:{$name}

採用{}界定符可以實現類似php

<?php ?>標籤的功能

 

 

 

二、示例站點目錄結構:

PHP程式碼:——————————————————————————–

+Web (站點根目錄)

|

|—-+comm (Smarty相關文件目錄) 

| |

| |—-+plugins (Smarty外掛目錄)

| |—–Config_File.class.php (Smarty配置檔案)

| |—–Smarty.class.php (Smarty類主檔案)

| |—–Smarty_Compiler.class.php (Smarty編譯類檔案)

|

|—-+cache (Smarty快取目錄,*nix下保證讀寫許可權)

|

|—-+templates (站點模板檔案存放目錄)

| |

| |—-header.tpl(頁面頁頭模板檔案)

| |—-index.tpl(站點首頁模板檔案)

| |—-foot.tpl(頁面頁尾模板檔案)

| |—-news.tpl (新聞頁模板檔案)

|

|

|—-+templates_c (模板檔案編譯後存放目錄,*nix下保證讀寫許可權)

|

|—-+css (站點CSS檔案目錄)

|

|—-+image (站點圖片目錄)

|

|—-+media (站點Flash動畫存放目錄)

|

|—-indexbak.htm (首頁原始效果圖)

|

|—-newsbak,htm (新聞頁原始效果圖)

|

|—-index.php (Smarty首頁程式檔案)

|

|—-news.php (Smarty新聞顯示檔案)

|

|—-例程說明.txt (目錄說明)

|

|—-資料庫建立檔案.txt (資料庫的建立文件)

 

 

 

與資料庫的連線:

 

smarty_inc.php是引入samrty的檔案,那麼同理資料庫也要配置一個類檔案;mysql_inc.php

模板的強大之處在於與資料連線,然後讀取資料,經過迴圈處理輸出結果

index.php 程式碼:

include(“smarty_inc.php”);

include(“mysql_inc.php”);

 

$conn=db_connect($h,$p,$u,$db);

mysql_query(“SET names `UTF8`”);

 

 

$sql=”select id,board_name,board_desc from boards”;

$res=mysql_query($sql);

 

if(mysql_num_rows($res)){

while($row=mysql_fetch_array($res)){

$time=$row[`id`];

$array[]=array(`id`=>$row[`id`],`bname`=>$row[`board_name`],`bdesc`=>$row[`board_desc`]);

}

}

$smarty->assign(“name”,$array); //進行模板變數替換

$smarty->display(“index.htm”);     //編譯並顯示位於./templates下的index.htm模板

 

 

–*****************************************************************

反思:如何學習模板:

1)配置:配置檔案,其實就是引入模板的過程:注意事項:引入檔案的路徑正確與否,模板的基本引數設定,例項化一個

2)模板的使用,主要是語法類,和php語言一樣他也有自身的一套處理機制,類比php,有四點:引入,判斷,迴圈,輸出 這個四個基本類的語法知識

3)與資料連線起來,讀取資料資料,顯示輸出


相關文章