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

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

Example 7.30. Boucler dans un simple tableau avec {section}

assign() un tableau à Smarty


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

Le template qui affiche le tableau


{* Cet exemple affichera toutes les valeurs du tableau $custid *}
{section name=customer loop=$custid}
  id: {$custid[customer]}<br />
{/section}
<hr />
{* Affiche toutes les valeurs du tableau $custid, en ordre inverse *}
{section name=foo loop=$custid step=-1}
  {$custid[foo]}<br />
{/section}

  

L'exemple ci-dessus affichera :


id: 1000<br />
id: 1001<br />
id: 1002<br />
<hr />
id: 1002<br />
id: 1001<br />
id: 1000<br />

  

Example 7.31. {section} sans un tableau assigné


{section name=foo start=10 loop=20 step=2}
  {$smarty.section.foo.index}
{/section}
<hr />
{section name=bar loop=21 max=6 step=-2}
  {$smarty.section.bar.index}
{/section}

L'exemple ci-dessus affichera :

  
10 12 14 16 18
<hr />
20 18 16 14 12 10

  

Example 7.32. 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}.


{section name=anything loop=$myArray}
  {$myArray[anything].foo}
  {$name[anything]}
  {$address[anything].bar}
{/section}

  

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

  
<?php
$data = array(
          array('name' => '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


{section name=customer loop=$contacts}
<p>
  name: {$contacts[customer].name}<br />
  home: {$contacts[customer].home}<br />
  cell: {$contacts[customer].cell}<br />
  e-mail: {$contacts[customer].email}
</p>
{/section}

  

L'exemple ci-dessus affichera :


<p>
  name: John Smith<br />
  home: 555-555-5555<br />
  cell: 666-555-5555<br />
  e-mail: john@myexample.com
</p>
<p>
  name: Jack Jones<br />
  home phone: 777-555-5555<br />
  cell phone: 888-555-5555<br />
  e-mail: jack@myexample.com
</p>
<p>
  name: Jane Munson<br />
  home phone: 000-555-5555<br />
  cell phone: 123456<br />
  e-mail: jane@myexample.com
</p>

  

Example 7.34. {section} démontrant l'utilisation de la variable loop

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.


<?php

$id = array(1001,1002,1003);
$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}


{section name=customer loop=$custid}
<p>
  id: {$custid[customer]}<br />
  name: {$name[customer]}<br />
  address: {$address[customer]}
</p>
{/section}

  

L'exemple ci-dessus affichera :


<p>
  id: 1000<br />
  name: John Smith<br />
  address: 253 Abbey road
</p>
<p>
  id: 1001<br />
  name: Jack Jones<br />
  address: 417 Mulberry ln
</p>
<p>
  id: 1002<br />
  name: Jane Munson<br />
  address: 5605 apple st
</p>

  

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


<?php

$id = array(1001,1002,1003);
$smarty->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.


{section name=customer loop=$custid}
<hr>
  id: {$custid[customer]}<br />
  name: {$name[customer]}<br />
  address: {$address[customer]}<br />
  {section name=contact loop=$contact_type[customer]}
    {$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br />
  {/section}
{/section}

  

L'exemple ci-dessus affichera :


<hr>
  id: 1000<br />
  name: John Smith<br />
  address: 253 N 45th<br />
    home phone: 555-555-5555<br />
    cell phone: 666-555-5555<br />
    e-mail: john@myexample.com<br />
<hr>
  id: 1001<br />
  name: Jack Jones<br />
  address: 417 Mulberry ln<br />
    home phone: 123-456-4<br />
    web: www.example.com<br />
<hr>
  id: 1002<br />
  name: Jane Munson<br />
  address: 5605 apple st<br />
    cell phone: 0457878<br />

  

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

  
<?php
$sql = 'select id, name, home, cell, email from contacts '
       ."where name like '$foo%' ";
$smarty->assign('contacts', $db->getAll($sql));
?>

Le template pour afficher le résultat de la base de données dans un tableau HTML


<table>
<tr><th>&nbsp;</th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr>
{section name=co loop=$contacts}
  <tr>
    <td><a href="view.php?id={$contacts[co].id}">view<a></td>
    <td>{$contacts[co].name}</td>
    <td>{$contacts[co].home}</td>
    <td>{$contacts[co].cell}</td>
    <td>{$contacts[co].email}</td>
  <tr>
{sectionelse}
  <tr><td colspan="5">Aucun élément n'a été trouvé</td></tr>
{/section}
</table>


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

Example 7.37. Exemple avec la propriété index

FYI

$custid[customer.index] et $custid[customer] sont identiques.


{section name=customer loop=$custid}
  {$smarty.section.customer.index} id: {$custid[customer]}<br />
{/section}

  

L'exemple ci-dessus affichera :


0 id: 1000<br />
1 id: 1001<br />
2 id: 1002<br />

   

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

Example 7.38. Exemple avec les propriétés index, index_next et index_prev


<?php
$data = array(1001,1002,1003,1004,1005);
$smarty->assign('rows',$data);
?>

Le template pour afficher le tableau ci-dessus dans un tableau HTML


{* $rows[row.index] et $rows[row] sont identiques *}
<table>
  <tr>
    <th>index</th><th>id</th>
    <th>index_prev</th><th>prev_id</th>
    <th>index_next</th><th>next_id</th>
  </tr>
{section name=row loop=$rows}
  <tr>
    <td>{$smarty.section.row.index}</td><td>{$rows[row]}</td>
    <td>{$smarty.section.row.index_prev}</td><td>{$rows[row.index_prev]}</td>
    <td>{$smarty.section.row.index_next}</td><td>{$rows[row.index_next]}</td>
  </tr>
{/section}
</table>

  

L'exemple ci-dessus affichera un tableau HTML contenant :


index  id    index_prev prev_id index_next next_id
0      1001  -1	                1          1002
1      1002  0          1001    2          1003
2      1003  1          1002    3          1004
3      1004  2          1003    4          1005
4      1005  3          1004    5

   

.iteration

iteration contient l'itération courante de la boucle et commence à un.

Note

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.

Example 7.39. Exemple avec la propriété iteration


<?php
// array of 3000 to 3015
$id = range(3000,3015);
$smarty->assign('arr',$id);
?>

Le template pour afficher tous les autres éléments du tableau $arr comme step=2


{section name=cu loop=$arr start=5 step=2}
  iteration={$smarty.section.cu.iteration}
  index={$smarty.section.cu.index}
  id={$custid[cu]}<br />
{/section}

  

L'exemple ci-dessus affichera :


iteration=1 index=5 id=3005<br />
iteration=2 index=7 id=3007<br />
iteration=3 index=9 id=3009<br />
iteration=4 index=11 id=3011<br />
iteration=5 index=13 id=3013<br />
iteration=6 index=15 id=3015<br />

   

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.


<table>
{section name=co loop=$contacts}
  {if $smarty.section.co.iteration % 5 == 1}
    <tr><th>&nbsp;</th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr>
  {/if}
  <tr>
    <td><a href="view.php?id={$contacts[co].id}">view<a></td>
    <td>{$contacts[co].name}</td>
    <td>{$contacts[co].home}</td>
    <td>{$contacts[co].cell}</td>
    <td>{$contacts[co].email}</td>
  <tr>
{/section}
</table>

  

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

Example 7.40. Exemple avec les propriétés first et last

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.


{section name=customer loop=$customers}
  {if $smarty.section.customer.first}
    <table>
    <tr><th>id</th><th>customer</th></tr>
  {/if}

  <tr>
    <td>{$customers[customer].id}}</td>
    <td>{$customers[customer].name}</td>
  </tr>

  {if $smarty.section.customer.last}
    <tr><td></td><td>{$smarty.section.customer.total} customers</td></tr>
    </table>
  {/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}.

Example 7.41. Exemple avec la propriété loop


{section name=customer loop=$custid}
  {$smarty.section.customer.index} id: {$custid[customer]}<br />
{/section}
There are {$smarty.section.customer.loop} customers shown above.

  

L'exemple ci-dessus affichera :


0 id: 1000<br />
1 id: 1001<br />
2 id: 1002<br />
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.

Example 7.42. Exemple avec la propriété show

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 name=customer loop=$customers show=$show_customer_info}
  {$smarty.section.customer.rownum} id: {$customers[customer]}<br />
{/section}

{if $smarty.section.customer.show}
  the section was shown.
{else}
  the section was not shown.
{/if}

  

L'exemple ci-dessus affichera :


1 id: 1000<br />
2 id: 1001<br />
3 id: 1002<br />

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

Example 7.43. Exemple avec la propriété total


{section name=customer loop=$custid step=2}
  {$smarty.section.customer.index} id: {$custid[customer]}<br />
{/section}
   There are {$smarty.section.customer.total} customers shown above.

  

Voir aussi {foreach} et $smarty.section.

Comments
No comments for this page.

Advertisement

Sponsors [info]

Sponsors