W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
{section}
可以循環(huán)遍歷 連續(xù)數(shù)字索引的數(shù)組, 區(qū)別于{foreach}
可以循環(huán)任意關(guān)聯(lián)數(shù)組. 每個(gè){section}
標(biāo)簽都必須有一個(gè)匹配的{/section}
關(guān)閉標(biāo)簽。
{foreach}
可以做到任何{section}做到的功能, 而且更簡(jiǎn)單和有更清晰的語(yǔ)法。一般更推薦使用{foreach}語(yǔ)法.
{section}不能用于循環(huán)關(guān)聯(lián)數(shù)組,它僅能循環(huán)數(shù)字索引的、連續(xù)下標(biāo)的 (0,1,2,...)數(shù)組。 要循環(huán)關(guān)聯(lián)數(shù)組,請(qǐng)使用{foreach}
。
參數(shù)名稱 | 類型 | 必選參數(shù) | 默認(rèn)值 | 說(shuō)明 |
---|---|---|---|---|
name | string | Yes | n/a | section的名稱 |
loop | mixed | Yes | n/a | 用于循環(huán)的值 |
start | integer | No | 0 | 設(shè)置開(kāi)始循環(huán)的下標(biāo)。如果設(shè)置成負(fù)值,則會(huì)從數(shù)組的結(jié)束位置開(kāi)始。 比如說(shuō),如果數(shù)組中有7個(gè)元素,設(shè)置該值為-2,則循環(huán)將從下標(biāo)5開(kāi)始。 設(shè)置了不正確的值(比如說(shuō)在數(shù)組長(zhǎng)度以外的值)那么會(huì)自動(dòng)計(jì)算為最接近的值。 |
step | integer | No | 1 | 循環(huán)的步長(zhǎng)值。比如,step=2將循環(huán)下標(biāo)0,2,4,等。 如果step值設(shè)置成負(fù)數(shù),那么將從最后開(kāi)始計(jì)算步長(zhǎng)。 |
max | integer | No | n/a | 設(shè)置最大的循環(huán)次數(shù)。 |
show | boolean | No | TRUE | 是否顯示循環(huán)內(nèi)容 |
可選標(biāo)記:
名稱 | 說(shuō)明 |
---|---|
nocache | 關(guān)閉{section} 緩存 |
name
和 loop
是必須的參數(shù)。
{section}
的name
可以是任意字符,如數(shù)字、字母或下劃線等,和 PHP 變量一樣的命名規(guī)則。
{section}可以嵌套,而且嵌套的{section}
名稱必須唯一。
loop
一般是數(shù)組,決定了{section}
的循環(huán)次數(shù)。 同時(shí)你也可以傳遞一個(gè)整數(shù)指定循環(huán)次數(shù)。
當(dāng)在{section}
內(nèi)顯示變量時(shí), {section}
的name
必須給變量名稱加上[方括號(hào)].
如果loop屬性為空,{sectionelse}
將執(zhí)行。
{section}
同時(shí)還有自己的屬性。 這些屬性都是通過(guò):{$smarty.section.name.property}
來(lái)使用,其中“name”是name
屬性.
{section}
的內(nèi)置屬性有: index
, index_prev
, index_next
, iteration
, first
,last
, rownum
, loop
, show
, total
.
Example 7.63. 簡(jiǎn)單的{section}例子
assign()
賦值一個(gè)數(shù)組
<?php $data = array(1000,1001,1002); $smarty->assign('custid',$data); ?>
模板將輸出該數(shù)組
{* this example will print out all the values of the $custid array *} {section name=customer loop=$custid} {section customer $custid} {* short-hand *} id: {$custid[customer]}<br /> {/section} <hr /> {* print out all the values of the $custid array reversed *} {section name=foo loop=$custid step=-1} {section foo $custid step=-1} {* short-hand *} {$custid[foo]}<br /> {/section}
輸出:
id: 1000<br /> id: 1001<br /> id: 1002<br /> <hr /> id: 1002<br /> id: 1001<br /> id: 1000<br />
Example 7.64. {section}不使用賦值數(shù)組
{section name=foo start=10 loop=20 step=2} {$smarty.section.foo.index} {/section} <hr /> {section name=bar loop=21 max=6 step=-2} {$smarty.section.bar.index} {/section}
輸出:
10 12 14 16 18 <hr /> 20 18 16 14 12 10
Example 7.65. 給{section}設(shè)置名稱
{section}
的 name
屬性可以是任意字符,請(qǐng)參見(jiàn)PHP 變量定義. 它是用于引用{section}
的數(shù)據(jù).
{section name=anything loop=$myArray} {$myArray[anything].foo} {$name[anything]} {$address[anything].bar} {/section}
Example 7.66. {section}中使用關(guān)聯(lián)數(shù)組
下面是使用{section}
來(lái)輸出關(guān)聯(lián)數(shù)組的例子。 這里是在PHP代碼中賦值$contacts
數(shù)組到Smarty。
<?php $data = array( array('name' => 'John Smith', 'home' => '555-555-5555', 'cell' => '666-555-5555', 'email' => 'john@myexample.com'), array('name' => 'Jack Jones', 'home' => '777-555-5555', 'cell' => '888-555-5555', 'email' => 'jack@myexample.com'), array('name' => 'Jane Munson', 'home' => '000-555-5555', 'cell' => '123456', 'email' => 'jane@myexample.com') ); $smarty->assign('contacts',$data); ?>
該模板用于顯示$contacts
{section name=customer loop=$contacts} <p> name: {$contacts[customer].name}<br /> home: {$contacts[customer].home}<br /> cell: {$contacts[customer].cell}<br /> e-mail: {$contacts[customer].email} </p> {/section}
輸出:
<p> name: John Smith<br /> home: 555-555-5555<br /> cell: 666-555-5555<br /> e-mail: john@myexample.com </p> <p> name: Jack Jones<br /> home phone: 777-555-5555<br /> cell phone: 888-555-5555<br /> e-mail: jack@myexample.com </p> <p> name: Jane Munson<br /> home phone: 000-555-5555<br /> cell phone: 123456<br /> e-mail: jane@myexample.com </p>
Example 7.67. {section}的loop
屬性的演示例子
例子假定$custid
, $name
和 $address
三個(gè)數(shù)組中對(duì)應(yīng)的值都有著相同的數(shù)字下標(biāo)。 首先從PHP代碼中賦值到Smarty
<?php $id = array(1001,1002,1003); $smarty->assign('custid',$id); $fullnames = array('John Smith','Jack Jones','Jane Munson'); $smarty->assign('name',$fullnames); $addr = array('253 Abbey road', '417 Mulberry ln', '5605 apple st'); $smarty->assign('address',$addr); ?>
loop
值僅是指定循環(huán)的次數(shù)。 你可以在{section}
中給它設(shè)置任何的變量。 在多個(gè)數(shù)組循環(huán)時(shí)比較有用。 你可以傳遞一個(gè)數(shù)組來(lái)讓其計(jì)算總數(shù)而指定循環(huán)次數(shù),也可以直接指定一個(gè)循環(huán)次數(shù)的整數(shù)。
{section name=customer loop=$custid} <p> id: {$custid[customer]}<br /> name: {$name[customer]}<br /> address: {$address[customer]} </p> {/section}
輸出:
<p> id: 1000<br /> name: John Smith<br /> address: 253 Abbey road </p> <p> id: 1001<br /> name: Jack Jones<br /> address: 417 Mulberry ln </p> <p> id: 1002<br /> name: Jane Munson<br /> address: 5605 apple st </p>
Example 7.68. {section}嵌套
{section}可以嵌套任意的深度。通過(guò)嵌套{section}你可以處理多維數(shù)組。 下面是例子的.php
文件。
<?php $id = array(1001,1002,1003); $smarty->assign('custid',$id); $fullnames = array('John Smith','Jack Jones','Jane Munson'); $smarty->assign('name',$fullnames); $addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st'); $smarty->assign('address',$addr); $types = array( array( 'home phone', 'cell phone', 'e-mail'), array( 'home phone', 'web'), array( 'cell phone') ); $smarty->assign('contact_type', $types); $info = array( array('555-555-5555', '666-555-5555', 'john@myexample.com'), array( '123-456-4', 'www.example.com'), array( '0457878') ); $smarty->assign('contact_info', $info); ?>
在這個(gè)模板里, $contact_type[customer]是客戶聯(lián)系信息的數(shù)組
{section name=customer loop=$custid} <hr> id: {$custid[customer]}<br /> name: {$name[customer]}<br /> address: {$address[customer]}<br /> {section name=contact loop=$contact_type[customer]} {$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br /> {/section} {/section}
輸出:
<hr> id: 1000<br /> name: John Smith<br /> address: 253 N 45th<br /> home phone: 555-555-5555<br /> cell phone: 666-555-5555<br /> e-mail: john@myexample.com<br /> <hr> id: 1001<br /> name: Jack Jones<br /> address: 417 Mulberry ln<br /> home phone: 123-456-4<br /> web: www.example.com<br /> <hr> id: 1002<br /> name: Jane Munson<br /> address: 5605 apple st<br /> cell phone: 0457878<br />
Example 7.69. {sectionelse}的數(shù)據(jù)庫(kù)例子
數(shù)據(jù)庫(kù)查找的結(jié)果(如 ADODB 或 PEAR) 傳遞到 Smarty
<?php $sql = 'select id, name, home, cell, email from contacts ' ."where name like '$foo%' "; $smarty->assign('contacts', $db->getAll($sql)); ?>
模板將以表格形式顯示數(shù)據(jù)結(jié)果
<table> <tr><th> </th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr> {section name=co loop=$contacts} <tr> <td><a href="view.php?id={$contacts[co].id}">view<a></td> <td>{$contacts[co].name}</td> <td>{$contacts[co].home}</td> <td>{$contacts[co].cell}</td> <td>{$contacts[co].email}</td> <tr> {sectionelse} <tr><td colspan="5">No items found</td></tr> {/section} </table>
index
是當(dāng)前數(shù)組的索引值,從0開(kāi)始,或者從設(shè)定的start
值開(kāi)始。它將每次循環(huán)增加1或者增加指定的step
值。
如果 step
和 start
都沒(méi)有被指定, 那么它會(huì)和iteration
屬性很像, 只不過(guò)它是從0開(kāi)始,而iteration是從1開(kāi)始.
Example 7.70. {section} index
屬性
$custid[customer.index]
和 $custid[customer]
是一樣的.
{section name=customer loop=$custid} {$smarty.section.customer.index} id: {$custid[customer]}<br /> {/section}
輸出:
0 id: 1000<br /> 1 id: 1001<br /> 2 id: 1002<br />
index_prev
上一次循環(huán)的索引值。 在第一次循環(huán)的時(shí)候,它是-1.
index_next
是下一次循環(huán)的索引值。 在最后一次循環(huán)時(shí),它會(huì)比當(dāng)前索引加1,或者加上指定的step
屬性值。
Example 7.71. index
, index_next
和 index_prev
屬性
<?php $data = array(1001,1002,1003,1004,1005); $smarty->assign('rows',$data); ?>
在表格中顯示數(shù)組
{* $rows[row.index] and $rows[row] are identical in meaning *} <table> <tr> <th>index</th><th>id</th> <th>index_prev</th><th>prev_id</th> <th>index_next</th><th>next_id</th> </tr> {section name=row loop=$rows} <tr> <td>{$smarty.section.row.index}</td><td>{$rows[row]}</td> <td>{$smarty.section.row.index_prev}</td><td>{$rows[row.index_prev]}</td> <td>{$smarty.section.row.index_next}</td><td>{$rows[row.index_next]}</td> </tr> {/section} </table>
輸出:
index id index_prev prev_id index_next next_id 0 1001 -1 1 1002 1 1002 0 1001 2 1003 2 1003 1 1002 3 1004 3 1004 2 1003 4 1005 4 1005 3 1004 5
iteration
是當(dāng)前的循環(huán)次數(shù),從1開(kāi)始。
它和index
不同,不會(huì)受到{section}
的屬性 start
, step
和 max
等影響. 而且和index
不同的是,iteration
還是從1開(kāi)始計(jì)算的。 rownum
是iteration
的別名,它們是一樣的。
Example 7.72. iteration
屬性
<?php // array of 3000 to 3015 $id = range(3000,3015); $smarty->assign('arr',$id); ?>
模板將按step=2
來(lái)顯示$arr
的數(shù)組元素
{section name=cu loop=$arr start=5 step=2} iteration={$smarty.section.cu.iteration} index={$smarty.section.cu.index} id={$custid[cu]}<br /> {/section}
輸出:
iteration=1 index=5 id=3005<br /> iteration=2 index=7 id=3007<br /> iteration=3 index=9 id=3009<br /> iteration=4 index=11 id=3011<br /> iteration=5 index=13 id=3013<br /> iteration=6 index=15 id=3015<br />
這里是另一個(gè)例子,使用iteration
屬性來(lái)顯示表格, 并且每五行顯示一次表頭。
<table> {section name=co loop=$contacts} {if $smarty.section.co.iteration is div by 5} <tr><th> </th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr> {/if} <tr> <td><a href="view.php?id={$contacts[co].id}">view<a></td> <td>{$contacts[co].name}</td> <td>{$contacts[co].home}</td> <td>{$contacts[co].cell}</td> <td>{$contacts[co].email}</td> <tr> {/section} </table>
一個(gè)用iteration
屬性來(lái)交替顯示文章每三行顏色的例子
<table> {section name=co loop=$contacts} {if $smarty.section.co.iteration is even by 3} <span style="color: #ffffff">{$contacts[co].name}</span> {else} <span style="color: #dddddd">{$contacts[co].name}</span> {/if} {/section} </table>
"is div by"語(yǔ)法是PHP取模運(yùn)算的一個(gè)變種。取模運(yùn)算{if $smarty.section.co.iteration % 5 == 1}
也是可用的。
你還可以用"is odd by"來(lái)反轉(zhuǎn)交替。
如果當(dāng)前的循環(huán)是第一次,first
將被設(shè)成 TRUE
。
如果當(dāng)前的循環(huán)是最后一次,那么last
將為 TRUE
。
Example 7.73. {section} 屬性 first
和 last
例子循環(huán)了 $customers
數(shù)組,在循環(huán)最前面輸出頭部區(qū)域,在底端輸出底部區(qū)域的內(nèi)容。 同時(shí)也使用了 total
屬性.
{section name=customer loop=$customers} {if $smarty.section.customer.first} <table> <tr><th>id</th><th>customer</th></tr> {/if} <tr> <td>{$customers[customer].id}}</td> <td>{$customers[customer].name}</td> </tr> {if $smarty.section.customer.last} <tr><td></td><td>{$smarty.section.customer.total} customers</td></tr> </table> {/if} {/section}
rownum
是當(dāng)前循環(huán)的次數(shù),從1開(kāi)始。它是iteration
的別名。
loop
是最后一次{section}循環(huán)的下標(biāo)。 它可以在{section}
循環(huán)中或者循環(huán)后使用。
Example 7.74. {section} 屬性 loop
{section name=customer loop=$custid} {$smarty.section.customer.index} id: {$custid[customer]}<br /> {/section} There are {$smarty.section.customer.loop} customers shown above.
輸出:
0 id: 1000<br /> 1 id: 1001<br /> 2 id: 1002<br /> There are 3 customers shown above.
show
是一個(gè)布爾值參數(shù)。如果設(shè)置為FALSE
,section將不會(huì)被顯示。 如果有{sectionelse}
顯示,它們將被交替顯示。
Example 7.75. show
屬性
布爾值 $show_customer_info
可以在PHP程序賦值并傳遞到模板中, 可以控制section的顯示與否。
{section name=customer loop=$customers show=$show_customer_info} {$smarty.section.customer.rownum} id: {$customers[customer]}<br /> {/section} {if $smarty.section.customer.show} the section was shown. {else} the section was not shown. {/if}
輸出:
1 id: 1000<br /> 2 id: 1001<br /> 3 id: 1002<br /> the section was shown.
total
是{section}
的總數(shù)。 它可以在{section}
循環(huán)中或者循環(huán)后使用。
Example 7.76. total
例子
{section name=customer loop=$custid step=2} {$smarty.section.customer.index} id: {$custid[customer]}<br /> {/section} There are {$smarty.section.customer.total} customers shown above.
參見(jiàn){foreach}
, {for}
, {while}
和 $smarty.section
.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: