PageRenderTime 13ms CodeModel.GetById 2ms app.highlight 7ms RepoModel.GetById 1ms app.codeStats 0ms

/documentation/fr/designers/language-builtin-functions/language-function-foreach.xml

https://bitbucket.org/hallgrennetworks/smarty
XML | 457 lines | 415 code | 20 blank | 22 comment | 0 complexity | 100efdb1bd68d73c855d9dd1bff32414 MD5 | raw file
  1<?xml version="1.0" encoding="UTF-8"?>
  2<!-- $Revision: 2972 $ -->
  3<!-- EN-Revision: 1.11 Maintainer: gerald Status: ready -->
  4
  5<sect1 id="language.function.foreach">
  6 <title>{foreach},{foreachelse}</title>
  7 <para>
  8  <varname>{foreach}</varname> est utilisé pour parcourir un
  9  <emphasis role="bold">simple tableau associatif</emphasis>,
 10  contrairement à <link linkend="language.function.section"><varname>{section}</varname></link>
 11  qui effectue une boucle sur les <emphasis role="bold">tableaux de données</emphasis>.
 12  La synthaxe pour
 13  <varname>{foreach}</varname> est plus simple que
 14  <link linkend="language.function.section"><varname>{section}</varname></link>,
 15  mais <emphasis role="bold">ne peut être utilisé que pour des tableau simple</emphasis>.
 16  Chaque <varname>{foreach}</varname> doit aller de paire avec une balise fermante 
 17  <varname>{/foreach}</varname>.
 18 </para>
 19 
 20 <informaltable frame="all">
 21  <tgroup cols="5">
 22   <colspec colname="param" align="center" />
 23   <colspec colname="type" align="center" />
 24   <colspec colname="required" align="center" />
 25   <colspec colname="default" align="center" />
 26   <colspec colname="desc" />
 27   <thead>
 28    <row>
 29     <entry>Nom attribut</entry>
 30     <entry>Type</entry>
 31     <entry>Requis</entry>
 32     <entry>Defaut</entry>
 33     <entry>Description</entry>
 34    </row>
 35   </thead>
 36   <tbody>
 37    <row>
 38     <entry>from</entry>
 39     <entry>tableau</entry>
 40     <entry>oui</entry>
 41     <entry><emphasis>n/a</emphasis></entry>
 42     <entry>Le tableau à parcourir</entry>
 43    </row>
 44    <row>
 45     <entry>item</entry>
 46     <entry>chaîne de caractère</entry>
 47     <entry>Oui</entry>
 48     <entry><emphasis>n/a</emphasis></entry>
 49     <entry>Le nom de la variable "élément courant"</entry>
 50    </row>
 51    <row>
 52     <entry>key</entry>
 53     <entry>chaîne de caractère</entry>
 54     <entry>Non</entry>
 55     <entry><emphasis>n/a</emphasis></entry>
 56     <entry>Le nom de la variable représentant la clef courante.</entry>
 57    </row>
 58    <row>
 59     <entry>name</entry>
 60     <entry>chaîne de caractère</entry>
 61     <entry>Non</entry>
 62     <entry><emphasis>n/a</emphasis></entry>
 63     <entry>Le nom de la boucle foreach, qui nous permettra
 64      d'accéder à ses propriétés.</entry>
 65    </row>
 66   </tbody>
 67  </tgroup>
 68 </informaltable>
 69 
 70 
 71 <itemizedlist>
 72  <listitem><para>
 73    Required attributes are <parameter>from</parameter> and <parameter>item</parameter>.
 74   </para></listitem>
 75  
 76  <listitem><para>
 77    The <parameter>name</parameter> of the <varname>{foreach}</varname> loop can be anything
 78    you like, made up of letters, numbers and underscores, like
 79    <ulink url="&url.php-manual;language.variables">PHP variables</ulink>.
 80   </para></listitem>
 81  
 82  <listitem><para>
 83    <varname>{foreach}</varname> loops can be nested, and the nested
 84    <varname>{foreach}</varname> names must be unique from each other.
 85   </para></listitem>
 86  
 87  <listitem><para>
 88    The <parameter>from</parameter> attribute, usually an array of values,
 89    determines the number of times <varname>{foreach}</varname> will loop.
 90   </para></listitem>
 91  
 92  <listitem><para>
 93    <varname>{foreachelse}</varname> is executed when there are no
 94    values in the <parameter>from</parameter> variable.
 95   </para></listitem>
 96  
 97  <listitem><para>
 98    <varname>{foreach}</varname> loops also have their own variables that handle properties.
 99    These are accessed with:
100    <link linkend="language.variables.smarty.loops">
101     <parameter>{$smarty.foreach.name.property}</parameter></link> with
102    <quote>name</quote> being the
103    <parameter>name</parameter> attribute.
104   </para>
105   <note>
106    <title>Note</title>
107    <para>The <parameter>name</parameter> attribute is only required when
108     you want to access a <varname>{foreach</varname>} property, unlike
109     <link linkend="language.function.section"><varname>{section}</varname></link>.
110     Accessing a <varname>{foreach}</varname> property with <parameter>name</parameter>
111     undefined does not throw an error, but leads to unpredictable results instead.
112    </para>
113   </note>
114  </listitem>
115  
116  <listitem><para>
117    <varname>{foreach}</varname> properties are
118    <link linkend="foreach.property.index"><parameter>index</parameter></link>,
119    <link linkend="foreach.property.iteration"><parameter>iteration</parameter></link>,
120    <link linkend="foreach.property.first"><parameter>first</parameter></link>,
121    <link linkend="foreach.property.last"><parameter>last</parameter></link>,
122    <link linkend="foreach.property.show"><parameter>show</parameter></link>,
123    <link linkend="foreach.property.total"><parameter>total</parameter></link>.
124   </para></listitem>
125 </itemizedlist>
126
127 <example>
128  <title>L'attribut <parameter>item</parameter></title>
129  <programlisting role="php">
130<![CDATA[
131<?php
132$arr = array(1000, 1001, 1002);
133$smarty->assign('myArray', $arr);
134?>
135]]>
136  </programlisting>
137  <para>
138   Template pour afficher <parameter>$myArray</parameter> dans une liste non-ordonnée.
139  </para>
140  <programlisting>
141<![CDATA[
142<ul>
143 {foreach from=$myArray item=foo}
144 <li>{$foo}</li>
145 {/foreach}
146</ul>
147]]>
148  </programlisting>
149  <para>
150   L'exemple ci-dessus affichera :
151  </para>
152  <screen>
153<![CDATA[
154<ul>
155 <li>1000</li>
156 <li>1001</li>
157 <li>1002</li>
158</ul>
159]]>
160  </screen>
161 </example>
162
163 <example>
164  <title>Utilisation des attributs <parameter>item</parameter> et <parameter>key</parameter></title>
165  <programlisting role="php">
166<![CDATA[
167<?php
168$arr = array(9 => 'Tennis', 3 => 'Natation', 8 => 'Programmation');
169$smarty->assign('myArray', $arr);
170?>
171]]>
172  </programlisting>
173  <para>
174   Le template affiche le tableau <parameter>$myArray</parameter> comme paire clé/valeur,
175   comme la fonction PHP
176   <ulink url="&url.php-manual;foreach"><varname>foreach</varname></ulink>.
177  </para>
178  <programlisting>
179<![CDATA[
180<ul>
181 {foreach from=$myArray key=k item=v}
182 <li>{$k}: {$v}</li>
183 {/foreach}
184</ul>
185]]>
186  </programlisting>
187  <para>
188   L'exemple ci-dessus affichera :
189  </para>
190  <screen>
191<![CDATA[
192<ul>
193 <li>9: Tennis</li>
194 <li>3: Natation</li>
195 <li>8: Programmation</li>
196</ul>
197]]>
198  </screen>
199 </example>
200
201 <example>
202  <title>{foreach} avec un attribut associatif <parameter>item</parameter></title>
203  <programlisting role="php">
204<![CDATA[
205<?php
206$items_list = array(23 => array('no' => 2456, 'label' => 'Salad'),
207    96 => array('no' => 4889, 'label' => 'Cream')
208);
209$smarty->assign('items', $items_list);
210?>
211]]>
212  </programlisting>
213  <para>
214   Le template affiche <parameter>$items</parameter> avec
215   <parameter>$myId</parameter> dans l'URL.
216  </para>
217  <programlisting>
218<![CDATA[
219<ul>
220 {foreach from=$items key=myId item=i}
221 <li><a href="item.php?id={$myId}">{$i.no}: {$i.label}</li>
222  {/foreach}
223 </ul>
224 ]]>
225  </programlisting>
226  <para>
227   L'exemple ci-dessus affichera :
228  </para>
229  <screen>
230<![CDATA[
231<ul>
232<li><a href="item.php?id=23">2456: Salad</li>
233<li><a href="item.php?id=96">4889: Cream</li>
234</ul>
235]]>
236  </screen>
237 </example>
238
239 <example>
240  <title>{foreach} avec <parameter>item</parameter> et <parameter>key</parameter></title>
241  <para>Assigne un tableau à Smarty, la clé contient la clé pour chaque valeur de la boucle.</para>
242  <programlisting role="php">
243<![CDATA[
244<?php
245$smarty->assign('contacts', array(
246array('phone' => '1',
247         'fax' => '2',
248         'cell' => '3'),
249         array('phone' => '555-4444',
250         'fax' => '555-3333',
251         'cell' => '760-1234')
252));
253?>
254]]>
255  </programlisting>
256  <para>Le template affiche <parameter>$contact</parameter>.</para>
257  <programlisting>
258<![CDATA[
259{foreach name=outer item=contact from=$contacts}
260    <hr />
261    {foreach key=key item=item from=$contact}
262        {$key}: {$item}<br />
263    {/foreach}
264{/foreach}
265]]>
266  </programlisting>
267  <para>
268   L'exemple ci-dessus affichera :
269  </para>
270  <screen>
271<![CDATA[
272<hr />
273phone: 1<br />
274fax: 2<br />
275cell: 3<br />
276<hr />
277phone: 555-4444<br />
278fax: 555-3333<br />
279cell: 760-1234<br />
280]]>
281  </screen>
282 </example>
283
284 <example>
285  <title>Exemple d'une base de données avec {foreachelse}</title>
286  <para>Exemple d'un script de recherche dans une base de données (e.g. PEAR ou ADODB),
287   le résultat de la requête est assigné à Smarty.</para>
288  <programlisting role="php">
289<![CDATA[
290<?php
291$search_condition = "where name like '$foo%' ";
292$sql = 'select contact_id, name, nick from contacts '.$search_condition.' order by name';
293$smarty->assign('results', $db->getAssoc($sql) );
294?>
295]]>
296  </programlisting>
297  <para>Le template qui affiche <quote>None found</quote>
298   si aucun résultat avec <varname>{foreachelse}</varname>.</para>
299  <programlisting>
300<![CDATA[
301{foreach key=cid item=con from=$results}
302<a href="contact.php?contact_id={$cid}">{$con.name} - {$con.nick}</a><br />
303{foreachelse}
304Aucun élément n'a été trouvé dans la recherche
305{/foreach}
306]]>
307   </programlisting>
308  </example>
309
310  <sect2 id="foreach.property.index">
311   <title>.index</title>
312   <para>
313    <parameter>index</parameter> contient l'index courant du tableau, en commançant par zéro.
314   </para>
315   <example>
316    <title>Exemple avec <parameter>index</parameter></title>
317    <programlisting role="php">
318 <![CDATA[
319 {* L'en-tête du block est affiché toutes les 5 lignes *}
320<table>
321 {foreach from=$items key=myId item=i name=foo}
322 {if $smarty.foreach.foo.index % 5 == 0}
323 <tr><th>Title</th></tr>
324 {/if}
325 <tr><td>{$i.label}</td></tr>
326 {/foreach}
327</table>
328]]>
329  </programlisting>
330 </example>
331</sect2>
332
333<sect2 id="foreach.property.iteration">
334 <title>.iteration</title>
335 <para>
336  <parameter>iteration</parameter> contient l'itération courante de la boucle et commence
337  toujours à 1, contrairement à
338  <link linkend="foreach.property.index"><parameter>index</parameter></link>.
339  Il est incrémenté d'un, à chaque itération.
340 </para>
341 <example>
342  <title>Exemple avec <parameter>iteration</parameter> et <parameter>index</parameter></title>
343  <programlisting role="php">
344<![CDATA[
345{* this will output 0|1, 1|2, 2|3, ... etc *}
346{foreach from=$myArray item=i name=foo}
347{$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration},
348{/foreach}
349]]>
350  </programlisting>
351 </example>
352</sect2>
353<sect2 id="foreach.property.first">
354  <title>.first</title>
355  <para>
356   <parameter>first</parameter> vaut &true; si l'itération courante de
357   <varname>{foreach}</varname> est l'initial.
358  </para>
359  <example>
360   <title>Exemple avec <parameter>first</parameter></title>
361   <programlisting role="php">
362<![CDATA[
363 {* affiche LATEST sur le premier élément, sinon, l'id *}
364 <table>
365  {foreach from=$items key=myId item=i name=foo}
366  <tr>
367  <td>{if $smarty.foreach.foo.first}LATEST{else}{$myId}{/if}</td>
368  <td>{$i.label}</td>
369 </tr>
370 {/foreach}
371</table>
372]]>
373  </programlisting>
374 </example>
375</sect2>
376<sect2 id="foreach.property.last">
377 <title>.last</title>
378 <para>
379  <parameter>last</parameter> est défini à &true; si l'itération courante de
380  <varname>{foreach}</varname> est la dernière.
381 </para>
382 <example>
383  <title>Exemple avec <parameter>last</parameter></title>
384  <programlisting role="php">
385<![CDATA[
386{* Ajout une barre horizontale à la fin de la liste *}
387{foreach from=$items key=part_id item=prod name=products}
388<a href="#{$part_id}">{$prod}</a>{if $smarty.foreach.products.last}<hr>{else},{/if}
389{foreachelse}
390... contenu ...
391{/foreach}
392]]>
393  </programlisting>
394 </example>
395</sect2>
396<sect2 id="foreach.property.show">
397 <title>.show</title>
398 <para>
399  <parameter>show</parameter> est utilisé en tant que paramètre à <varname>{foreach}</varname>.
400  <parameter>show</parameter> est une valeur booléenne. S'il vaut
401  &false;, <varname>{foreach}</varname> ne sera pas affiché.
402  S'il y a un <varname>{foreachelse}</varname>, il sera affiché alternativement.
403 </para>
404</sect2>
405
406<sect2 id="foreach.property.total">
407 <title>.total</title>
408 <para>
409  <parameter>total</parameter> contient le nombre d'itérations que cette boucle
410  <varname>{foreach}</varname> effectuera.
411  Il peut être utilisé dans ou après un <varname>{foreach}</varname>.
412 </para>
413 <example>
414  <title>Exemple avec <parameter>total</parameter></title>
415  <programlisting role="php">
416<![CDATA[
417{* affiche les lignes retournées à la fin *}
418{foreach from=$items key=part_id item=prod name=foo}
419{$prod.name><hr/>
420{if $smarty.foreach.foo.last}
421<div id="total">{$smarty.foreach.foo.total} items</div>
422{/if}
423{foreachelse}
424... quelque chose d'autre ...
425{/foreach}
426]]>
427 </programlisting>
428</example>
429
430  <para>
431   Voir aussi
432   <link linkend="language.function.section"><varname>{section}</varname></link>
433   et <link linkend="language.variables.smarty.loops"><parameter>$smarty.foreach</parameter></link>.
434  </para>
435 </sect2>
436</sect1>
437
438<!-- Keep this comment at the end of the file
439Local variables:
440mode: sgml
441sgml-omittag:t
442sgml-shorttag:t
443sgml-minimize-attributes:nil
444sgml-always-quote-attributes:t
445sgml-indent-step:1
446sgml-indent-data:t
447indent-tabs-mode:nil
448sgml-parent-document:nil
449sgml-default-dtd-file:"../../../../manual.ced"
450sgml-exposed-tags:nil
451sgml-local-catalogs:nil
452sgml-local-ecat-files:nil
453End:
454vim600: syn=xml fen fdm=syntax fdl=2 si
455vim: et tw=78 syn=sgml
456vi: ts=1 sw=1
457-->