{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.
Attribute NameTypeRequiredDefaultDescriptionfromarrayYesn/aArray yang anda ulang terusitemstringYesn/aNama variabel yang jadi elemen saat inikeystringNon/aNama variabel yang saat ini jadi kuncinamestringNon/aNama perulangan foreach untuk mengakses properti
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.
CatatanAtribut 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.
Atribut item
assign('myArray', $arr);
?>
]]>
Template untuk ditampilkan $myArray dalam daftar tidak-berurut
{foreach from=$myArray item=foo}
{$foo}
{/foreach}
]]>
Contoh di atas akan menampilkan:
1000
1001
1002
]]>
Mendemonstrasikan atribut item dan key
'Tennis', 3 => 'Swimming', 8 => 'Coding');
$smarty->assign('myArray', $arr);
?>
]]>
Template untuk ditampilkan $myArray sebagai
pasangan kunci/nilai, seperti
foreach
PHP.
{foreach from=$myArray key=k item=v}
{$k}: {$v}
{/foreach}
]]>
Contoh di atas akan menampilkan:
9: Tennis
3: Swimming
8: Coding
]]>
{foreach} dengan asosiatif atribut item
array('no' => 2456, 'label' => 'Salad'),
96 => array('no' => 4889, 'label' => 'Cream')
);
$smarty->assign('items', $items_list);
?>
]]>
Template untuk ditampilkan $items dengan
$myId dalam url
{foreach from=$items key=myId item=i}
]]>
{foreach} dengan pengulangan item dan keyMenempatkan array ke Smarty, kunci berisi kunci untuk setiap nilai
yang diulang.
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 key=key item=item from=$contact}
{$key}: {$item}
{/foreach}
{/foreach}
]]>
Contoh diatas akan menampilkan:
phone: 1
fax: 2
cell: 3
phone: 555-4444
fax: 555-3333
cell: 760-1234
]]>
Contoh database dengan {foreachelse}Contoh database (seperti PEAR atau ADODB) dari naskah pencarian, hasil query
ditempatkan ke Smarty
assign('results', $db->getAssoc($sql) );
?>
]]>
Template yang menampilkan None found
jika tidak ada hasil dengan {foreachelse}.
{$con.name} - {$con.nick}
{foreachelse}
No items were found in the search
{/foreach}
]]>
.indexindex berisi indeks array saat ini, dimulai dengan nol.
contoh index
{foreach from=$items key=myId item=i name=foo}
{if $smarty.foreach.foo.index % 5 == 0}
Title
{/if}
{$i.label}
{/foreach}
]]>
.iterationiteration berisi iterasi perulangan saat ini dan
selalu dimulai dari satu, tidak seperti
indeks.
Ia bertambah satu setiap kali iterasi.
contoh iteration dan indeks.firstfirst adalah &true; jika iterasi {foreach}
saat ini adalah yang awal.
contoh properti first
{foreach from=$items key=myId item=i name=foo}
{/foreach}
]]>
.lastlast disetel &true; jika iterasi
{foreach} saat ini adalah yang terakhir.
contoh properti last
{$prod}{if $smarty.foreach.products.last}{else},{/if}
{foreachelse}
... konten ...
{/foreach}
]]>
.showshow dipakai sebagai parameter untuk {foreach}.
show adalah nilai boolean. Jika &false;,
{foreach} tidak akan ditampilkan. Jika terdapat
{foreachelse}, akan ditampilkan secara selang-seling.
.totaltotal berisi jumlah iterasi yang akan diulang
{foreach}.
Ini dapat digunakan di dalam atau setelah {foreach}.
contoh properti total
{if $smarty.foreach.foo.last}
{$smarty.foreach.foo.total} items
{/if}
{foreachelse}
... something else ...
{/foreach}
]]>
Lihat juga {section}
dan $smarty.foreach.