{foreach},{foreachelse}{foreach} est utilisé pour parcourir un
simple tableau associatif,
contrairement à {section}
qui effectue une boucle sur les tableaux de données.
La synthaxe pour
{foreach} est plus simple que
{section},
mais ne peut être utilisé que pour des tableau simple.
Chaque {foreach} doit aller de paire avec une balise fermante
{/foreach}.
Nom attributTypeRequisDefautDescriptionfromtableauouin/aLe tableau à parcouriritemchaîne de caractèreOuin/aLe nom de la variable "élément courant"keychaîne de caractèreNonn/aLe nom de la variable représentant la clef courante.namechaîne de caractèreNonn/aLe nom de la boucle foreach, qui nous permettra
d'accéder à ses propriétés.
Required attributes are from and item.
The name of the {foreach} loop can be anything
you like, made up of letters, numbers and underscores, like
PHP variables.
{foreach} loops can be nested, and the nested
{foreach} names must be unique from each other.
The from attribute, usually an array of values,
determines the number of times {foreach} will loop.
{foreachelse} is executed when there are no
values in the from variable.
{foreach} loops also have their own variables that handle properties.
These are accessed with:
{$smarty.foreach.name.property} with
name being the
name attribute.
NoteThe name attribute is only required when
you want to access a {foreach} property, unlike
{section}.
Accessing a {foreach} property with name
undefined does not throw an error, but leads to unpredictable results instead.
{foreach} properties are
index,
iteration,
first,
last,
show,
total.
L'attribut item
assign('myArray', $arr);
?>
]]>
Template pour afficher $myArray dans une liste non-ordonnée.
{foreach from=$myArray item=foo}
{$foo}
{/foreach}
]]>
L'exemple ci-dessus affichera :
1000
1001
1002
]]>
Utilisation des attributs item et key
'Tennis', 3 => 'Natation', 8 => 'Programmation');
$smarty->assign('myArray', $arr);
?>
]]>
Le template affiche le tableau $myArray comme paire clé/valeur,
comme la fonction PHP
foreach.
{foreach from=$myArray key=k item=v}
{$k}: {$v}
{/foreach}
]]>
L'exemple ci-dessus affichera :
9: Tennis
3: Natation
8: Programmation
]]>
{foreach} avec un attribut associatif item
array('no' => 2456, 'label' => 'Salad'),
96 => array('no' => 4889, 'label' => 'Cream')
);
$smarty->assign('items', $items_list);
?>
]]>
Le template affiche $items avec
$myId dans l'URL.
{foreach from=$items key=myId item=i}
]]>
{foreach} avec item et keyAssigne un tableau à Smarty, la clé contient la clé pour chaque valeur de la boucle.
assign('contacts', array(
array('phone' => '1',
'fax' => '2',
'cell' => '3'),
array('phone' => '555-4444',
'fax' => '555-3333',
'cell' => '760-1234')
));
?>
]]>
Le template affiche $contact.
{foreach key=key item=item from=$contact}
{$key}: {$item}
{/foreach}
{/foreach}
]]>
L'exemple ci-dessus affichera :
phone: 1
fax: 2
cell: 3
phone: 555-4444
fax: 555-3333
cell: 760-1234
]]>
Exemple d'une base de données avec {foreachelse}Exemple d'un script de recherche dans une base de données (e.g. PEAR ou ADODB),
le résultat de la requête est assigné à Smarty.
assign('results', $db->getAssoc($sql) );
?>
]]>
Le template qui affiche None found
si aucun résultat avec {foreachelse}.
{$con.name} - {$con.nick}
{foreachelse}
Aucun élément n'a été trouvé dans la recherche
{/foreach}
]]>
.indexindex contient l'index courant du tableau, en commançant par zéro.
Exemple avec index
{foreach from=$items key=myId item=i name=foo}
{if $smarty.foreach.foo.index % 5 == 0}
Title
{/if}
{$i.label}
{/foreach}
]]>
.iterationiteration contient l'itération courante de la boucle et commence
toujours à 1, contrairement à
index.
Il est incrémenté d'un, à chaque itération.
Exemple avec iteration et index.firstfirst vaut &true; si l'itération courante de
{foreach} est l'initial.
Exemple avec first
{foreach from=$items key=myId item=i name=foo}
{/foreach}
]]>
.lastlast est défini à &true; si l'itération courante de
{foreach} est la dernière.
Exemple avec last
{$prod}{if $smarty.foreach.products.last}{else},{/if}
{foreachelse}
... contenu ...
{/foreach}
]]>
.showshow est utilisé en tant que paramètre à {foreach}.
show est une valeur booléenne. S'il vaut
&false;, {foreach} ne sera pas affiché.
S'il y a un {foreachelse}, il sera affiché alternativement.
.totaltotal contient le nombre d'itérations que cette boucle
{foreach} effectuera.
Il peut être utilisé dans ou après un {foreach}.
Exemple avec total
{if $smarty.foreach.foo.last}
{$smarty.foreach.foo.total} items
{/if}
{foreachelse}
... quelque chose d'autre ...
{/foreach}
]]>
Voir aussi
{section}
et $smarty.foreach.