{section},{sectionelse} Une {section} sert à boucler dans des tableaux de données, contrairement à {foreach} qui est utilisé pour boucler dans un simple tableau associatif. Chaque balise {section} doit aller de paire avec une balise {/section} fermante. Nom attribut Type Requis Défaut Description name chaîne de caractère Oui n/a Le nom de la section loop mixed Oui n/a Valeur qui détermine le nombre de fois que la boucle sera exécutée start entier Non 0 La position de l'index ou la section commencera son parcours. Si la valeur donnée est négative, la position de départ est calculée depuis la fin du tableau. Par exemple, s'il existe 7 valeurs dans le tableau à parcourir et que start est à -2, l'index de départ sera 5. Les valeurs incorrectes (en dehors de la portée du tableau) sont automatiquements tronquées à la valeur correcte la plus proche step entier Non 1 La valeur du pas qui sera utilisé pour parcourir le tableau.Par exemple, step=2 parcourera les indices 0,2,4, etc. Si step est négatif, le tableau sera parcouru en sens inverse max entier Non n/a Définit le nombre maximum de fois que le tableau sera parcouru show booléen No &true; Détermine s'il est nécessaire d'afficher la section ou non Les paramètres requis sont name et loop. Le name de la {section} est, selon votre choix, composé de lettres, chiffres et underscores, comme pour les variables PHP. Les sections peuvent être imbriquées mais leurs noms doivent être uniques. L'attribut loop, habituellement un tableau de valeurs, détermine le nombre de fois que {section} doit boucler. Lors de l'affichage d'une variable dans une {section}, le nom de la {section} doit être fournis après le nom de la variable entre crochets []. {sectionelse} est exécuté lorsqu'aucune valeur n'est trouvée dans la variable à parcourir. {section} a également ces propres variables qui gérent les propriétés de la {section}. Ces propriétés sont accessibles comme ceci : {$smarty.section.name.property}name est l'attribut name. Les propriétés de {section} sont index, index_prev, index_next, iteration, first, last, rownum, loop, show, total. Boucler dans un simple tableau avec {section} assign() un tableau à Smarty assign('custid',$data); ?> ]]> Le template qui affiche le tableau {/section}
{* Affiche toutes les valeurs du tableau $custid, en ordre inverse *} {section name=foo loop=$custid step=-1} {$custid[foo]}
{/section} ]]>
L'exemple ci-dessus affichera : id: 1001
id: 1002

id: 1002
id: 1001
id: 1000
]]>
{section} sans un tableau assigné {section name=bar loop=21 max=6 step=-2} {$smarty.section.bar.index} {/section} ]]> L'exemple ci-dessus affichera : 20 18 16 14 12 10 ]]> Nommage d'une {section} Le name de la {section} peut être ce que vous voulez, voir les variables PHP. Il sera utilisé pour référencer les données de la {section}. Boucler dans un tableau associatif avec {section} Voici un exemple d'affichage d'un tableau associatif de données avec {section}. Ce qui suit est le script PHP assignant le tableau $contacts à Smarty. 'John Smith', 'home' => '555-555-5555', 'cell' => '666-555-5555', 'email' => 'john@myexample.com'), array('name' => 'Jack Jones', 'home' => '777-555-5555', 'cell' => '888-555-5555', 'email' => 'jack@myexample.com'), array('name' => 'Jane Munson', 'home' => '000-555-5555', 'cell' => '123456', 'email' => 'jane@myexample.com') ); $smarty->assign('contacts',$data); ?> ]]> Le template pour afficher $contacts name: {$contacts[customer].name}
home: {$contacts[customer].home}
cell: {$contacts[customer].cell}
e-mail: {$contacts[customer].email}

{/section} ]]>
L'exemple ci-dessus affichera : name: John Smith
home: 555-555-5555
cell: 666-555-5555
e-mail: john@myexample.com

name: Jack Jones
home phone: 777-555-5555
cell phone: 888-555-5555
e-mail: jack@myexample.com

name: Jane Munson
home phone: 000-555-5555
cell phone: 123456
e-mail: jane@myexample.com

]]>
{section} démontrant l'utilisation de la variable <varname>loop</varname> Cet exemple suppose que $custid, $name et $address sont tous des tableaux contenant le même nombre de valeurs. Tout d'abord, le script PHP qui assigne les tableaux à Smarty. assign('custid',$id); $fullnames = array('John Smith','Jack Jones','Jane Munson'); $smarty->assign('name',$fullnames); $addr = array('253 Abbey road', '417 Mulberry ln', '5605 apple st'); $smarty->assign('address',$addr); ?> ]]> La variable loop détermine uniquement le nombre de fois qu'il faut boucler. Vous pouvez accéder à n'importe quelle variable du template dans la {section} id: {$custid[customer]}
name: {$name[customer]}
address: {$address[customer]}

{/section} ]]>
L'exemple ci-dessus affichera : id: 1000
name: John Smith
address: 253 Abbey road

id: 1001
name: Jack Jones
address: 417 Mulberry ln

id: 1002
name: Jane Munson
address: 5605 apple st

]]>
{section} imbriquée Les sections peuvent être imbriquées autant de fois que vous le voulez. Avec les sections imbriquées, vous pouvez accéder aux structures de données complexes, comme les tableaux multi-dimentionnels. Voici un script PHP qui assigne les tableaux. assign('custid',$id); $fullnames = array('John Smith','Jack Jones','Jane Munson'); $smarty->assign('name',$fullnames); $addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st'); $smarty->assign('address',$addr); $types = array( array( 'home phone', 'cell phone', 'e-mail'), array( 'home phone', 'web'), array( 'cell phone') ); $smarty->assign('contact_type', $types); $info = array( array('555-555-5555', '666-555-5555', 'john@myexample.com'), array( '123-456-4', 'www.example.com'), array( '0457878') ); $smarty->assign('contact_info', $info); ?> ]]> Dans ce template, $contact_type[customer] est un tableau de types de contacts. id: {$custid[customer]}
name: {$name[customer]}
address: {$address[customer]}
{section name=contact loop=$contact_type[customer]} {$contact_type[customer][contact]}: {$contact_info[customer][contact]}
{/section} {/section} ]]>
L'exemple ci-dessus affichera : id: 1000
name: John Smith
address: 253 N 45th
home phone: 555-555-5555
cell phone: 666-555-5555
e-mail: john@myexample.com

id: 1001
name: Jack Jones
address: 417 Mulberry ln
home phone: 123-456-4
web: www.example.com

id: 1002
name: Jane Munson
address: 5605 apple st
cell phone: 0457878
]]>
Exemple avec une base de données et {sectionelse} Les résultats d'une recherche dans une base de données (e.g. ADODB ou PEAR) sont assignés à Smarty assign('contacts', $db->getAll($sql)); ?> ]]> Le template pour afficher le résultat de la base de données dans un tableau HTML  Name>HomeCellEmail {section name=co loop=$contacts} view {$contacts[co].name} {$contacts[co].home} {$contacts[co].cell} {$contacts[co].email} {sectionelse} Aucun élément n'a été trouvé {/section} ]]> .index index contient l'index courant du tableau, en commençant par zéro ou par start s'il est fourni. Il s'incrémente d'un en un ou de step s'il est fourni. Note technique Si les propriétés step et start ne sont pas modifiés, alors le fonctionnement est le même que celui de la propriété iteration, mise à part qu'il commence à zéro au lieu de un. Exemple avec la propriété <varname>index</varname> FYI $custid[customer.index] et $custid[customer] sont identiques. {/section} ]]> L'exemple ci-dessus affichera : 1 id: 1001
2 id: 1002
]]>
.index_prev index_prev est l'index de la boucle précédente. Lors de la première boucle, il vaut -1. .index_next index_next est l'index de la prochaine boucle. Lors de la prochaine boucle, il vaudra un de moins que l'index courant, suivant la configuration de l'attribut step, s'il est fourni. Exemple avec les propriétés <varname>index</varname>, <varname>index_next</varname> et <varname>index_prev</varname> assign('rows',$data); ?> ]]> Le template pour afficher le tableau ci-dessus dans un tableau HTML indexid index_prevprev_id index_nextnext_id {section name=row loop=$rows} {$smarty.section.row.index}{$rows[row]} {$smarty.section.row.index_prev}{$rows[row.index_prev]} {$smarty.section.row.index_next}{$rows[row.index_next]} {/section} ]]> L'exemple ci-dessus affichera un tableau HTML contenant : .iteration iteration contient l'itération courante de la boucle et commence à un. Ceci n'est pas affecté par les propriétés {section} start, step et max contrairement à la propriété index. iteration commence également à un au lieu de zéro contrairement à index. rownum est un alias de iteration, ils sont identiques. Exemple avec la propriété <varname>iteration</varname> assign('arr',$id); ?> ]]> Le template pour afficher tous les autres éléments du tableau $arr comme step=2 {/section} ]]> L'exemple ci-dessus affichera : iteration=2 index=7 id=3007
iteration=3 index=9 id=3009
iteration=4 index=11 id=3011
iteration=5 index=13 id=3013
iteration=6 index=15 id=3015
]]>
Un autre exemple d'utilisation de la propriété iteration est d'afficher un bloc d'en-tête d'un tableau toutes les 5 lignes. Utilisez la fonction {if} avec l'opérateur mod. {section name=co loop=$contacts} {if $smarty.section.co.iteration % 5 == 1}  Name>HomeCellEmail {/if}
view {$contacts[co].name} {$contacts[co].home} {$contacts[co].cell} {$contacts[co].email} {/section} ]]> .first first est défini à &true; si l'itération courante de {section} est l'initiale. .last last est défini à &true; si l'itération courante de la section est la dernière. Exemple avec les propriétés <varname>first</varname> et <varname>last</varname> Cet exemple boucle sur le tableau $customers, affiche un bloc d'en-tête lors de la première itération et, lors de la dernière, affiche un bloc de pied de page. Utilise aussi la propriété total. idcustomer {/if} {$customers[customer].id}} {$customers[customer].name} {if $smarty.section.customer.last} {$smarty.section.customer.total} customers {/if} {/section} ]]> .rownum rownum contient l'itération courante de la boucle, commençant à un. C'est un alias de iteration, ils fonctionnent exactement de la même façon. .loop loop contient le dernier index de la boucle de la section. Il peut être utilisé dans ou après la {section}. Exemple avec la propriété <varname>loop</varname> {/section} There are {$smarty.section.customer.loop} customers shown above. ]]> L'exemple ci-dessus affichera : 1 id: 1001
2 id: 1002
There are 3 customers shown above. ]]>
.show show est utilisé en tant que paramètre à la section et est une valeur booléenne. S'il vaut &false;, la section ne sera pas affichée. S'il y a un {sectionelse}, il sera affiché de façon alternative. Exemple avec la propriété <varname>show</varname> Une valeur booléenne $show_customer_info est passée depuis l'application PHP, pour réguler l'affichage ou non de cette section. {/section} {if $smarty.section.customer.show} the section was shown. {else} the section was not shown. {/if} ]]> L'exemple ci-dessus affichera : 2 id: 1001
3 id: 1002
the section was shown. ]]>
.total total contient le nombre d'itérations que cette {section} bouclera. Il peut être utilisé dans ou après une {section}. Exemple avec la propriété <varname>total</varname> {/section} There are {$smarty.section.customer.total} customers shown above. ]]> Voir aussi {foreach} et $smarty.section.