關於smarty foreach的知識,這裡對其作用和用法做一個詳細的說明。
smarty {foreach} 用於像循環訪問一個數字索引數組一樣循環訪問一個關聯數組,與僅能訪問數字索引數組的{section}不同,{foreach}的語法比{section}的語法簡單得多,但是作為一個折衷方案也僅能用於單個數組。每個{foreach}標記必須與關閉標記{/foreach}成對出現。
smarty foreach 有如下屬性:
屬性名稱
Type類型
Required必要
Default默認值
Description描述
from
array數組
Yes必要
n/a
循環訪問的數組
item
string字符串
Yes必要
n/a
當前元素的變量名
key
string字符串
No可選
n/a
當前鍵名的變量名
name
string字符
No可選
n/a
用於訪問foreach屬性的foreach循環的名稱
foreach 是除 section 之外處理循環的另一種方案(根據不同需要選擇不同的方案).
foreach 用於處理簡單數組(數組中的元素的類型一致),它的格式比 section 簡單許多,缺點是只能處理簡單數組.
foreach 必須和 /foreach 成對使用,且必須指定 from 和 item 屬性.
name 屬性可以任意指定(字母、數字和下劃線的組合).
{foreach}循環的name可以是任何字母,數組,下劃線的組合,參考PHP變量。
{foreach}循環可以嵌套,嵌套的{foreach}的名稱應當互不相同。
from屬性通常是值數組,被用於判斷{foreach}的循環次數。
在from變量中沒有值時,將執行{foreachelse}。
{foreach}循環也有自身屬性的變量,可以通過{$smarty.foreach.name.property}訪問,其中"name"是name屬性。
注意:name屬性僅在需要訪問{foreach}屬性時有效,與{section}不同。訪問未定義name的{foreach}屬性不會拋出一個錯誤,但將導致不可預知的結果。
smarty {foreach} 除了以上屬於參數的屬性外還有幾個非參數形式的屬性:index, iteration, first, last, show, total ,下面一一說明:
iteration 用於顯示當前循環的執行次數,iteration 總是從 1 開始,每執行一次增加 1
first 當前 foreach 循環第一次執行時 first 被設置成 true下面看幾個例子分別說明 smarty foreach 各屬性的用法:
(1)演示item和key屬性
<?php
$arr = array(9 => 'Tennis', 3 => 'Swimming', 8 => 'Coding');
$smarty->assign('myArray', $arr);
?>
用模板按鍵名/鍵值對的形式輸出$myArray, 類似於PHP的foreach。
<ul>
{foreach from=$myArray key=k item=v}
<li>{$k}: {$v}</li>
{/foreach}
</ul>
上例將輸出:
<ul>
<li>9: Tennis</li>
<li>3: Swimming</li>
<li>8: Coding</li>
</ul>
(2)當foreach的item屬性是關聯數組時
<?php
$items_list = array(
23 => array('no' => 2456, 'label' => 'Salad'),
96 => array('no' => 4889, 'label' => 'Cream')
);
$smarty->assign('items', $items_list);
?>
模板中,url通過$myId輸出$items
<ul>
{foreach from=$items key=myId item=i}
<li><a href="http://www.phpernote.com/item.php?id={$myId}">{$i.no}: {$i.label}</li>
{/foreach}
</ul>
上例將輸出:
<ul>
<li><a href="http://www.phpernote.com/item.php?id=23">2456: Salad</li>
<li><a href="http://www.phpernote.com/item.php?id=96">4889: Cream</li>
</ul>
(3)foreach使用嵌套的item和key
向Smarty設置一個數組,對於每個鍵名對應的每個循環值都包括鍵。
<?php
$smarty->assign('contacts', array(
array('phone' => '1',
'fax' => '2',
'cell' => '3'),
array('phone' => '555-4444',
'fax' => '555-3333',
'cell' => '760-1234')
));
?>
用於輸出$contact的模板。
{foreach name=outer item=contact from=$contacts}
<hr />
{foreach key=key item=item from=$contact}
{$key}: {$item}<br />
{/foreach}
{/foreach}
上例將輸出:
<hr />
phone: 1<br />
fax: 2<br />
cell: 3<br />
<hr />
phone: 555-4444<br />
fax: 555-3333<br />
cell: 760-1234<br />
(4)smarty foreach index 屬性用法
{* 每五行輸出一次頭部區塊 *}
<table>
{foreach from=$items key=myId item=i name=foo}
{if $smarty.foreach.foo.index % 5 == 0}
<tr><th>Title</th></tr>
{/if}
<tr><td>{$i.label}</td></tr>
{/foreach}
</table>
(5)smarty foreach iteration 屬性用法
{* 該例將輸出0|1, 1|2, 2|3, ... 等等 *}
{foreach from=$myArray item=i name=foo}
{$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration},
{/foreach}
(6)smarty foreach first 屬性用法
{* 對於第一個條目顯示LATEST而不是id *}
<table>
{foreach from=$items key=myId item=i name=foo}
<tr>
<td>{if $smarty.foreach.foo.first}LATEST{else}{$myId}{/if}</td>
<td>{$i.label}</td>
</tr>
{/foreach}
</table>
(7)smarty foreach last 屬性用法
{* 在列表結束時增加一個水平標記 *})
{foreach from=$items key=part_id item=prod name=products}
<a href="http://www.phpernote.com/#{$part_id}">{$prod}</a>{if $smarty.foreach.products.last}<hr>{else},{/if}
{foreachelse}
... content ...
{/foreach}
(8)smarty foreach show 屬性用法
show是{foreach}的參數. show是一個布爾值。如果值為FALSE,{foreach}將不被顯示。如果有對應的{foreachelse},將被顯示。
(9)smarty foreach total 屬性用法
{* 在結束位置顯示行數 *}
{foreach from=$items key=part_id item=prod name=foo}
{$prod.name><hr/>
{if $smarty.foreach.foo.last}
<div id="total">{$smarty.foreach.foo.total} items</div>
{/if}
{foreachelse}
... something else ...
{/foreach}
ok,關於 smarty foreach 就總結這麼多了,更多關於smarty的知識,請參照本站:smarty知識專題