What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
{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.
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
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
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
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
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
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
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
.