ecshop模板smarty foreach詳解

轉貼:http://hgxiaolang.javaeye.com/blog/685774 java

 

{foreach},{foreachelse} {foreach} 用於像循環訪問一個數字索引數組同樣循環訪問一個關聯數組,與僅能訪問數字索引數組的{section}不一樣,{foreach}的語法比 {section}的語法簡單得多,可是做爲一個折衷方案也僅能用於單個數組。每一個{foreach}標記必須與關閉標記{/foreach}成對出現。 屬性 一、from 類型:array數組 必要性:Yes必要 默認值:n/a 描述:循環訪問的數組 二、item 類型:string字符串 必要性:Yes必要 默認值:n/a 描述:當前元素的變量名 三、key 類型:string字符串 必要性:No可選 默認值:n/a 描述:當前鍵名的變量名 四、name 類型:string字符串 必要性:No可選 默認值:n/a 描述:用於訪問foreach屬性的foreach循環的名稱 from 和item是必要屬性 {foreach}循環的name能夠是任何字母,數組,下劃線的組合,參考PHP變量。 {foreach}循環能夠嵌套,嵌套的{foreach}的名稱應當互不相同。 from屬性一般是值數組,被用於判斷{foreach}的循環次數。 在from 變量中沒有值時,將執行{foreachelse}。 {foreach}循環也有自身屬性的變量,能夠經過 {$smarty.foreach.name.property}訪問,其中"name"是name屬性。 注意:name屬性僅在須要訪問 {foreach}屬性時有效,與{section}不一樣。訪問未定義name的{foreach}屬性不會拋出一個錯誤,但將致使不可預知的結果。 {foreach} 屬性有index, iteration, first, last, show, total. 示例: 例一. item屬性 assign('myArray', $arr); ?> 用模板以無序列表輸出$myArray sql

    {foreach from=$myArray item=foo}
  • {$foo}
  • {/foreach}

上例將輸出: 數據庫

  • 1000
  • 1001
  • 1002

例二. 演示item和key屬性 'Tennis', 3 => 'Swimming', 8 => 'Coding'); $smarty->assign('myArray', $arr); ?> 用模板按鍵名/鍵值對的形式輸出$myArray, 相似於PHP的foreach。 數組

    {foreach from=$myArray key=k item=v}
  • {$k}: {$v}
  • {/foreach}

上例將輸出: this

  • 9: Tennis
  • 3: Swimming
  • 8: Coding

例三. {foreach}的item屬性是關聯數組 array('no' => 2456, 'label' => 'Salad'), 96 => array('no' => 4889, 'label' => 'Cream') ); $smarty->assign('items', $items_list); ?> 模板中,url經過$myId輸出$items url

    {foreach from=$items key=myId item=i}
  • {$i.no}: {$i.label}
  • {/foreach}

上例將輸出: spa

  • 2456: Salad
  • 4889: Cream

例四. {foreach}使用嵌套的item和key 向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} blog

{foreach key=key item=item from=$contact} {$key}: {$item}
{/foreach} {/foreach} 上例將輸出: 索引

phone: 1
fax: 2
cell: 3 ci

phone: 555-4444
fax: 555-3333
cell: 760-1234
例五. 使用{foreachelse}的數據庫示例 一個數據庫(例如PEAR或ADODB)的搜索腳本示例, assign('results', $db->getAssoc($sql) ); ?> 藉助{foreachelse}標記在沒有結果時模板輸出"None found"字樣。 {foreach key=cid item=con from=$results} {$con.name} - {$con.nick} 
{foreachelse} No items were found in the search {/foreach} .index包含當前數組索引,從零開始。 例六. index示例 {* 每五行輸出一次頭部區塊 *}

{foreach from=$items key=myId item=i name=foo} {if $smarty.foreach.foo.index % 5 == 0} {/if} {/foreach}
Title
{$i.label}

iteration包含當前循環次數,與index不一樣,從1開始,每次循環增加1。 例七. iteration和index示例 {* this will output 0|1, 1|2, 2|3, ... etc *} {* 該例將輸出0|1, 1|2, 2|3, ... 等等 *} {foreach from=$myArray item=i name=foo} {$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration}, {/foreach} first在當前{foreach}循環處於初始位置時值爲TRUE。 例八. first屬性示例 {* 對於第一個條目顯示LATEST而不是id *}

{foreach from=$items key=myId item=i name=foo} {/foreach}
{if $smarty.foreach.foo.first}LATEST{else}{$myId}{/if} {$i.label}

last在當前{foreach}循環處於最終位置是值爲TRUE。 例九. last屬性示例 {* 在列表結束時增長一個水平標記 *}) {foreach from=$items key=part_id item=prod name=products} {$prod} {if $smarty.foreach.products.last}

{else},{/if} {foreachelse} ... content ... {/foreach} show是{foreach}的參數. show是一個布爾值。若是值爲FALSE,{foreach}將不被顯示。若是有對應的{foreachelse},將被顯示。 total包括 {foreach}將循環的次數,既能夠在{foreach}中使用,也能夠在以後使用。 例十. total屬性示例 {* 在結束位置顯示行數 *} {foreach from=$items key=part_id item=prod name=foo} {$prod.name>

{if $smarty.foreach.foo.last}

{$smarty.foreach.foo.total} items

{/if} {foreachelse} ... something else ... {/foreach} 問題 {foreach from=$custid item=curr_id key=num} {if num is odd} 幹啥 {else} 幹其餘的 {/if} {/foreach} 與如下的代碼的區別,odd和enen的意義? {foreach from=$custid item=curr_id key=num} {if num%2==0} 幹啥 {else} 幹其餘的 {/if} {/foreach}

相關文章
相關標籤/搜索