本文實例講述了PHP模板引擎Smarty內建函數section,sectionelse用法。分享給大家供大家參考,具體如下:
section 是 Smarty 模板中除了 foreach 以外的另一種處理循環的方案,section 比 foreach 要靈活,就像是一個改進的 foreach 語句,除了擁有相同的循環特性外,還提供了很多附加選項,可以更好的控制循環的執行。在模板中,必須使用成對的 section 標記,有兩個必須設置的屬性 name 和 loop ,關於 section 的屬性請看下表:
屬性
類型
是否必須
缺省值
描述
name
string
Yes
n/a
該循環的名稱
loop
[$variable_name]
Yes
n/a
決定循環次數的變量名稱
start
integer
No
0
循環執行的初始位置. 如果該值為負數,開始位置從數組的尾部算起. 例如:如果數組中有7個元素,指定start為-2,那麼指向當前數組的索引為5. 非法值(超過了循環數組的下限)將被自動調整為最接近的合法值.
step
integer
No
1
該值決定循環的步長. 例如指定step=2將只遍歷下標為0、2、4等的元素. 如果step為負值,那麼遍歷數組的時候從後向前遍歷.
max
integer
No
1
設定循環最大執行次數.
show
boolean
No
true
決定是否顯示該循環.
我們通過一個實例,來演示 Smarty 中 {section} 和 {sectionelse} 的使用。
實例思路:從數據庫中取出內容,賦給一個數組變量 $_html ,再給這個數組變量分配給模板,然後在模板中進行該數組的遍歷。
數據庫、主文件 index.php,Smarty 模板初始化文件 init.inc.php,可參考前面一篇《PHP模板引擎Smarty內建函數foreach,foreachelse用法分析》
/tpl/index.tpl
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>section,sectionelse</title> </head> <body> <table align="center" border="1" width="800"> <tr> <th>編號(iteration)</th> <th>編號(rownum)</th> <th>姓名</th> <th>電子郵件</th> <th>添加時間</th> </tr> <{section loop=$data name="ls" max="100" start="0" step="2" }> <!-- 使用 section 遍歷數組 $data,max 表示最多可以循環多少條,start 表示從哪個數組下標開始顯示,step決定了循環的步長,如果設置為2,那麼將遍歷下標為0,2,4……的元素 --> <!-- 在此,我們做幾個保留變量 $smarty.section 的操作 --> <!-- 當數據顯示第一條的時候,第一行的表格背景為黃色,使用屬性:first --> <!-- 當數據顯示最後一條的時候,最後一行的表格背景為藍色,使用屬性:last --> <{if $smarty.section.ls.first}> <tr align="center" bgcolor="#FFFF00"> <{elseif $smarty.section.ls.last}> <tr align="center" bgcolor="#0000FF"> <{else}> <tr align="center"> <{/if}> <td><{$smarty.section.ls.iteration}></td> <!-- iteration 是保留變量中顯示行號的屬性 --> <td><{$smarty.section.ls.rownum}></td> <!-- rownum 是保留變量中顯示行號的屬性 --> <td><{$data[ls].username}></td> <!-- 輸出數組第二維下標為 username 的元素值 --> <td><{$data[ls].email}></td> <!-- 輸出數組第二維下標為 email 的元素值 --> <td><{$data[ls].addTime}></td> <!-- 輸出數組第二維下標為 addTime 的元素值 --> </tr> <{sectionelse}> <!-- 如果分配過來的數組沒有內容的話,顯示下面內容 --> <tr> <td colspan="5">對不起!暫時沒有數據。</td> </tr> <{/section}> <{if $data}> <!-- 如果循環的次數不為空的話,那麼使用 Smarty 的保留變量 {$smarty.section} 顯示出循環的次數 --> <tr> <td align="center" colspan="5">循環的次數為:<{$smarty.section.ls.total}></td> </tr> <{/if}> </table> </body> </html>
執行結果:
section 循環區域中可以使用的變量
變量名 描述 index 用於顯示當前循環的索引,從 0 開始(如果設置了 start 屬性,那麼就由該值開始),每次加 1,(如果指定了 step 屬性,那麼由該值決定) index_prev 用於顯示上一個循環索引值,循環開始時,此值為 -1 index_next 用於顯示下一個循環索引值,循環執行到最後一次時,此值仍然比當前索引值大 1(如果指定了 step 屬性,那麼由該值決定) iteration 用於顯示循環的次數 first 當前 section 循環在第一次執行時該變量的值為 true last 當前 section 循環在最後一次執行時該變量的值為 true rownum 用於顯示循環的次數,該屬性是 iteration 的別名,兩者相同 loop 用於顯示該循環上一次循環時的索引值,該值可以用於循環內部或循環結束後 show 是 section 的參數,show 取值為布爾值 true 和 false,如果設置為false,該循環將不顯示。如果指定了 sectionelse 子句,該子句是否顯示也取決於該值 total 用於顯示循環執行的次數。不僅可以在循環中,也可以在執行結束後調用此屬性
更多關於PHP相關內容感興趣的讀者可查看本站專題:《smarty模板入門基礎教程》、《PHP模板技術總結》、《PHP基於pdo操作數據庫技巧總結》、《PHP運算與運算符用法總結》、《PHP網絡編程技巧總結》、《PHP基本語法入門教程》、《php面向對象程序設計入門教程》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》
希望本文所述對大家基於smarty模板的PHP程序設計有所幫助。