2011年3月24日 星期四

[PHP] Smarty 樣版小技巧整理

模擬 for 迴圈

在 Smarty 中,我們可以用以下的語法來完成類似 for 迴圈的效果:

{section name="forLoop" start=1 loop=10}
{/section}


其中 start 即為起始值, loop 為小於而不等於的終值。



如果以 PHP 語法來表示,則如下所示:



for ($i = 1; $i < 10; $i ++) {
// ...
}


使用無參數原生 PHP 函式



我們可以在樣版中使用許多原生的 PHP 函式 (但還是有例外) 來當做變數修飾函式,不過如果有些函式不需要參數時,我們可以用以下語法來呼叫:



{''|@time}


當然這裡的空字串對 time 函式來說是沒有意義的,而在函式前加上 @ 號,表示要直接呼叫原生 PHP 函式。



在 assign 設定 default 值



假設當樣版變數不存在或可轉換為 false 值時,我們會希望顯示一個預設值;而 Smarty 剛好就提供了一個 default 變數修飾函式讓我們使用,語法如下:



{$test|default:'NULL'}


而 default 變數修飾函式不僅只有在呈現變數能用,也能在樣版 assign 變數時使用,如下:



{assign var=value2 value=$value1|default:0}


註:當然不只有 default ,幾乎所有變數修飾函式都能在 assign 或其他可接受變數的樣版函式裡使用。



物件導向語法



Smarty 也支援 PHP 的物件導向語法,例如呼叫某物件函式:



{$test->getFakeValue()}


我們也能在樣版函式中,使用物件導向語法,而且後面也能串接變數修飾函式:



{assign var=nullValue value=$test->getNullValue()|default:'NULL'}


利用 config 變數或常數來當做變數修飾函式的參數



通常我們會用到設定值來避免重複設定一些常數值,例如用 PHP 陣列的方式指定給 Smarty :



$config = array(
'date' => '%Y/%m/%d',
'time' => '%H:%M',
);
$smarty->assign($config);


在樣版裡就可以這樣用:



{$date|date_format:$config.date}


我們也可以利用 PHP 的常數來當做設定,在樣版可以用「 $smarty.const.常數名稱」來取得常數內容:



{$date|date_format:$smarty.const.DATE_FORMAT}


當然,我們也可以透過 Smarty 內建的 config 機制;例如我們有個 config.conf ,內容如下:



date = "%Y/%m/%d"
time = "%H:%M"


然後在樣版內改用:



{config_load file="config.conf"}
{$date|date_format:#date#} {$time|date_format:#time#}


其中  #date# 與 #time# 就是從 config.conf 中讀取的。



註:感謝 Smarty 頭號粉絲 – 小魚提供以上技巧。



用 {cycle} 配合 CSS 來做表格列交替變色



我們可以用 cycle 配合 sction 或 foreach ,來做出交替變色的表格,語法如下:



{secion ....}
.....
<tr class="{cycle values="normal,alt"}">
.....
{/secion}


可以看出,它比使用 {if} 來得簡潔許多:



<tr class="{if $smarty.section.forLoop.iteration is odd}normal{else}alt{/if}">


註:感謝 Smarty 頭號粉絲 – 小魚提供以上技巧。



如果還有相關技巧的話,將會陸續再更新。

沒有留言: