thinkphp中volist的多重迴圈,標籤巢狀

iteye_21202發表於2013-05-31

關於volist,thinkphp官方手冊說的非常清楚,其實就相當於foreach功能,只是用在模板裡面,很方便,實用。

volist的二重迴圈,標籤巢狀是這樣的。

在操作裡寫如下程式碼:假定有如下陣列

$listArray=array(0=>array('order_id'=>'1','product_item'=>array(0=>array('name'=>'a','price'=>'222'),1=>array('name'=>'b','price'=>'500'))),
1=>array('order_id'=>'2','product_item'=>array(0=>array('name'=>'c','price'=>'566'),1=>array('name'=>'d','price'=>'6666'))));
在對應的模板裡我們用volist

      <volist name="listArray" id="vo">
         {$vo.order_id}<br>
         <volist name="vo.product_item" id="item">
            {$item.name}{$item.price}
         </volist>
      </volist>
得出想要的結果。


手冊裡這樣解釋,還是很全面的。
Volist標籤主要用於在模板中迴圈輸出資料集或者多維陣列。

volist標籤(迴圈輸出資料)

閉合

非閉合標籤

屬性

name(必須):要輸出的資料模板變數

id(必須):迴圈變數

offset(可選):要輸出資料的offset

length(可選):輸出資料的長度

key(可選):迴圈的key變數,預設值為i

mod(可選):對key值取模,預設為2

empty(可選):如果資料為空顯示的字串

通常模型的select方法返回的結果是一個二維陣列,可以直接使用volist標籤進行輸出。

在Action中首先對模版賦值:

$User = M('User');

$list = $User->select();

$this->assign('list',$list);

在模版定義如下,迴圈輸出使用者的編號和姓名:

<volist name="list"id="vo">

{$vo.id}

{$vo.name}

</volist>

Volist標籤的name屬性表示模板賦值的變數名稱,因此不可隨意在模板檔案中改變。id表示當前的迴圈變數,可以隨意指定,但確保不要和name屬性衝突,例如:

<volist name="list"id="data">

{$data.id}

{$data.name}

</volist>

支援輸出部分資料,例如輸出其中的第5~15條記錄

<volist name="list"id="vo" offset="5" length='10'>

{$vo.name}

</volist>

輸出偶數記錄

<volist name="list"id="vo" mod="2" >

<eq name="mod"value="1">{$vo.name}</eq>

</volist>

Mod屬性還用於控制一定記錄的換行,例如:

<volist name="list"id="vo" mod="5" >

{$vo.name}

<eq name="mod"value="4"><br/></eq>

</volist>

輸出迴圈變數

<volist name="list"id="vo" key="k" >

{$k}.{$vo.name}

</volist>

如果沒有指定key屬性的話,預設使用迴圈變數i,例如:

<volist name="list"id="vo" >

{$i}.{$vo.name}

</volist>

如果要輸出陣列的索引,可以直接使用key變數,和迴圈變數不同的是,這個key是由資料本身決定,而不是迴圈控制的,例如:

<volist name="list"id="vo" >

{$key}.{$vo.name}

</volist>

volist還有一個別名iterate,用法和volist是一樣。

從2.1版開始允許使用函式設定資料集,如:

<volist name=":fun('arg')" id="vo">{$vo.name}</volist>

相關文章