利用視圖引擎的assign方法可以將包括數(shù)組在內(nèi)的數(shù)據(jù)分配到模版處理。在模版中,開發(fā)人員可以使用傳統(tǒng)的下標(biāo)或索引取到數(shù)組內(nèi)的數(shù)據(jù),例如$list["title"]。這種方式只能獲取到單一的數(shù)據(jù),如果一個(gè)數(shù)組集合中存在大量的數(shù)據(jù)(例如數(shù)據(jù)表集),那么就需要使用循環(huán)語(yǔ)句逐條讀取。ThinkPHP默認(rèn)的模版引擎提供了3種數(shù)據(jù)循環(huán)方式,分別為volist、foresch以及for標(biāo)簽。這3對(duì)標(biāo)簽可以混合使用,但它們都有各自的適用對(duì)象,下面分別進(jìn)行介紹。
1、vilist標(biāo)簽
volist標(biāo)簽是一對(duì)功能強(qiáng)大,使用方便的數(shù)據(jù)循環(huán)標(biāo)簽,它支持多維數(shù)組或一維數(shù)組的循環(huán)。由于它容易使用,并且語(yǔ)法靈活,所以在ThinkPHP模版中該標(biāo)簽比較常見。volist標(biāo)簽被模版引擎解釋后將轉(zhuǎn)換成foreach()...endforeach語(yǔ)句。一條簡(jiǎn)單的volist標(biāo)簽語(yǔ)句格式如下代碼所示。
如上代碼所示,數(shù)據(jù)源支持PHP所有數(shù)組(不支持對(duì)象),臨時(shí)變量名稱可以自定義,該變量名決定了在循環(huán)體中可以使用的數(shù)組名稱。為了方便演示,這里將在控制器index動(dòng)作中定義個(gè)多維數(shù)組,如下代碼所示
上述代碼定義了1個(gè)數(shù)組,并定義了3條數(shù)據(jù)。在index.html中可以使用volist標(biāo)簽將數(shù)組數(shù)據(jù)循環(huán)輸出代碼如下所示
如上述代碼所示,list為數(shù)組變量,該變量由index動(dòng)作分配。在標(biāo)簽中直接引用變量只需要變量名即可,不需要定界符和”$"符號(hào)。$vo是一個(gè)臨時(shí)變量(由volist標(biāo)簽id值指定),所有等待循環(huán)的數(shù)據(jù)都被存放在該變量中,$vo.user_name表示輸出數(shù)組中的user_name鍵對(duì)應(yīng)值,讀者還可以像傳統(tǒng)的PHP那樣寫成$vo[‘user_name']。
在實(shí)際應(yīng)用中,一般只需要使用volist標(biāo)簽的name和id屬性即可完成大多數(shù)的數(shù)據(jù)循環(huán)。ThinkPHP為了能夠使volist標(biāo)簽更佳靈活,還提供了另外一些實(shí)用的可選屬性,,這些屬性如下
● offset:起始數(shù)據(jù)序列
● length:數(shù)據(jù)結(jié)束序列
● key:數(shù)據(jù)循環(huán)式的臨時(shí)變量,相當(dāng)于從0開始的索引號(hào),默認(rèn)變量名為i。
● mod:對(duì)key值取模
● empty:當(dāng)那么數(shù)組為空時(shí)顯示的字符串信息
offset和length配合使用能夠?qū)崿F(xiàn)簡(jiǎn)單的數(shù)據(jù)分頁(yè)功能,如果數(shù)組信息過多,可以使用offset和length分片輸出,如以下代碼所示
上述代碼標(biāo)志只循環(huán)索引號(hào)2~5之間的數(shù)據(jù),利用offset和length屬性,可以方便地控制頁(yè)面中的局部數(shù)據(jù)。
2、foreach標(biāo)簽
foreach標(biāo)簽是volist標(biāo)簽的簡(jiǎn)化版,使用方式一樣,最終生成的PHP代碼也一樣,唯一不同的就是foreach標(biāo)簽不支持volist中可選屬性(只支持key)。另外,foreach不僅可以循環(huán)PHP數(shù)組,還可以循環(huán)對(duì)象。foreach的臨時(shí)變量使用item代替volist中的id。如下代碼所示
3、for標(biāo)簽
for標(biāo)簽也是一種可以實(shí)現(xiàn)數(shù)據(jù)循環(huán)的標(biāo)簽,最終生成的嗲嗎就是PHP中的for語(yǔ)句塊。無(wú)論是簡(jiǎn)潔性、易用性還是程序的運(yùn)行速度都不及volist、foreach標(biāo)簽。但for標(biāo)簽不僅可以循環(huán)數(shù)組,還可以循環(huán)普通的PHP變量、函數(shù)等,常用在局部統(tǒng)計(jì)、更新等場(chǎng)合。for標(biāo)簽格式如下
一條簡(jiǎn)單的for標(biāo)簽語(yǔ)句只需要開始值和結(jié)束值即可,這些變量值都支持模版或者控制器動(dòng)作中的變量值,如下代碼所示
在for標(biāo)簽中使用變量與volist、foreach標(biāo)簽不同,在for標(biāo)簽中使用變量必須在變量名稱上加上"$",并且變量不支持“|”函數(shù)引用符號(hào)。for標(biāo)簽可選屬性如下
● comparison:start和end的條件,默認(rèn)為lt(小于)。常用的有elt(等于活小于)、eq(等于)。
●step:步進(jìn)條數(shù)
●name:循環(huán)時(shí)變量名,默認(rèn)為i。
些天向大家分享了一些ThinkPHP操作數(shù)據(jù)庫(kù)的教程,不過一下子要記住這么多東西不是一件容易的事情,所以大家需要在實(shí)戰(zhàn)中邊開發(fā)邊學(xué)習(xí),才能更輕松的掌握技能。今天,我要向大家分享如何使用ThinkPHP模版標(biāo)簽來(lái)實(shí)現(xiàn)循環(huán)輸出功能。
圖片來(lái)自網(wǎng)絡(luò)
ThinkPHP內(nèi)置很多模版標(biāo)簽,今天我只向大家分享循環(huán)輸出標(biāo)簽。以后會(huì)逐漸分享其他常用模板標(biāo)簽的用法。
ThinkPHP內(nèi)置模版標(biāo)簽
Foreach標(biāo)簽用來(lái)循環(huán)輸出數(shù)據(jù),通常用于輸出數(shù)據(jù)庫(kù)select查詢結(jié)果,如下所示。
控制器代碼
模板代碼
最終輸出結(jié)果如下:
輸出結(jié)果
在foreach標(biāo)簽中,name為控制器賦值的變量名(users),item為循環(huán)內(nèi)的變量名(user)。
Volist標(biāo)簽與Foreach類似,不過它擁有更多用法,最基本用法如下:
Volist基本用法
輸出結(jié)果
可以看到,Volist標(biāo)簽中只是把item換成id,其他完全相同。
但是如果我們只需要輸出第1-10(注意數(shù)組是從0開始的)條數(shù)據(jù),可以這樣用:
Volist的offset用法
輸出結(jié)果
如果數(shù)據(jù)為空時(shí),我們還可以使用empty屬性來(lái)輸出指定信息:
Volist的empty用法
輸出結(jié)果
由于我們使用Table來(lái)輸出數(shù)據(jù),而empty不支持直接傳入html標(biāo)簽,所以“無(wú)用戶信息”被解析到了table外。我們可以這樣解決:
控制器賦值empty
Volist的empty接收變量
輸出結(jié)果
for標(biāo)簽的用法很簡(jiǎn)單,如下:
<for start="開始值" end="結(jié)束值" step="步進(jìn)值" name="循環(huán)變量名" >輸出內(nèi)容</for>
開始值、結(jié)束值、步進(jìn)值和循環(huán)變量都可以支持變量,開始值和結(jié)束值是必須,其他是可選。name的默認(rèn)值是i,步進(jìn)值的默認(rèn)值是1,舉例如下:
for標(biāo)簽用法
輸出結(jié)果
在開發(fā)中,我們需要經(jīng)常用到循環(huán)輸出功能,掌握循環(huán)輸出的用法志在必得。
P的標(biāo)簽給我一種很復(fù)雜的感覺。可能是別的框架的寫法太簡(jiǎn)潔了吧。
但是好處也是有的......下面會(huì)說到。其實(shí)也是各有利弊了。也不能說誰(shuí)是絕對(duì)的好。
最常見的幾個(gè)標(biāo)簽,if,foreach,
for。foreach以前講過。
寫法也簡(jiǎn)單,{foreach $ a as $ v} {/ foreach}
這個(gè)看起來(lái)比較簡(jiǎn)潔。也是最易容的一個(gè)標(biāo)簽。
也可以用原來(lái)的寫法name='a'item='v'。
對(duì)比上面的不難看出來(lái)對(duì)應(yīng)的是啥。
對(duì)于foreach標(biāo)簽,有一個(gè)強(qiáng)化版的標(biāo)簽。叫做ovlist標(biāo)簽。
格式也略不同{volist name='a'id='v'} {/ volist}
這樣的功能和foreach一樣。但是可以多很多參數(shù)。offset
='
11'length='20' 在id后面加上上面的參數(shù)就會(huì)多出這樣的功能,取出第11條-20的條數(shù)據(jù)
參數(shù)MOD是輸出某某某條數(shù)。
比如輸出偶數(shù)條數(shù)就是MOD='2'
還有另外一個(gè)作用就是做判斷。如果輸出了多少條數(shù)據(jù),額外輸出某些內(nèi)容。
{eq name=' mod'value='4'}
{/ eq}
如果查詢的 數(shù)據(jù)為空的時(shí)候可以用空來(lái)輸出。
空='xxx'的不支持直接HTML語(yǔ)法,可以插入變量。提前用分配來(lái)賦值。
為標(biāo)簽
開始一直沒看到for標(biāo)簽里的比較是啥意思。也不懂默認(rèn)值it is啥意思。原來(lái)是條件的意思,默認(rèn)值是小于。
{for start=' 1'end='100'} {對(duì)于}
這是最簡(jiǎn)單的寫法解析后是
為($ I=1; $ I <100; $ I +=1)
。當(dāng)然很多地方需要改,首先的英文我不一定就是小于一定的數(shù)值
我們添加比較=” xx'來(lái)修改
。xx根據(jù)比較標(biāo)簽來(lái)改。
我不想就+1是,也許是+2,那么加上step
step='2'就好了
我不喜歡$ i我要用$ n,那么就加上name'n'就好了
,如果標(biāo)簽
如果標(biāo)簽不是直接的,如果()了
分為三種寫法。
{if condition='xx'}
{if(xx)}
{if xx}
一套完整的就是
{if xxx} v1
{elseif xxx} v2
{else /} v3
{/ if}
大致這樣子。了解這三個(gè)標(biāo)簽剩下的就是自己組合了
原文地址:http : //blog.itbool.com/home/article/index/article_id/76.html
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。