{section},{sectionelse}
属性名 | 型? | 必須 | デフォルト | 概要 |
name | string? | Yes | n/a | セクション名 |
loop | [$variable_name] | Yes | n/a | ループ回数を決定する変数の名前 |
start | integer? | No | 0 | ループを開始するインデックス位置。 この値が負の場合は、配列の最後尾から開始位置が算出されます。例えばループ配列に7つの値があり、そしてstartが-2であるならば、開始インデックスは5になります。ループ配列の長さを超えるような無効な値は、自動的に最も近い値に切り捨てられます。 |
step | integer? | No | 1 | ループインデックスを進めるために使われるステップ値。 例えばstep=2なら、インデックスは0, 2, 4をループします。stepの値が負の場合は、配列の前方に向かって進みます。 |
max | integer? | No | n/a | セクションがループする最大の回数 |
show | boolean? | No | true | このセクションを表示するかどうか |
sectionは、データの配列をループするために使用されます。
全てのsectionと/sectionはペアである必要があります。必須のパラメータは、nameとloopです。
セクション名は英数字とアンダースコアを使って自由に命名できます。このタグはネスト可能で、その場合のセクション名はお互いにユニークである必要があります。
loop属性で指定されたループ変数(たいていは配列)は、セクションのループ回数を決定するためにのみ使用されます。
セクション内で値を表示するには、変数名の次にブランケット[]で囲んだセクション名を指定します。ループ変数に値が存在しない場合は、sectionelseが実行されます。
全てのsectionと/sectionはペアである必要があります。必須のパラメータは、nameとloopです。
セクション名は英数字とアンダースコアを使って自由に命名できます。このタグはネスト可能で、その場合のセクション名はお互いにユニークである必要があります。
loop属性で指定されたループ変数(たいていは配列)は、セクションのループ回数を決定するためにのみ使用されます。
セクション内で値を表示するには、変数名の次にブランケット[]で囲んだセクション名を指定します。ループ変数に値が存在しない場合は、sectionelseが実行されます。
例 7-15. section
{* $custid配列の値を全て表示 *}
{section name=customer loop=$custid}id: {$custid[customer]}<br>{/section}
出力:
id: 1000<br>
id: 1001<br>
id: 1002<br>
例 7-16. section ループ変数
{* ループ変数は、ループ回数を決定するためにのみ使用されます。セクション内ではあらゆるテンプレート変数にアクセス可能です。 この例では、$custid, $name, $addressのそれぞれの配列には 同じ個数の値が格納されているとします。 *}{section name=customer loop=$custid}id: {$custid[customer]}<br> name: {$name[customer]}<br> address: {$address[customer]}<br> <p>{/section}
出力:
id: 1000<br>
name: John Smith<br>
address: 253 N 45th<br>
<p>
id: 1001<br>
name: Jack Jones<br>
address: 417 Mulberry ln<br>
<p>
id: 1002<br>
name: Jane Munson<br>
address: 5605 apple st<br>
<p>
例 7-17. セクション名
{* セクション名は自由に命名可能で、セクション内で配列を参照するために使われます。 *}{section name=mydata loop=$custid}id: {$custid[mydata]}<br> name: {$name[mydata]}<br> address: {$address[mydata]}<br> <p>{/section}
例 7-18. ネストしたセクション
{* セクションは無制限にネスト可能です。ネストしたセクションによって、多次元配列のような複雑なデータ構造にアクセスする事が可能です。この***例では、 $contact_type[customer]は現在の顧客の連絡方法を格納した配列を示します。 *}{section name=customer loop=$custid}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} <p>{/section}
出力:
id: 1000<br>
name: John Smith<br>
address: 253 N 45th<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: john@mydomain.com<br>
<p>
id: 1001<br>
name: Jack Jones<br>
address: 417 Mulberry ln<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: jack@mydomain.com<br>
<p>
id: 1002<br>
name: Jane Munson<br>
address: 5605 apple st<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: jane@mydomain.com<br>
<p>
例 7-19. セクションと連想配列
{* セクション内に連想配列の値を表示 *}
{section name=customer loop=$contacts}name: {$contacts[customer].name}<br> home: {$contacts[customer].home}<br> cell: {$contacts[customer].cell}<br> e-mail: {$contacts[customer].email}<p>{/section}
出力:
name: John Smith<br>
home: 555-555-5555<br>
cell: 555-555-5555<br>
e-mail: john@mydomain.com<p>
name: Jack Jones<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: jack@mydomain.com<p>
name: Jane Munson<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: jane@mydomain.com<p>
例 7-20. sectionelse
{* sectionelseは、$custidに値が存在しない場合に実行されます *}
{section name=customer loop=$custid}id: {$custid[customer]}<br>{sectionelse}there are no values in $custid.{/section}
セクションには、セクションプロパティを操作するための自身の変数があります。
これらは、{$smarty.section.sectionname.varname}のように示されます。
これらは、{$smarty.section.sectionname.varname}のように示されます。
注意: Smarty 1.5.0.から、セクションプロパティ変数の書式が{%sectionname.varname%}から{$smarty.section.sectionname.varname}に変更されました。古い書式はまだサポートされていますが、マニュアルの***例では新しい書式を使用しています
index
現在のループインデックスを表示します。0(又はstart属性の値)から始まり、1(又はstep属性の値)ずつ増加します。
テクニカルノート: step及びstart属性が変更されていない場合は、セクションプロパティのiterationと同じ動作をします。(1の代わりに0から始まる)
例 7-21. セクションプロパティ index
{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
前回のループインデックスを表示します。最初のループでは-1がセットされます。
例 7-22. セクションプロパティ index_prev
{section name=customer loop=$custid}{$smarty.section.customer.index} id: {$custid[customer]}<br> {* 参考までに言うと、$custid[customer.index] と $custid[customer] は同じ意味です。 *} {if $custid[customer.index_prev] ne $custid[customer.index]} The customer id changed<br> {/if}{/section}
出力:
0 id: 1000<br>
The customer id changed<br>
1 id: 1001<br>
The customer id changed<br>
2 id: 1002<br>
The customer id changed<br>
index_next
次回のループインデックスを表示します。ループの最後でもやはり現在のインデックスの次回の値を返します。(step 属性の設定に従います)
例 7-23. セクションプロパティ index_next
{section name=customer loop=$custid}{$smarty.section.customer.index} id: {$custid[customer]}<br> {* 参考までに言うと、$custid[customer.index] と $custid[customer] は同じ意味です。 *} {if $custid[customer.index_next] ne $custid[customer.index]} The customer id will change<br> {/if}{/section}
出力:
0 id: 1000<br>
The customer id will change<br>
1 id: 1001<br>
The customer id will change<br>
2 id: 1002<br>
The customer id will change<br>
iteration
現在のループが反復された回数を表示します。
注意: indexセクションプロパティとは異なり、start, step, max属性に影響されません。 また、0の代わりに1から始まります。rownumはiterationの別名で、全く同じ働きをします。
例 7-24. セクションプロパティ iteration
{section name=customer loop=$custid start=5 step=2}current loop iteration: {$smarty.section.customer.iteration}<br> {$smarty.section.customer.index} id: {$custid[customer]}<br> {* 参考までに言うと、$custid[customer.index] と $custid[customer] は同じ意味です。 *} {if $custid[customer.index_next] ne $custid[customer.index]} The customer id will change<br> {/if}{/section}
出力:
current loop iteration: 1
5 id: 1000<br>
The customer id will change<br>
current loop iteration: 2
7 id: 1001<br>
The customer id will change<br>
current loop iteration: 3
9 id: 1002<br>
The customer id will change<br>
first
現在のセクションの反復が一回目の場合にtrueがセットされます。
例 7-25. セクションプロパティ first
{section name=customer loop=$custid}{if $smarty.section.customer.first} <table> {/if} <tr><td>{$smarty.section.customer.index} id: {$custid[customer]}</td></tr> {if $smarty.section.customer.last} </table> {/if}{/section}
出力:
<table>
<tr><td>0 id: 1000</td></tr>
<tr><td>1 id: 1001</td></tr>
<tr><td>2 id: 1002</td></tr>
</table>
last
現在のセクションの反復が最後の場合にtrueがセットされます。
例 7-26. セクションプロパティ last
{section name=customer loop=$custid}{if $smarty.section.customer.first} <table> {/if} <tr><td>{$smarty.section.customer.index} id: {$custid[customer]}</td></tr> {if $smarty.section.customer.last} </table> {/if}{/section}
出力:
<table>
<tr><td>0 id: 1000</td></tr>
<tr><td>1 id: 1001</td></tr>
<tr><td>2 id: 1002</td></tr>
</table>
rownum
現在のループが反復された回数を表示します(1から開始)。rownumはiterationの別名で、それらは同じ働きをします。
例 7-27. セクションプロパティ rownum
{section name=customer loop=$custid}{$smarty.section.customer.rownum} id: {$custid[customer]}<br>{/section}
出力:
1 id: 1000<br>
2 id: 1001<br>
3 id: 1002<br>
loop
セクションがループした最後のインデックスを表示します。これはセクションの外でも使う事ができます。
例 7-28. セクションプロパティ index
{section name=customer loop=$custid}{$smarty.section.customer.index} id: {$custid[customer]}<br>{/section}
There were {$smarty.section.customer.loop} customers shown above.
出力:
0 id: 1000<br>
1 id: 1001<br>
2 id: 1002<br>
There were 3 customers shown above.
show
セクションの表示/非表示を決定します。
show属性は、true/falseのboolean値です。これがfalseの場合はセクションは表示されません。{sectionelse}があれば、それが代わりに表示されます。
show属性は、true/falseのboolean値です。これがfalseの場合はセクションは表示されません。{sectionelse}があれば、それが代わりに表示されます。
例 7-29. セクションの属性 show
{* $show_customer_infoは、このセクションの表示/非表示を決めるためにphpアプリケーションから渡された変数です *}{section name=customer loop=$custid show=$show_customer_info}{$smarty.section.customer.rownum} id: {$custid[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
セクションがループしたトータル回数を表示します。これはセクションの外でも使う事ができます。
例 7-30. セクションプロパティ total
{section name=customer loop=$custid step=2}{$smarty.section.customer.index} id: {$custid[customer]}<br>{/section}
There were {$smarty.section.customer.total} customers shown above.
出力:
0 id: 1000<br>
2 id: 1001<br>
4 id: 1002<br>
There were 3 customers shown above.