|
|

|
{foreach},{foreachelse}
{foreach} dipakai untuk mengulang terus-menerus melalui
array asosiatif juga array-diindeks secara
numerik, tidak seperti {section}
yang untuk mengulang melalui hanya array-diindeks secara numerik.
Sintaks untuk
{foreach} jauh lebih mudah daripada
{section},
tapi sebagai imbalannya hanya bisa dipakai untuk array
tunggal. Setiap tag {foreach} harus
dipasangkan dengan tag {/foreach} penutup.
Atribut yang diperlukan adalah from dan item.
Name dari pengulangan {foreach}
bisa apa saja yang anda sukai, terdiri dari huruf, angka dan garis bawah,
seperti
variabel PHP.
Pengulangan {foreach} bisa diulang terus, dan nama
{foreach} yang diulang harus unik dari yang lain.
Atribut from, biasanya sebuah array nilai,
menetapkan jumlah berapa kali {foreach} akan diulang.
{foreachelse} dijalankan ketika tidak ada nilai dalam
variabel from.
Pengulangan {foreach} juga memiliki variabelnya
sendiri yang menangani properti. Ini diakses dengan:
{$smarty.foreach.name.property} dengan
"name" menjadi atribut
name.
Catatan: Atribut name hanya diperlukan saat anda ingin
mengakses properti {foreach}, tidak seperti
{section}.
Mengakses properti {foreach} dengan name
tidak terdefinisi tidak menimbulkan kesalahan, tapi sebaliknya
mengakibatkan hasil yang tidak diinginkan.
Properti {foreach} adalah
index,
iteration,
first,
last,
show,
total.
Teladan 7-5. Atribut item
<?php $arr = array(1000, 1001, 1002); $smarty->assign('myArray', $arr); ?>
|
Template untuk ditampilkan $myArray dalam daftar tidak-berurut <ul>
{foreach from=$myArray item=foo}
<li>{$foo}</li>
{/foreach}
</ul> |
Contoh di atas akan menampilkan:
<ul>
<li>1000</li>
<li>1001</li>
<li>1002</li>
</ul> |
|
Teladan 7-6. Mendemonstrasikan atribut item dan key
<?php $arr = array(9 => 'Tennis', 3 => 'Swimming', 8 => 'Coding'); $smarty->assign('myArray', $arr); ?>
|
Template untuk ditampilkan $myArray sebagai
pasangan kunci/nilai, seperti
foreach
PHP. <ul>
{foreach from=$myArray key=k item=v}
<li>{$k}: {$v}</li>
{/foreach}
</ul> |
Contoh di atas akan menampilkan:
<ul>
<li>9: Tennis</li>
<li>3: Swimming</li>
<li>8: Coding</li>
</ul> |
|
Teladan 7-7. {foreach} dengan asosiatif atribut item
<?php $items_list = array(23 => array('no' => 2456, 'label' => 'Salad'), 96 => array('no' => 4889, 'label' => 'Cream') ); $smarty->assign('items', $items_list); ?>
|
Template untuk ditampilkan $items dengan
$myId dalam url <ul>
{foreach from=$items key=myId item=i}
<li><a href="item.php?id={$myId}">{$i.no}: {$i.label}</li>
{/foreach}
</ul> |
Contoh di atas akan menampilkan:
<ul>
<li><a href="item.php?id=23">2456: Salad</li>
<li><a href="item.php?id=96">4889: Cream</li>
</ul> |
|
Teladan 7-8. {foreach} dengan pengulangan item dan key Menempatkan array ke Smarty, kunci berisi kunci untuk setiap nilai
yang diulang.
<?php $smarty->assign('contacts', array( array('phone' => '1', 'fax' => '2', 'cell' => '3'), array('phone' => '555-4444', 'fax' => '555-3333', 'cell' => '760-1234') )); ?>
|
Template yang menampilkan $contact. {foreach name=outer item=contact from=$contacts}
<hr />
{foreach key=key item=item from=$contact}
{$key}: {$item}<br />
{/foreach}
{/foreach} |
Contoh diatas akan menampilkan:
<hr />
phone: 1<br />
fax: 2<br />
cell: 3<br />
<hr />
phone: 555-4444<br />
fax: 555-3333<br />
cell: 760-1234<br /> |
|
Teladan 7-9. Contoh database dengan {foreachelse} Contoh database (seperti PEAR atau ADODB) dari naskah pencarian, hasil query
ditempatkan ke Smarty
<?php $search_condition = "where name like '$foo%' "; $sql = 'select contact_id, name, nick from contacts '.$search_condition.' order by name'; $smarty->assign('results', $db->getAssoc($sql) ); ?>
|
Template yang menampilkan "None found"
jika tidak ada hasil dengan {foreachelse}. {foreach key=cid item=con from=$results}
<a href="contact.php?contact_id={$cid}">{$con.name} - {$con.nick}</a><br />
{foreachelse}
No items were found in the search
{/foreach} |
|
.index
index berisi indeks array saat ini, dimulai dengan nol.
Teladan 7-10. contoh index
{* Blok header ditampilkan setiap lima baris *} <table> {foreach from=$items key=myId item=i name=foo} {if $smarty.foreach.foo.index % 5 == 0} <tr><th>Title</th></tr> {/if} <tr><td>{$i.label}</td></tr> {/foreach} </table>
|
|
.iteration
iteration berisi iterasi perulangan saat ini dan
selalu dimulai dari satu, tidak seperti
indeks.
Ia bertambah satu setiap kali iterasi.
Teladan 7-11. contoh iteration dan indeks
{* ini akan menampilkan 0|1, 1|2, 2|3, ... dst *} {foreach from=$myArray item=i name=foo} {$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration}, {/foreach}
|
|
.first
first adalah TRUE jika iterasi {foreach}
saat ini adalah yang awal.
Teladan 7-12. contoh properti first
{* tampilkan LATEST pada item pertama, sebaliknya id *} <table> {foreach from=$items key=myId item=i name=foo} <tr> <td>{if $smarty.foreach.foo.first}LATEST{else}{$myId}{/if}</td> <td>{$i.label}</td> </tr> {/foreach} </table>
|
|
.last
last disetel TRUE jika iterasi
{foreach} saat ini adalah yang terakhir.
Teladan 7-13. contoh properti last
{* Tambah garis horisontal di akhir daftar *} {foreach from=$items key=part_id item=prod name=products} <a href="#{$part_id}">{$prod}</a>{if $smarty.foreach.products.last}<hr>{else},{/if} {foreachelse} ... konten ... {/foreach}
|
|
.show
show dipakai sebagai parameter untuk {foreach}.
show adalah nilai boolean. Jika FALSE,
{foreach} tidak akan ditampilkan. Jika terdapat
{foreachelse}, akan ditampilkan secara selang-seling.
.total
total berisi jumlah iterasi yang akan diulang
{foreach}.
Ini dapat digunakan di dalam atau setelah {foreach}.
Teladan 7-14. contoh properti total
{* menampilkan baris yang dikembalikan di akhir *} {foreach from=$items key=part_id item=prod name=foo} {$prod.name><hr/> {if $smarty.foreach.foo.last} <div id="total">{$smarty.foreach.foo.total} items</div> {/if} {foreachelse} ... something else ... {/foreach}
|
|
Lihat juga {section}
dan $smarty.foreach.
|
|
|