{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 attribut Type Requis Defaut Description from tableau oui n/a Le tableau à parcourir item chaîne de caractère Oui n/a Le nom de la variable "élément courant" key chaîne de caractère Non n/a Le nom de la variable représentant la clef courante. name chaîne de caractère Non n/a Le 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. Note The 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 <parameter>item</parameter> 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 <parameter>item</parameter> et <parameter>key</parameter> '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 <parameter>item</parameter> 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}
  • {$i.no}: {$i.label}
  • {/foreach} ]]>
    L'exemple ci-dessus affichera :
  • 2456: Salad
  • 4889: Cream
  • ]]>
    {foreach} avec <parameter>item</parameter> et <parameter>key</parameter> Assigne 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} ]]> .index index contient l'index courant du tableau, en commançant par zéro. Exemple avec <parameter>index</parameter> {foreach from=$items key=myId item=i name=foo} {if $smarty.foreach.foo.index % 5 == 0} Title {/if} {$i.label} {/foreach} ]]> .iteration iteration 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 <parameter>iteration</parameter> et <parameter>index</parameter> .first first vaut &true; si l'itération courante de {foreach} est l'initial. Exemple avec <parameter>first</parameter> {foreach from=$items key=myId item=i name=foo} {if $smarty.foreach.foo.first}LATEST{else}{$myId}{/if} {$i.label} {/foreach} ]]> .last last est défini à &true; si l'itération courante de {foreach} est la dernière. Exemple avec <parameter>last</parameter> {$prod}{if $smarty.foreach.products.last}
    {else},{/if} {foreachelse} ... contenu ... {/foreach} ]]>
    .show show 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. .total total contient le nombre d'itérations que cette boucle {foreach} effectuera. Il peut être utilisé dans ou après un {foreach}. Exemple avec <parameter>total</parameter>
    {if $smarty.foreach.foo.last}
    {$smarty.foreach.foo.total} items
    {/if} {foreachelse} ... quelque chose d'autre ... {/foreach} ]]>
    Voir aussi {section} et $smarty.foreach.