Get Smarty

Donate

Paypal

Smarty Icon

You may use the Smarty logo according to the trademark notice.

Smarty Template Engine Smarty Template Engine

For sponsorship, advertising, news or other inquiries, contact us at:

Sites Using Smarty

Advertisement

{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.

Example 7.5. L'attribut item


<?php
$arr = array(1000, 1001, 1002);
$smarty->assign('myArray', $arr);
?>

  

Template pour afficher $myArray dans une liste non-ordonnée.


<ul>
 {foreach from=$myArray item=foo}
 <li>{$foo}</li>
 {/foreach}
</ul>

  

L'exemple ci-dessus affichera :


<ul>
 <li>1000</li>
 <li>1001</li>
 <li>1002</li>
</ul>

  

Example 7.6. Utilisation des attributs item et key


<?php
$arr = array(9 => 'Tennis', 3 => 'Natation', 8 => 'Programmation');
$smarty->assign('myArray', $arr);
?>

  

Le template affiche le tableau $myArray comme paire clé/valeur, comme la fonction PHP foreach.


<ul>
 {foreach from=$myArray key=k item=v}
 <li>{$k}: {$v}</li>
 {/foreach}
</ul>

  

L'exemple ci-dessus affichera :


<ul>
 <li>9: Tennis</li>
 <li>3: Natation</li>
 <li>8: Programmation</li>
</ul>

  

Example 7.7. {foreach} avec un attribut associatif item


<?php
$items_list = array(23 => 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.


<ul>
 {foreach from=$items key=myId item=i}
 <li><a href="item.php?id={$myId}">{$i.no}: {$i.label}</li>
  {/foreach}
 </ul>
 
  

L'exemple ci-dessus affichera :


<ul>
<li><a href="item.php?id=23">2456: Salad</li>
<li><a href="item.php?id=96">4889: Cream</li>
</ul>

  

Example 7.8. {foreach} avec item et key

Assigne un tableau à Smarty, la clé contient la clé pour chaque valeur de la boucle.


<?php
$smarty->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 name=outer item=contact from=$contacts}
    <hr />
    {foreach key=key item=item from=$contact}
        {$key}: {$item}<br />
    {/foreach}
{/foreach}

  

L'exemple ci-dessus affichera :


<hr />
phone: 1<br />
fax: 2<br />
cell: 3<br />
<hr />
phone: 555-4444<br />
fax: 555-3333<br />
cell: 760-1234<br />

  

Example 7.9. 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.


<?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) );
?>

  

Le template qui affiche None found si aucun résultat avec {foreachelse}.


{foreach key=cid item=con from=$results}
<a href="contact.php?contact_id={$cid}">{$con.name} - {$con.nick}</a><br />
{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.

Example 7.10. Exemple avec index

 
 {* L'en-tête du block est affiché toutes les 5 lignes *}
<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 contient l'itération courante de la boucle et commence toujours à 1, contrairement à index. Il est incrémenté d'un, à chaque itération.

Example 7.11. Exemple avec iteration et index


{* this will output 0|1, 1|2, 2|3, ... etc *}
{foreach from=$myArray item=i name=foo}
{$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration},
{/foreach}

  

.first

first vaut TRUE si l'itération courante de {foreach} est l'initial.

Example 7.12. Exemple avec first


 {* affiche LATEST sur le premier élément, sinon, l'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 est défini à TRUE si l'itération courante de {foreach} est la dernière.

Example 7.13. Exemple avec last


{* Ajout une barre horizontale à la fin de la liste *}
{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}
... 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}.

Example 7.14. Exemple avec total


{* affiche les lignes retournées à la fin *}
{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}
... quelque chose d'autre ...
{/foreach}

 

Voir aussi {section} et $smarty.foreach.

Comments
No comments for this page.

Advertisement

Sponsors [info]

Sponsors