Files
smarty/docs/fr/designers.sgml

5788 lines
212 KiB
Plaintext

<part id="smarty.for.designers">
<title>Smarty pour les graphistes</title>
<chapter id="language.basic.syntax">
<title>Bases syntaxiques</title>
<para>
Toutes les balises Smarty sont entourées de délimiteurs. Par défaut,
ces délimiteurs sont <literal>{</literal> et
<literal>}</literal>, mais ils peuvent être modifiés.
</para>
<para>
Pour ces exemples, nous supposons que vous utiliserez leur valeur par défaut.
Dans Smarty, le contenu qui est situé en dehors des délimiteurs
est affiché comme contenu statique, inchangé. Lorsque Smarty rencontre
des balises de template, il tente de les comprendre et en affiche la sortie
appropriée, en lieu et place.
</para>
<sect1 id="language.syntax.comments">
<title>Commentaires</title>
<para>
Les commentaires dans Smarty sont entourés d'asterisques, de cette
façon : {* voici un commentaire *}
Les commentaires Smarty ne sont pas affichés dans la sortie finale du
template.
Ils sont utilisés pour des notes internes, dans le template, pour aider
les développeurs à en comprendre le fonctionnement.
</para>
<example>
<title>Commentaires</title>
<programlisting>
{* Smarty *}
{* Inclusion de l'en tête *}
{include file="header.tpl"}
{include file=$includeFile}
{include file=#includeFile#}
{* affiche des listes déroulantes *}
&lt;SELECT name=company&gt;
{html_options values=$vals selected=$selected output=$output}
&lt;/SELECT&gt;</programlisting>
</example>
</sect1>
<sect1 id="language.syntax.functions">
<title>Fonctions</title>
<para>
Les balises Smarty affichent une <link linkend="language.variables">variable</link>
ou invoquent une fonction. Les fonctions sont appelées
lorsqu'elles sont entourées, ainsi que leurs paramètres, des délimiteurs Smarty.
Par exemple : {nomfonction par1="val" par2="val"}.
</para>
<example>
<title>syntaxe des fonctions</title>
<programlisting>
{config_load file="colors.conf"}
{include file="header.tpl"}
{if $name eq "Fred"}
Vous êtes admis dans cette zone
{else}
Bienvenue, &lt;font color="{#fontColor#}"&gt;{$name}!&lt;/font&gt;
{/if}
{include file="footer.tpl"}</programlisting>
</example>
<para>
Les fonctions natives et les fonctions utilisateurs ont toutes deux la même
syntaxe, dans les templates. Les fonctions natives sont relatives
au traitement interne de Smarty, comme par exemple <command>if</command>,
<command>section</command> et <command>strip</command>. Elles ne peuvent
être modifiées. Les fonctions utilisateurs sont des fonctions additionnelles,
implémentées par l'intermédiaire de plugins.
Elles peuvent être modifiées pour correspondre à vos besoins, et vous
pouvez en créer de nouvelles. <command>html_options</command> et
<command>html_select_date</command> sont deux exemples de fonctions
utilisateurs.
</para>
</sect1>
<sect1 id="language.syntax.attributes">
<title>Paramètres</title>
<para>
La plupart des fonctions attendent des paramètres qui régissent leur
comportement. Les paramètres des fonctions Smarty sont très proches des
attributs des balises HTML. Les valeurs numériques n'ont pas besoin d'être
entourées par des guillemets, par contre, ces guillemets sont recommandées lors
de l'utilisation de chaînes de caractères. Des variables peuvent aussi être
utilisées en tant que paramètres, et ne doivent pas être entourées de guillemets.
</para>
<para>
Certains paramètres requièrent des valeurs booléennes (true / false).
Elles peuvent être spécifiées par l'une des valeures suivantes, sans
guillemet: <literal>true</literal>, <literal>on</literal>, et <literal>yes</literal>,
ou <literal>false</literal>, <literal>off</literal>, et <literal>no</literal>.
</para>
<example>
<title>Paramètres de fonction, syntaxe</title>
<programlisting>
{include file="header.tpl"}
{include file=$includeFile}
{include file=#includeFile#}
{html_select_date display_days=yes}
&lt;SELECT name=company&gt;
{html_options values=$vals selected=$selected output=$output}
&lt;/SELECT&gt;</programlisting>
</example>
</sect1>
<sect1 id="language.syntax.quotes">
<title>Variables insérées dans des chaînes de caractères</title>
<para>
Smarty est capable d'interpréter les variables insérées à l'intérieur de
chaînes entre guillemets, du moment que leur nom est exclusivement composé
de chiffres, lettres, underscores et crochets. Si le nom de la variable
contient tout autre caractère (point, référence à un objet, etc.)
la variable doit être entourée d'apostrophes inverses (`).
</para>
<example>
<title>Syntaxe d'insertion de variables dans des chaînes</title>
<programlisting>
EXEMPLE DE SYNTAXE:
{func var="test $foo test"} &lt;-- comprends $foo
{func var="test $foo_bar test"} &lt;-- comprends $foo_bar
{func var="test $foo[0] test"} &lt;-- comprends $foo[0]
{func var="test $foo[bar] test"} &lt;-- comprends $foo[bar]
{func var="test $foo.bar test"} &lt;-- comprends $foo (not $foo.bar)
{func var="test `$foo.bar` test"} &lt;-- comprends $foo.bar
EXEMPLE PRATIQUE:
{include file="subdir/$tpl_name.tpl"} &lt;-- remplace $tpl_name avec la valeur
{cycle values="one,two,`$smarty.config.myval`"} &lt;-- doit comporter les
apostrophes inverses</programlisting>
</example>
</sect1>
</chapter>
<chapter id="language.variables">
<title>Variables</title>
<para>
Smarty possède différents types de variables. Le type de ces variables dépend
du symbole qui les préfixe, ou des symboles qui les entourent.
</para>
<para>
Les variables de Smarty peuvent être soit affichées directement, soit utilisées
comme arguments pour les fonctions et modificateurs, à l'intérieur d'expressions
conditionnelles, etc.
Pour afficher une variable, il suffit de l'entourer par des délimiteurs de
telle sorte qu'elle soit la seule chose qu'ils contiennent. Exemple :
<programlisting>
{$Nom}
{$Contacts[enreg].Telephone}
&lt;body bgcolor="{#bgcolor#}"&gt;</programlisting>
</para>
<sect1 id="language.assigned.variables">
<title>Variables assignées depuis PHP</title>
<para>
Pour utiliser une variables assignées depuis PHP, il faut la préfixer par le
symbole dollar <literal>$</literal>. Les variables asignées depuis un
template grâce à la fonction <link linkend="language.function.assign">assign</link>
sont manipulées de la même façon.
</para>
<example>
<title>Variables assignées</title>
<programlisting>
Bienvenue {$prenom}, heureux de voir que tu es arrivé ici.
&lt;p&gt;
La dernière connexion remonte au {$dateConnexionPrecedente}.
SORTIE:
Bienvenue Doug, heureux de voir que tu est arrivé ici.
&lt;p&gt;
La dernière connexion remonte au 11 janvier 2001.</programlisting>
</example>
<sect2 id="language.variables.assoc.arrays">
<title>Tableaux associatifs</title>
<para>
Vous pouvez également utiliser des variables sous forme de tableaux
associatifs assignées depuis PHP en en spécifiant la clef,
après le symbole '.' (point).
</para>
<example>
<title>accéder aux variables de tableaux associatifs</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('Contacts',
array('fax' => '555-222-9876',
'email' => 'zaphod@slartibartfast.com',
'phone' => array('home' => '555-444-3333',
'cell' => '555-111-1234')));
$smarty-&gt;display('index.tpl');
index.tpl:
{$Contacts.fax}&lt;br&gt;
{$Contacts.email}&lt;br&gt;
{* you can print arrays of arrays as well *}
{$Contacts.phone.home}&lt;br&gt;
{$Contacts.phone.cell}&lt;br&gt;
SORTIE:
555-222-9876&lt;br&gt;
zaphod@slartibartfast.com&lt;br&gt;
555-444-3333&lt;br&gt;
555-111-1234&lt;br&gt;</programlisting>
</example>
</sect2>
<sect2 id="language.variables.array.indexes">
<title>Tableaux indexés</title>
<para>
Vous pouvez utiliser des tableaux indexés de la même façon que vous le
faites en PHP.
</para>
<example>
<title>Accès aux tableaux grâce à l'index</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('Contacts',
array('555-222-9876',
'zaphod@slartibartfast.com',
array('555-444-3333',
'555-111-1234')));
$smarty-&gt;display('index.tpl');
index.tpl:
{$Contacts[0]}&lt;br&gt;
{$Contacts[1]}&lt;br&gt;
{* you can print arrays of arrays as well *}
{$Contacts[2][0]}&lt;br&gt;
{$Contacts[2][1]}&lt;br&gt;
SORTIE:
555-222-9876&lt;br&gt;
zaphod@slartibartfast.com&lt;br&gt;
555-444-3333&lt;br&gt;
555-111-1234&lt;br&gt;</programlisting>
</example>
</sect2>
<sect2 id="language.variables.objects">
<title>Objets</title>
<para>
Les attributs des objets assignés depuis PHP peuvent être utilisées en
en spécifiant le nom après le symbole '-&gt;'.
</para>
<example>
<title>accéder aux attributs des objets</title>
<programlisting>
nom: {$person-&gt;name}&lt;br&gt;
email: {$person-&gt;email}&lt;br&gt;
SORTIE:
nom: Zaphod Beeblebrox&lt;br&gt;
email: zaphod@slartibartfast.com&lt;br&gt;</programlisting>
</example>
</sect2>
</sect1>
<sect1 id="language.config.variables">
<title>Variables chargées depuis des fichiers de configuration</title>
<para>
Les variables récupérées depuis un fichier de configuration sont utilisées
entourées du symbole dièse (#), ou via la variable spéciale smarty
<link
linkend="language.variables.smarty.config">$smarty.config</link>.
</para>
<example>
<title>variables de fichiers de configuration</title>
<programlisting>
foo.conf:
pageTitle = "C'est le mien"
bodyBgColor = "#eeeeee"
tableBorderSize = "3"
tableBgColor = "#bbbbbb"
rowBgColor = "#cccccc"
index.tpl:
{config_load file="foo.conf"}
&lt;html&gt;
&lt;title&gt;{#pageTitle#}&lt;/title&gt;
&lt;body bgcolor="{#bodyBgColor#}"&gt;
&lt;table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}"&gt;
&lt;tr bgcolor="{#rowBgColor#}"&gt;
&lt;td&gt;First&lt;/td&gt;
&lt;td&gt;Last&lt;/td&gt;
&lt;td&gt;Address&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;
index.tpl: (alternate syntax)
{config_load file="foo.conf"}
&lt;html&gt;
&lt;title&gt;{$smarty.config.pageTitle}&lt;/title&gt;
&lt;body bgcolor="{$smarty.config.bodyBgColor}"&gt;
&lt;table border="{$smarty.config.tableBorderSize}" bgcolor="{$smarty.config.tableBgColor}"&gt;
&lt;tr bgcolor="{$smarty.config.rowBgColor}"&gt;
&lt;td&gt;First&lt;/td&gt;
&lt;td&gt;Last&lt;/td&gt;
&lt;td&gt;Address&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;
SORTIE: (same for both examples)
&lt;html&gt;
&lt;title&gt;C'est le mien&lt;/title&gt;
&lt;body bgcolor="#eeeeee"&gt;
&lt;table border="3" bgcolor="#bbbbbb"&gt;
&lt;tr bgcolor="#cccccc"&gt;
&lt;td&gt;First&lt;/td&gt;
&lt;td&gt;Last&lt;/td&gt;
&lt;td&gt;Address&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;</programlisting>
</example>
<para>
Les variables de fichier de configuration ne peuvent être utilisés tant
qu'elles n'ont pas été chargées. Cette procédure est expliquée
plus loin dans le document, voir <command>config_load</command>.
</para>
</sect1>
<sect1 id="language.variables.smarty">
<title>Variable réservée {$smarty}</title>
<para>
La variable réservée {$smarty} peut être utilisée pour accéder à plusieurs
variables spéciales du template. En voici la liste complète.
</para>
<sect2 id="language.variables.smarty.request">
<title>Variables de requête</title>
<para>
Les variables de requête comme GET, POST, COOKIES, SERVER, ENVIRONNEMENT
et SESSION peuvent être utilisées comme dans l'exemple suivant:
</para>
<example>
<title>Afficher des variables de requête</title>
<programlisting>
{* Affiche la valeur de page dans l'url (GET) http://www.domain.com/index.php?page=foo *}
{$smarty.get.page}
{* affiche la variable "page" récupérée depuis un formulaire (POST) *}
{$smarty.post.page}
{* affiche la valeur du cookie "utilisateur" *}
{$smarty.cookies.utilisateur}
{* affiche la variable serveur "SERVER_NAME" *}
{$smarty.server.SERVER_NAME}
{* affiche la variable d'environnement "PATH" *}
{$smarty.env.PATH}
{* affiche la variable de session PHP "id" *}
{$smarty.session.id}
{* affiche la variable "utilisateur" du regroupement de get/post/cookies/server/env *}
{$smarty.request.utilisateur}</programlisting>
</example>
</sect2>
<sect2 id="language.variables.smarty.now">
<title>{$smarty.now}</title>
<para>
Le timestamp courant peut être récupéré grâce à {$smarty.now}.
Le nombre obtenu correspond au nombre de secondes écoulées depuis
Epoch (1 Janvier 1970) et peut être passé directement au modificateur
de variable date à des fins d'affichage.
</para>
<example>
<title>utilisation de {$smarty.now}</title>
<programlisting>
{* utilise le modificateur de variable date_format pour afficher la date et heure *}
{$smarty.now|date_format:"%d-%m-%Y %H:%M:%S"}</programlisting>
</example>
</sect2>
<sect2 id="language.variables.smarty.const">
<title>{$smarty.const}</title>
<para>
Vous pouvez directement accéder aux constantes PHP.
</para>
<example>
<title>Utiliser {$smarty.const}</title>
<programlisting>
{$smarty.const._MA_CONSTANTE_}</programlisting>
</example>
</sect2>
<sect2 id="language.variables.smarty.capture">
<title>{$smarty.capture}</title>
<para>
La capture réalisée via {capture}..{/capture} peut être récupérée
par l'intermédiaire de la variable {$smarty}. Voir la section
sur <link linkend="language.function.capture">capture</link> pour un
exemple à ce sujet.
</para>
</sect2>
<sect2 id="language.variables.smarty.config">
<title>{$smarty.config}</title>
<para>
La variable {$smarty} peut être utilisée pour désigner une variable
d'un fichier de configuration. {$smarty.config.foo} est un synonyme de
{#foo#}. Voir la section <link
linkend="language.function.config.load">config_load</link>
pour un exemple à ce sujet.
</para>
</sect2>
<sect2 id="language.variables.smarty.loops">
<title>{$smarty.section}, {$smarty.foreach}</title>
<para>
La variable {$smarty} peut être utilisée pour accéder aux propriétés
des boucles 'section' et 'foreach'. Voir la documentation de
<link linkend="language.function.section">section</link> et
<link linkend="language.function.foreach">foreach</link>.
</para>
</sect2>
<sect2 id="language.variables.smarty.template">
<title>{$smarty.template}</title>
<para>
Cette variable contient le nom du template en cours de traitement.
</para>
</sect2>
</sect1>
</chapter>
<chapter id="language.modifiers">
<title>Modificateurs de variables</title>
<para>
Les modificateurs de variables peuvent être appliqués aux variables,
fonctions utilisateurs ou chaînes de caractères. Pour appliquer un modificateur
de variable, tappez une valeure suivie de <literal>|</literal>
(pipe) et du nom du modificateur. Un modificateur de variable
est succeptible d'accepter des paramètres additionnels, qui en affectent
le comportement. Ces paramètres suivent le nom du modificateur et
sont séparés par un <literal>:</literal> (deux points).
</para>
<example>
<title>Exemple de modificateur</title>
<programlisting>
{* Met le titre en majuscule *}
&lt;h2&gt;{$title|upper}&lt;/h2&gt;
{* Tronque le sujet à 40 caractères, place des "..." à la fin *}
Sujet: {$sujet|truncate:40:"..."}
{* formatage en chaîne *}
{"now"|date_format:"%Y/%m/%d"}
{* application d'un modificateur à une fonction utilisateur *}
{mailto|upper address="me@domain.dom"}</programlisting>
</example>
<para>
Si vous appliquez un modificateur de variable à un tableau plutôt qu'à une
variable simple, le modificateur sera appliqué à chaque valeur du tableau.
Si vous souhaitez que le modificateur travaille réellement avec le tableau
en tant que tel, vous devez préfixer le nom du modificateur avec un symbole
<literal>@</literal> comme ceci: <literal>{$titreArticle|@count}</literal>
(Affiche le nombre d'élements du tableau $titreArticle.)
</para>
<sect1 id="language.modifier.capitalize">
<title>capitalize</title>
<para>
Met la première lettre de chaque mot d'une variable en majuscule.
</para>
<example>
<title>capitalize</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('titreArticle', 'La police commence une campagne de sensibilisation contre la violence routière.');
$smarty-&gt;display('index.tpl');
index.tpl:
{$titreArticle}
{$titreArticle|capitalize}
SORTIE:
La police commence une campagne de sensibilisation contre la violence routière.
La Police Commence Une Campagne De Sensibilisation Contre La Violence Routière.</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.count.characters">
<title>count_characters</title>
<para>
Compte le nombre de caractères dans une variable.
</para>
<example>
<title>count_characters</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('titreArticle', 'Vagues de froid liées à la température.');
$smarty-&gt;display('index.tpl');
index.tpl:
{$titreArticle}
{$titreArticle|count_characters}
SORTIE:
Vagues de froid liées à la température.
39
</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.cat">
<title>cat</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="cat" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Position du paramètre</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>cat</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>Valeur à concaténer à la variable donnée.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Cette valeur est concaténée à la variable donnée.
</para>
<example>
<title>cat</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('TitreArticle', 'Les devins ont prévus que le monde existera toujours ');
$smarty-&gt;display('index.tpl');
index.tpl:
{$TitreArticle|cat:" demain."}
SORTIE:
Les devins ont prévus que le monde existera toujours demain.</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.count.paragraphs">
<title>count_paragraphs</title>
<para>
Compte le nombre de paragraphes dans une variable.
</para>
<example>
<title>count_paragraphs</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('TitreArticle', 'La guerre apporte la paix, au prix de la vie de certains innocents.');
$smarty-&gt;display('index.tpl');
index.tpl:
{$TitreArticle}
{$TitreArticle|count_paragraphs}
SORTIE:
La guerre apporte la paix, au prix de la vie des innocents.
1</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.count.sentences">
<title>count_sentences</title>
<para>
Compte le nombre de phrases dans une variable.
</para>
<example>
<title>count_sentences</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('TitreArticle', 'Deux navires rentrent en
collision - Un des deux coule. Des vaches enragées blessent un fermier à
coups de haches.');
$smarty-&gt;display('index.tpl');
index.tpl:
{$TitreArticle}
{$TitreArticle|count_sentences}
SORTIE:
Deux navires rentrent en collision
- Un des deux coule. Des vaches enragées blessent un fermier
à coups de haches.
2</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.count.words">
<title>count_words</title>
<para>
Compte le nombre de mots dans une variable.
</para>
<example>
<title>count_words</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('TitreArticle', 'Un anneau pour les gouverner tous.');
$smarty-&gt;display('index.tpl');
index.tpl:
{$titreArticle}
{$titreArticle|count_words}
SORTIE:
Un anneau pour les gouverner tous.
6</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.date.format">
<title>date_format</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Position du paramètre</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>%b %e, %Y</entry>
<entry>Format de sortie de la date.</entry>
</row>
<row>
<entry>2</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>n/a</entry>
<entry>Date par défaut si aucune n'est spécifiée en entrée.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Formate une date / heure au format strftime donné. Les dates peuvent
être passées à smarty en tant que timestamp unix, timestamp mysql ou
comme chaîne quelconque contenant mois jour année (interprétable par
strtotime). Les concepteurs de templates peuvent utiliser date_format
pour contrôler parfaitement le format de sortie de la date.
Si la date passée à date_format est vide, et qu'un second paramètre
est donné, ce dernier sera utilisé comme étant la date à formater.
</para>
<example>
<title>date_format</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('hier', strtotime('-1 day'));
$smarty-&gt;display('index.tpl');
index.tpl:
{$smarty.now|date_format}
{$smarty.now|date_format:"%A, %B %e, %Y"}
{$smarty.now|date_format:"%H:%M:%S"}
{$hier|date_format}
{$hier|date_format:"%A, %B %e, %Y"}
{$hier|date_format:"%H:%M:%S"}
SORTIE:
Feb 6, 2001
Tuesday, February 6, 2001
14:33:00
Feb 5, 2001
Monday, February 5, 2001
14:33:00</programlisting>
</example>
<example>
<title>date_format indicateurs de convertion</title>
<programlisting>
%a - Abréviation du jour de la semaine, selon les paramètres locaux.
%A - Nom du jour de la semaine, selon les paramètres locaux.
%b - Abréviation du nom du jour, selon les paramètres locaux.
%B - Nom complet du mois, selon les paramètres locaux.
%c - Préférences d'affichage selon les paramètres locaux.
%C - Siècle, (L'année divisée par 100 et tronquée comme un entier, de 00 à 99)
%d - Jour du mois, en tant que nombre décimal (de 00 à 31)
%D - même chose que %m/%d/%y
%e - Jour du mois en tant que nombre décimal. Un chiffre unique est précédé par
un espace (de 1 à 31)
%g - Position de la semaine dans le siècle [00,99]
%G - Position de la semaine, incluant le siècle [0000,9999]
%h - identique à %b
%H - L'heure en tant que décimale, en utilisant une horloge sur 24 (de 00 à 23)
%I - L'heure en tant que décimale en utilisant une horloge sur 12 (de 01 to 12)
%j - jour de l'année (de 001 à 366)
%k - Heure (horloge sur 24). Les numéros à un chiffre sont précédés d'un espace. (de 0 à 23)
%l - Heure (horloge sur 12). Les numéros à un chiffre sont précédés d'un espace. (de 1 à 12)
%m - Mois en tant que nombre décimal (de 01 à 12)
%M - Minute en tant que nombre décimal
%n - Retour chariot (nouvelle ligne).
%p - soit am soit pm selon l'heure donnée, ou alors leurs correspondances locales.
%r - heure en notation a.m. et p.m.
%R - Heure au format 24 heures
%S - Secondes en tant que nombre décimal.
%t - Caractère tabulation.
%T - Heure courante, équivalent à %H:%M:%S
%u - Jour de la semaine en tant que nombre décimal [1,7], ou 1 représente le lundi.
%U - Le numéro de la semaine en nombre décimal, utilisant le premier dimanche
en tant que premier jour de la première semaine.
%V - Le numéro de la semaine de l'année courante selon la norme ISO 8601:1988,
de 01 à 53, ou la semaine 1 est la première semaine qui dispose au minimum
de 4 jours dans l'année courante et ou Lundi est le premier jour
de cette semaine.
%w - Jour de la semaine en tant que nombre décimal, dimanche étant 0
%W - Le numéro de la semaine de l'année courante en tant que nombre décimal,
ou Lundi est le premier jour de la première semaine.
%x - Représentation préférée de la date selon les paramètres locaux.
%X - Représentation préférée de l'heure selon les paramètres locaux, sans la
date.
%y - L'année en tant que nombre décimal, sans le siècle. (de 00 à 99)
%Y - L'année en tant que nombre décimal, avec le siècle.
%Z - Zone horraire, nom ou abréviation
%% - Un caractère litéral `%'
NOTE AUX DEVELOPPEURS: date_format est un alias de la fonction
PHP strftime(). Il est probable que vous disposiez de plus ou moins d'options
disponibles selon le système sur lequel PHP a été compilé (strftime ()).
Reportez vous à l'aide de votre système pour une liste complète des
paramètres disponibles.</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.default">
<title>default</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Position du paramètre</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>La valeur par défaut de la sortie si la variable
d'entrée est vide.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Utilisé pour définir une valeur par défaut à une variable.
Si la variable est vide ou indéfinie, la valeur donnée est affichée
en lieu et place. Default attends un seul argument.
</para>
<example>
<title>default</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('TitreArticle', 'Les portes de la moria restent fermées.');
$smarty-&gt;display('index.tpl');
index.tpl:
{$TitreArticle|default:"pas de titre"}
{$monTitre|default:"pas de titre"}
SORTIE:
Les portes de la moria restent fermées.
pas de titre</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.escape">
<title>escape</title>
<informaltable frame="all">
<tgroup cols="6">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="possible" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Position du paramètre</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Valeurs possibles</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>chaîne de caractère</entry>
<entry>Non</entry>
<entry>html, htmlall, url, quotes, hex, hexentity,
javascript</entry>
<entry>html</entry>
<entry>Format d'échappement à utiliser.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
"Echappe" les caractères spéciaux html, d'url, pour
les quotes d'une chaîne, les valeurs
hexadécimales, les entités hexadécimales ou javascript.
Par défaut, ce paramètre est html.
</para>
<example>
<title>escape</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('TitreArticle', "'Stiff Opposition Expected to Casketless Funeral Plan'");
$smarty-&gt;display('index.tpl');
index.tpl:
{$titreArticle}
{$titreArticle|escape}
{$titreArticle|escape:"html"} {* escapes &amp; &quot; &#039; &lt; &gt; *}
{$titreArticle|escape:"htmlall"} {* escapes ALL html entities *}
{$titreArticle|escape:"url"}
{$titreArticle|escape:"quotes"}
&lt;a href="mailto:{$EmailAddress|escape:"hex"}"&gt;{$EmailAddress|escape:"hexentity"}&lt;/a&gt;
SORTIE:
'Stiff Opposition Expected to Casketless Funeral Plan'
&amp;#039;Stiff Opposition Expected to Casketless Funeral Plan&amp;#039;
&amp;#039;Stiff Opposition Expected to Casketless Funeral Plan&amp;#039;
&amp;#039;Stiff Opposition Expected to Casketless Funeral Plan&amp;#039;
%27Stiff+Opposition+Expected+to+Casketless+Funeral+Plan%27
\'Stiff Opposition Expected to Casketless Funeral Plan\'
&lt;a href=&quot;mailto:%62%6f%62%40%6d%65%2e%6e%65%74&quot;&gt;&amp;#x62;&amp;#x6f;&amp;#x62;&amp;#x40;&amp;#x6d;&amp;#x65;&amp;#x2e;&amp;#x6e;&amp;#x65;&amp;#x74;&lt;/a&gt;</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.indent">
<title>indent</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>Position du paramètre</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>entier</entry>
<entry>Non</entry>
<entry>4</entry>
<entry>De combien de caractères l'indentation doit être effectuée.</entry>
</row>
<row>
<entry>2</entry>
<entry>chaîne de caractère</entry>
<entry>Non</entry>
<entry>(espace)</entry>
<entry>Caractère à utiliser pour l'indentation.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Indente chacune des lignes d'une chaîne. Comme paramètre optionnel,
vous pouvez spécifier le nombre de caractères à utiliser pour l'indentation (4 par défaut).
Comme second paramètre optionnel, vous
pouvez spécifier le caractère à utiliser pour l'indentation (utilisez
"\t" pour les tabulations).
</para>
<example>
<title>indent</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('TitreArticle', 'Il fera noir cette nuit.');
$smarty-&gt;display('index.tpl');
index.tpl:
{$TitreArticle}
{$TitreArticle|indent}
{$TitreArticle|indent:10}
{$TitreArticle|indent:1:"\t"}
SORTIE:
Il fera noir cette nuit.
Il fera noir cette nuit.
Il fera noir cette nuit.
Il fera noir cette nuit.
</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.lower">
<title>lower</title>
<para>
Met une variable en minuscules.
</para>
<example>
<title>lower</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('TitreArticle', 'Deux Suspects Se Sont Sauvés.');
$smarty-&gt;display('index.tpl');
index.tpl:
{$TitreArticle}
{$TitreArticle|lower}
SORTIE:
Deux Suspects Se Sont Sauvés.
deux suspects se sont sauvés.</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.nl2br">
<title>nl2br</title>
<para>
Transforme toutes les fins de lignes en balises &lt;br /&gt;.
Equivalent à la fonction PHP nl2br().
</para>
<example>
<title>nl2br</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('TitreArticle', "Pluie ou soleil attendu\naujourd'hui, nuit noire");
$smarty-&gt;display('index.tpl');
index.tpl:
{$TitreArticle|nl2br}
SORTIE:
Pluie ou soleil attendu&lt;br /&gt;aujourd'hui, nuit noire</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.regex.replace">
<title>regex_replace</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>Position du paramètre</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>chaîne de caractère</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Expression régulière à remplacer.</entry>
</row>
<row>
<entry>2</entry>
<entry>chaîne de caractère</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>La chaîne de remplacement.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Un rechercher / remplacer avec une expression régulière. Utilise la même
syntaxe que la fonction PHP preg_replace.
</para>
<example>
<title>regex_replace</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('TitreArticle', "L'infertilité est un maux grandissant\n, disent les experts.");
$smarty-&gt;display('index.tpl');
index.tpl:
{* Remplace tous les retours chariot et les tabulation par une nouvelle ligne avec un espace *}
{$TitreArticle}
{$TitreArticle|regex_replace:"/[\r\t\n]/":" "}
SORTIE:
L'infertilité est un maux grandissant
, disent les experts.
L'infertilité est un maux grandissant, disent les experts.</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.replace">
<title>replace</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>Position du paramètre</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>chaîne de caractères</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>chaîne à remplacer.</entry>
</row>
<row>
<entry>2</entry>
<entry>chaîne de caractères</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>chaîne de remplacement.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Un simple remplacement de chaîne de caractères.
</para>
<example>
<title>replace</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('titreArticle', "Child's Stool Great for Use in Garden.");
$smarty-&gt;display('index.tpl');
index.tpl:
{$titreArticle}
{$titreArticle|replace:"Garden":"Vineyard"}
{$titreArticle|replace:" ":" "}
SORTIE:
Child's Stool Great for Use in Garden.
Child's Stool Great for Use in Vineyard.
Child's Stool Great for Use in Garden.</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.spacify">
<title>spacify</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>Position du paramètre</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>chaîne de caractère</entry>
<entry>Non</entry>
<entry><emphasis>espace</emphasis></entry>
<entry>Ce qui est inséré entre chaque caractère de la variable.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
spacify est un moyen pour insérer un espace entre tous les caractères
d'une variable. Optionnellement, vous pouvez lui passer un caractère
(ou une chaîne) différent de espace à insérer.
</para>
<example>
<title>spacify</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('titreArticle', 'Quelque chose s'est mal passé et à provoqué
cet accident, disent les experts');
$smarty-&gt;display('index.tpl');
index.tpl:
{$titreArticle}
{$titreArticle|spacify}
{$titreArticle|spacify:"^^"}
SORTIE:
Quelquechose s'est mal passé et à provoqué cet accident, disent les experts.
Q u e l q u e c h o s e s ' e s t m a l p a s s é e t à p r o v o q u é c e t a c c i d e n t , d i s e n t l e s e x p e r t s .
Q^^u^^e^^l^^q^^u^^e^^c^^h^^o^^s^^e^^ ^^s^^'^^e^^s^^t^^ ^^m^^a^^l^^ ^^p^^a^^s^^s^^é^^ ^^e^^t^^ ^^à^^ ^^p^^r^^o^^v^^o^^q^^u^^é^^ ^^c^^e^^t^^ ^^a^^c^^c^^i^^d^^e^^n^^t^^,^^ ^^d^^i^^s^^e^^n^^t^^ ^^l^^e^^s^^ ^^e^^x^^p^^e^^r^^t^^s^^.</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.string.format">
<title>string_format</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>Position du paramètre</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>chaîne de caractères</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le format à utiliser (sprintf)</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Un moyen pour formater les chaînes de caractères, comme par exemple les
nombres décimaux. Utilise la syntaxe de sprintf pour formater les éléments.
</para>
<example>
<title>string_format</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('nombre', 23.5787446);
$smarty-&gt;display('index.tpl');
index.tpl:
{$nombre}
{$nombre|string_format:"%.2f"}
{$nombre|string_format:"%d"}
SORTIE:
23.5787446
23.58
24</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.strip">
<title>strip</title>
<para>
Remplace les espaces multiples, les nouvelles lignes et les tabulations
par un espace simple, ou une chaîne donnée.
</para>
<note>
<title>Note</title>
<para>
Si vous voulez réaliser cette action sur un bloc complet du template,
utilisez la <link
linkend="language.function.strip">fonction strip</link>.
</para>
</note>
<example>
<title>strip</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('titreArticle', "Une réunion autour\n d'un feu de cheminée\t
est toujours agréable.");
$smarty-&gt;display('index.tpl');
index.tpl:
{$titreArticle}
{$titreArticle|strip}
{$titreArticle|strip:"&amp;nbsp;"}
SORTIE:
Une réunion autour
d'un feu de cheminée est toujours agréable.
Une réunion autour d'un feu de cheminée est toujours agréable.
Une&amp;nbsp;réunion&amp;nbsp;autour&amp;nbsp;d'un&amp;nbsp;feu&amp;nbsp;de&amp;nbsp;cheminée&amp;nbsp;est&amp;nbsp;toujours
&amp;nbsp;agréable.</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.strip.tags">
<title>strip_tags</title>
<para>
Supprime toutes les balises, et plus généralement tout ce qui se trouve
entre &lt; et &gt;.
</para>
<example>
<title>strip_tags</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('titreArticle', "Une femme aveugle obtient un nouveau &lt;font face=\"helvetica\"&gt;
rein&lt;/font&gt; d'un père qu'elle n'a pas vu depuis&lt;b&gt; des années&lt;/b&gt;.");
$smarty-&gt;display('index.tpl');
index.tpl:
{$titreArticle}
{$titreArticle|strip_tags}
SORTIE:
Une femme aveugle obtient un nouveau &lt;font face=\"helvetica\"&gt;
rein&lt;/font&gt; d'un père qu'elle n'a pas vu depuis&lt;b&gt; des années&lt;/b&gt;.
Une femme aveugle obtient un nouveau rein d'un père
qu'elle n'a pas vu depuis des années.</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.truncate">
<title>truncate</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>Position du paramètre</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>entier</entry>
<entry>Non</entry>
<entry>80</entry>
<entry>Le nombre de caractères maximums au-delà duquel
on effectue le troncage</entry>
</row>
<row>
<entry>2</entry>
<entry>chaîne de caractère</entry>
<entry>Non</entry>
<entry>...</entry>
<entry>Le texte à rajouter lorsque l'on effectue un
troncage.</entry>
</row>
<row>
<entry>3</entry>
<entry>booléen</entry>
<entry>Non</entry>
<entry>false</entry>
<entry>Détermine si le troncage est effectué sur
le dernier mot (false), ou au caractère exact (true).
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Tronque une variable à une certaine longueur, par défaut 80.
Un second paramètre optionnel permet de spécifier une chaîne à afficher
à la fin de la variable une fois tronquée. Les caractères de fin sont
inclus dans la longueur de la chaîne à tronquer. Par défaut,
truncate tentera de couper la chaîne à la fin d'un mot. Si vous voulez
tronquer la chaîne au caractère exact, donnez la valeur true au
dernier paramètre optionnel.
</para>
<example>
<title>truncate</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('titreArticle', 'Deux soeurs réunies après 18 ans de séparation.');
$smarty-&gt;display('index.tpl');
index.tpl:
{$titreArticle}
{$titreArticle|truncate}
{$titreArticle|truncate:30}
{$titreArticle|truncate:30:""}
{$titreArticle|truncate:30:"---"}
{$titreArticle|truncate:30:"":true}
{$titreArticle|truncate:30:"...":true}
SORTIE:
Deux soeurs réunies après 18 ans de séparation.
Deux soeurs réunies après...
Deux soeurs réunies après
Deux soeurs réunies après---
Deux soeurs réunies après 18 a
Deux soeurs réunies après 1...
</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.upper">
<title>upper</title>
<para>
Met une variable en majuscules.
</para>
<example>
<title>upper</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('titreArticle', "Si l'attaque n'est pas mise en place
rapidement, cela risque de durer longtemps.");
$smarty-&gt;display('index.tpl');
index.tpl:
{$titreArticle}
{$titreArticle|upper}
SORTIE:
Si l'attaque n'est pas mise en place rapidement, cela risque de durer longtemps.
SI L'ATTAQUE N'EST PAS MISE EN PLACE RAPIDEMENT, CELA RISQUE DE DURER LONGTEMPS.</programlisting>
</example>
</sect1>
<sect1 id="language.modifier.wordwrap">
<title>wordwrap</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>Position du paramètre</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>entier</entry>
<entry>Non</entry>
<entry>80</entry>
<entry>La nombre de colonnes sur lequel ajuster l'affichage.</entry>
</row>
<row>
<entry>2</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>\n</entry>
<entry>chaîne de caractères utilisée pour l'ajustement.</entry>
</row>
<row>
<entry>3</entry>
<entry>booléen</entry>
<entry>Non</entry>
<entry>false</entry>
<entry>Détermine si l'ajustement se fait en fin de mot
(false) ou au caractère exact (true).</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Ajuste une chaîne de caractères à une taille de colonne, par défaut 80.
Un second paramètre optionnel vous permet de spécifier la chaîne à utiliser
pour l'ajustement à la nouvelle ligne (retour chariot \n par défaut).
Par défaut, wordwrap tente un ajustement à la fin d'un mot. Si vous voulez
autoriser le découpage des mots pour un ajustement au caractère près,
passez true au troisième paramètre optionnel.
</para>
<example>
<title>wordwrap</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('titreArticle', "Une femme aveugle obtient un nouveau rein
d'un père qu'elle n'a pas vu depuis des années.");
$smarty-&gt;display('index.tpl');
index.tpl:
{$titreArticle}
{$titreArticle|wordwrap:30}
{$titreArticle|wordwrap:20}
{$titreArticle|wordwrap:30:"&lt;br&gt;\n"}
{$titreArticle|wordwrap:30:"\n":true}
SORTIE:
Une femme aveugle obtient un nouveau rein d'un père qu'elle n'a pas vu depuis des années.
Une femme aveugle obtient un
nouveau rein d'un père
qu'elle n'a pas vu depuis
des années.
Une femme aveugle
obtient un nouveau
rein d'un père
qu'elle n'a pas vu
depuis des années.
Une femme aveugle obtient un&lt;br&gt;
nouveau rein d'un père&lt;br&gt;
qu'elle n'a pas vu depuis&lt;br&gt;
des années.
Une femme aveugle obtient un n
ouveau rein d'un père qu'elle
n'a pas vu depuis des années.
</programlisting>
</example>
</sect1>
</chapter>
<chapter id="language.combining.modifiers">
<title>Combiner des modificateurs de variable.</title>
<para>
Vous pouvez appliquer un nombre quelquonque de modificateurs à une variable.
Ils seront invoqués dans l'ordre d'apparition, de la gauche vers la droite.
Ils doivent être séparés par un <literal>|</literal> (pipe).
</para>
<example>
<title>Combiner des modificateurs</title>
<programlisting>
index.php:
$smarty = new Smarty;
$smarty-&gt;assign('titreArticle', 'Les fumeurs sont productifs, mais la mort
tue l'efficacitée.');
$smarty-&gt;display('index.tpl');
index.tpl:
{$titreArticle}
{$titreArticle|upper|spacify}
{$titreArticle|lower|spacify|truncate}
{$titreArticle|lower|truncate:30|spacify}
{$titreArticle|lower|spacify|truncate:30:". . ."}
SORTIE:
Les fumeurs sont productifs, mais la mort tue l'efficacitée.
L E S F U M E U R S S O N T P R O D U C T I F S , M A I S L A M O R T T U E L ' E F F I C A C I T É E .
L E S F U M E U R S S O N T P R O D U C T I F S , M A I S L A M...
L E S F U M E U R S S O N T P R O D U C T I F S , M A I S L A M...
L e s f u m e u r s s o n t p r o d u c t i f s , . . .
L e s f u m e u r s s. . .</programlisting>
</example>
</chapter>
<chapter id="language.builtin.functions">
<title>Fonctions natives</title>
<para>
Smarty est fourni en standard avec plusieurs fonctions natives.
Les fonctions natives sont partie intégrante du language de template.
Vous ne pouvez pas créer de fonctions utilisateurs qui portent le même nom
qu'une fonction native. Vous ne pouvez pas non plus en modifier le
comportement.
</para>
<sect1 id="language.function.capture">
<title>capture</title>
<para>
Capture est utilisé pour récupérer la sortie d'éléments dans une variable
au lieu de les afficher. Tout contenu situé entre {capture
name="foo"} et {/capture} est intercepté dans une variable dont le nom est
spécifié dans l'attribut name. Le contenu capturé peut être utilisé dans
le template par l'intermédiaire de la variable spéciale $smarty.capture.foo
ou foo est la valeur de l'attribut name. Si vous ne donnez pas de valeur
à l'attribut name, alors "default" est utilisé. Toutes les commandes
{capture} doivent être utilisées de paire avec {/capture}. Vous pouvez
imbriquer les demandes de captures.
</para>
<note>
<title>Note technique</title>
<para>
Smarty 1.4.0 - 1.4.4 plaçait les contenus capturés dans une variable
appelée $return. Depuis Smarty 1.4.5, ce comportement à été modifié et
Smarty utilise maintenant l'attribut name en lieu et place.
Veuillez donc mettre vos templates à jour selon cette règle.
</para>
</note>
<caution>
<para>
Faites attention lorsque vous interceptez la sortie de commandes
<command>insert</command>. Si vous avez configuré le cache pour que ce
dernier soit actif, et que vous avez des commandes <command>insert</command>
supposées s'exécuter dans un contenu en cache, ne tentez pas de capturer
ce contenu.
</para>
</caution>
<para>
<example>
<title>Capturer le contenu d'un template.</title>
<programlisting>
{* nous ne voulons afficher une ligne que si cette dernière est activé. *}
{capture name=banner}
{include file="get_banner.tpl"}
{/capture}
{if $smarty.capture.banner ne ""}
&lt;tr&gt;
&lt;td&gt;
{$smarty.capture.banner}
&lt;/td&gt;
&lt;/tr&gt;
{/if}</programlisting>
</example>
</para>
</sect1>
<sect1 id="language.function.config.load">
<title>config_load</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>chaîne de caractère</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom du fichier de configuration à inclure</entry>
</row>
<row>
<entry>section</entry>
<entry>chaîne de caractère</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom de la section à charger</entry>
</row>
<row>
<entry>scope</entry>
<entry>chaîne de caractère</entry>
<entry>non</entry>
<entry><emphasis>local</emphasis></entry>
<entry>
La façon dont la portée des variables est définie, soit
local, parent ou global. local signifie que la variable est
chargée dans le contexte du template. parent indique que
la variable est disponible tant dans le template qui
l'a inclus que dans le template parent, ayant réalisé
l'inclusion du sous template. global signifie que la variable
est diponible dans tous les templates.
</entry>
</row>
<row>
<entry>global</entry>
<entry>booléen</entry>
<entry>Non</entry>
<entry><emphasis>No</emphasis></entry>
<entry>
Si oui ou non les variables sont disponibles pour les
templates parents, identique à scope=parent.
Note: Cet attribut est obsolète depuis l'apparition
de l'attribut scope, il est toutefois toujours supporté.
Si scope est défini, global est ignoré.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Cette fonction est utiliseé pour charger des variables de fichier
de configuration dans un template. Voir <link linkend="config.files">
Fichiers de configuration</link> pour de plus amples informations.
</para>
<example>
<title>fonction config_load</title>
<programlisting>
{config_load file="colors.conf"}
&lt;html&gt;
&lt;title&gt;{#pageTitle#}&lt;/title&gt;
&lt;body bgcolor="{#bodyBgColor#}"&gt;
&lt;table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}"&gt;
&lt;tr bgcolor="{#rowBgColor#}"&gt;
&lt;td&gt;First&lt;/td&gt;
&lt;td&gt;Last&lt;/td&gt;
&lt;td&gt;Address&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;</programlisting>
</example>
<para>
Les fichiers de configuration peuvent contenir des sections.
Vous pouvez charger des variables d'une section donnée avec le
nouvel attribut <emphasis>section</emphasis>.
</para>
<para>
NOTE: Les <emphasis>sections des fichiers de configuration</emphasis>
et la fonction native <emphasis>section</emphasis> n'ont rien en
commun, il s'avère simplement qu'elles portent le même nom.
</para>
<example>
<title>fonction config_load et section</title>
<programlisting>
{config_load file="colors.conf" section="client"}
&lt;html&gt;
&lt;title&gt;{#pageTitle#}&lt;/title&gt;
&lt;body bgcolor="{#bodyBgColor#}"&gt;
&lt;table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}"&gt;
&lt;tr bgcolor="{#rowBgColor#}"&gt;
&lt;td&gt;First&lt;/td&gt;
&lt;td&gt;Last&lt;/td&gt;
&lt;td&gt;Address&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;</programlisting>
</example>
</sect1>
<sect1 id="language.function.foreach">
<title>foreach,foreachelse</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>from</entry>
<entry>chaîne de caractère</entry>
<entry>oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom du tableau à parcourir</entry>
</row>
<row>
<entry>item</entry>
<entry>chaîne de caractère</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom de la variable "élément courant"</entry>
</row>
<row>
<entry>key</entry>
<entry>chaîne de caractère</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom de la variable représentant la clef courante.</entry>
</row>
<row>
<entry>name</entry>
<entry>chaîne de caractère</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom de la boucle foreach, qui nous permettra
d'accéder à ses propriétés.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Les boucles <emphasis>foreach</emphasis> sont une alternative aux boucles
<emphasis>section</emphasis>. Les boucles <emphasis>foreach</emphasis>
sont utilisées pour parcourir des tableaux associatifs simples.
La syntaxe des boucles <emphasis>foreach</emphasis> est bien plus simple
que celle des boucles <emphasis>section</emphasis>, mais en contrepartie,
elles ne peuvent être utilisées que pour des tableaux associatifs simples.
La balise <emphasis>foreach</emphasis> doit toujours être accompagnée
de la balise <emphasis>/foreach</emphasis>. Les paramètres requis sont
<emphasis>from</emphasis> et <emphasis>item</emphasis>. Le nom des boucles
foreach doit être composés exclusivement de lettres,
chiffres et underscores, selon vos préférences. Les boucles
<emphasis>foreach</emphasis> peuvent être imbriquées.
La variable <emphasis>from</emphasis> (généralement le tableau à
parcourir) détermine le nombre de fois que <emphasis>foreach</emphasis>
sera exécuté. <emphasis>foreachelse</emphasis> est exécuté si aucune
valeur n'est présente dans la variable donnée à l'attribut
<emphasis>from</emphasis>.
</para>
<example>
<title>foreach</title>
<programlisting>
{* Cet exemple affiche toutes les valeurs du tableau $custid *}
{foreach from=$custid item=curr_id}
id: {$curr_id}&lt;br&gt;
{/foreach}
SORTIE:
id: 1000&lt;br&gt;
id: 1001&lt;br&gt;
id: 1002&lt;br&gt;</programlisting>
</example>
<example>
<title>foreach key</title>
<programlisting>
{* key contient la clef de chaque élément parcouru
l'attribution des élément est de la forme:
$smarty->assign("contacts", array(array("tel" =&gt; "1", "fax" =&gt; "2", "portable" =&gt; "3"),
array("tel" =&gt; "555-4444", "fax" =&gt; "555-3333", "portable" =&gt; "760-1234")));
*}
{foreach name=outer item=contact from=$contacts}
{foreach key=key item=item from=$contact}
{$key}: {$item}&lt;br&gt;
{/foreach}
{/foreach}
SORTIE:
tel: 1&lt;br&gt;
fax: 2&lt;br&gt;
portable: 3&lt;br&gt;
tel: 555-4444&lt;br&gt;
fax: 555-3333&lt;br&gt;
portable: 760-1234&lt;br&gt;</programlisting>
</example>
</sect1>
<sect1 id="language.function.include">
<title>include</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>chaîne de caractères</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom du template à inclure</entry>
</row>
<row>
<entry>assign</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom de la variable dans laquelle sera assignée
la sortie de include</entry>
</row>
<row>
<entry>[var ...]</entry>
<entry>[type de variable]</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Variables à passer au template</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Les balises "include" sont utilisées pour inclure des templates à
l'intérieur d'autres templates. Toutes les variables disponibles
dans le template réalisant l'inclusion sont disponibles dans le
template inclus. La balise include doit disposer de l'attribut
"file", qui contient le chemin de la ressource template.
</para>
<para>
Vous pouvez spécifier un attribut optionnel <emphasis>assign</emphasis>
qui définit une variable de template dans laquelle la sortie de
<emphasis>include</emphasis> sera stockée plutôt qu'affichée.
</para>
<example>
<title>fonction include</title>
<programlisting>
{include file="header.tpl"}
{* Le corp du template va ici *}
{include file="footer.tpl"}</programlisting>
</example>
<para>
Vous pouvez également passer des variables au template inclus
sous forme d'attributs. Les variables passées au template par ce moyen
ne sont accessibles que dans la portée de ce dernier. Les variables
passées en tant qu'attribut remplacent les variables déjà définies,
qui auraient le même nom.
</para>
<example>
<title>fonction include, passage de variables</title>
<programlisting>
{include file="header.tpl" title="Menu principal" table_bgcolor="#c0c0c0"}
{* Le corps du template vient ici *}
{include file="footer.tpl" logo="http://mon.domaine.com/logo.gif"}</programlisting>
</example>
<para>
Utilisez la syntaxe <link
linkend="template.resources">ressource template</link> pour inclure
des fichiers situés en dehors du répertoire $template_dir.
</para>
<example>
<title>fonction include, exemple de ressource template</title>
<programlisting>
{* chemin absolu *}
{include file="/usr/local/include/templates/header.tpl"}
{* chemin absolu (même chose) *}
{include file="file:/usr/local/include/templates/header.tpl"}
{* chemin absolu windows (DOIT utiliser le préfixe "file:") *}
{include file="file:C:/www/pub/templates/header.tpl"}
{* inclusion d'une ressource template "db" *}
{include file="db:header.tpl"}</programlisting>
</example>
</sect1>
<sect1 id="language.function.include.php">
<title>include_php</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>chaîne de caractère</entry>
<entry>oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom du fichier PHP à inclure</entry>
</row>
<row>
<entry>once</entry>
<entry>boléen</entry>
<entry>Non</entry>
<entry><emphasis>true</emphasis></entry>
<entry>Inclure plusieurs fois ou non le fichier PHP si
plusieurs demandes d'inclusions sont faites.</entry>
</row>
<row>
<entry>assign</entry>
<entry>chaîne de caractère</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>le nom de la variable PHP dans laquelle la sortie
sera assignée plutôt que directement affichée.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
les balises include_php sont utilisées pour inclure directement
un script PHP dans vos templates. Si "security" est activé, alors le script
à exécuter doit être placé dans le chemin $trusted_dir. La balise
include_php attends l'attribut "file", qui contient le chemin du
fichier PHP à inclure, relatif à $trusted_dir, ou absolu.
</para>
<para>
include_php est un moyen agréable pour gérer des "composants templates",
tout en conservant le code PHP en dehors du template lui même.
Supposons que vous ayez un template reprenant la navigation de votre
site, elle même récupérée depuis une base de données. Vous pouvez
conserver la logique du code PHP récupérant le contenu de la base dans
un emplacement séparé, et l'inclure depuis votre template. Maintenant,
vous pouvez utiliser ce template n'importe ou, sans vous inquiéter de
savoir si les informations nécessaires ont bien étés assignées
par l'application, avant la demande d'affichage.
</para>
<para>
Par défaut, les fichiers PHP ne sont inclus qu'une seule fois, même si
la demande d'inclusion survient plusieurs fois dans le template.
Vous pouvez demander à ce que ce fichier soit inclus à chaque demande
grâce à l'attribut <emphasis>once</emphasis>. Mettre l'attribut once à
false aura pour effet d'inclure le script PHP à chaque fois que demandé
dans le template.
</para>
<para>
Vous pouvez donner une valeur à l'attribut optionnel
<emphasis>assign</emphasis>, pour demander à la fonction
<emphasis>include_php</emphasis> d'assigner la sortie du script PHP
à la variable spécifiée plutôt que d'en afficher directement le résultat.
</para>
<para>
L'objet Smarty est disponible en tant que $this dans le script PHP inclus.
</para>
<example>
<title>fonction include_php</title>
<programlisting>
load_nav.php
-------------
&lt;?php
// charge des variables depuis une base de données mysql et les assigne au template.
require_once("MySQL.class.php");
$sql = new MySQL;
$sql->query("select * from site_nav_sections order by name",SQL_ALL);
$this->assign('sections',$sql->record);
?&gt;
index.tpl
---------
{* chemin absolu, ou relatif à $trusted_dir *}
{include_php file="/path/to/load_nav.php"}
{foreach item="curr_section" from=$sections}
&lt;a href="{$curr_section.url}"&gt;{$curr_section.name}&lt;/a&gt;&lt;br&gt;
{/foreach}</programlisting>
</example>
</sect1>
<sect1 id="language.function.insert">
<title>insert</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>chaîne de caractères</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>le nom de la fonction insert (insert_name)</entry>
</row>
<row>
<entry>assign</entry>
<entry>chaîne de caractère</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom de la variable qui recevra la sortie</entry>
</row>
<row>
<entry>script</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom du script PHP inclus avant que la fonction
insert ne soit appelée.</entry>
</row>
<row>
<entry>[var ...]</entry>
<entry>[var type]</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Variable à passer à la fonction insert</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Les balises insert fonctionnent à peu près comme les balises include,
à l'exception que leur sortie n'est pas placée en cache lorsque
<link linkend="caching">le cache [caching]</link> est activé.
Les balises insert seront exécutées à chaque appel du template.
</para>
<para>
Supposons que vous avez un template avec un emplacement
pour un bandeau publicitaire en haut de page.
Ce bandeau publicitaire peut contenir toutes sortes de contenus
HTML, images, flash, etc. Nous ne pouvons pas placer du contenu
statique à cet endroit. Nous ne voulons pas non plus que ce
contenu fasse partie du cache. Arrive alors la balise insert.
Le template connais #emplacement_bandeau# et #id_site# (récupérés
depuis un fichier de configuration), et à besoin d'un appel de
fonction pour récupérer le contenu du bandeau.
</para>
<example>
<title>function insert</title>
<programlisting>
{* exemple de récupération d'un bandeau publicitaire *}
{insert name="getBanner" lid=#emplacement_bandeau# sid=#id_site#}</programlisting>
</example>
<para>
Dans cet exemple, nous utilisons le nom getBanner et lui passons les
paramètres #emplacement_bandeau# et #id_site#. Smarty va rechercher une
fonction appelée insert_getBanner () dans votre application PHP, et lui
passer les valeurs #banner_location_id# et #site_id# comme premier
paramètre, dans un tableau associatif. Tous les noms des fonctions insert
de votre application doivent être prefixées de "insert_" pour remédier
à d'éventuels conflits de nommage. Votre fonction insert_getBanner ()
est supposée traiter les valeurs passées et retourner
un résultat. Ces résultats sont affichés dans le template en lieu et
place de la balise. Dans cet exemple, Smarty appellera cette fonction
insert_getBanner(array("lid" => "12345","sid" => "67890")); et affichera
le résultat retourné à la place de la balise insert.
</para>
<para>
Si vous donnez une valeur à l'attribut "assign", la sortie de la balise
insert sera assigné à une variable de template de ce nom au lieu d'être
affichée directement. NOTE: assigner la sortie à une variable n'est pas
très utile lorsque le cache est activé.
</para>
<para>
Si vous donnez une valeur à l'attribut "script", ce script PHP sera
inclus (une seule fois) avant l'exécution de la fonction insert.
Le cas peut survenir lorsque la fonction insert n'existe pas encore,
et que le script PHP chargé de sa définission doit être inclus. Le
chemin doit être absolu ou relatif à $trusted_dir.
Lorsque "security" est actif, le script doit être situé
dans $trusted_dir.
</para>
<para>
L'objet Smarty est passé comme second argument. De cette façon, vous
pouvez utiliser ou modifier des informations sur l'objet Smarty,
directement depuis votre fonction d'insertion.
</para>
<note>
<title>Note technique</title>
<para>
Il est possible d'avoir des portions de template qui ne soient pas
gérables par le cache. Même si vous avez activé l'option
<link linkend="caching">caching</link>, les balises insert
ne feront pas partie du cache. Elles retourneront un contenu dynamique
à chaque invocation de la page. Cette méthode est très pratique pour
des éléments tels que les bandeaux publicitaires, les enquêtes,
la météo, les résultats de recherche, retours utilisateurs, etc.
</para>
</note>
</sect1>
<sect1 id="language.function.if">
<title>if,elseif,else</title>
<para>
l'instruction if dans Smarty dispose de la même flexibilité que l'instruction
PHP du même nom, avec quelques fonctionnalités supplémentaires pour le
moteur de template. Tous les <emphasis>if</emphasis> doivent être
utilisés de pair avec un <emphasis>/if</emphasis>.
<emphasis>else</emphasis> et <emphasis>elseif</emphasis> sont également
des balises autorisées. "eq", "ne","neq", "gt", "lt", "lte", "le",
"gte" "ge","is even","is odd", "is not even","is not odd","not","mod",
"div by","even by","odd by","==","!=","&gt;", "&lt;","&lt;=","&gt;=" sont tous
des opérateurs conditionnels valides, et doivent obligatoirement être
séparés des autres éléments par des espaces.
</para>
<example>
<title>Instruction if</title>
<programlisting>
{if $name eq "Fred"}
Bienvenue, Monsieur.
{elseif $name eq "Wilma"}
Bienvenue m'dame.
{else}
Bienvenue, qui que vous soyez.
{/if}
{* Un exemple avec l'opérateur or *}
{if $name eq "Fred" or $name eq "Wilma"}
...
{/if}
{* même chose que ci-dessus *}
{if $name == "Fred" || $name == "Wilma"}
...
{/if}
{* l'exemple suivant NE fonctionne PAS, les opérateurs
doivent être entourés d'espaces. *}
{if $name=="Fred" || $name=="Wilma"}
...
{/if}
{* les parenthèses sont autorisées *}
{if ( $amount &lt; 0 or $amount &gt; 1000 ) and $volume &gt;= #minVolAmt#}
...
{/if}
{* vous pouvez également faire appel aux fonctions PHP *}
{if count($var) gt 0}
...
{/if}
{* teste si les valeurs sont paires(even) ou impaires(odd) *}
{if $var is even}
...
{/if}
{if $var is odd}
...
{/if}
{if $var is not odd}
...
{/if}
{* teste si la variable est divisble par 4 *}
{if $var is div by 4}
...
{/if}
{* teste si la variable est paire, par groupe de deux i.e.,
0=paire, 1=paire, 2=impaire, 3=impaire, 4=paire, 5=paire, etc. *}
{if $var is even by 2}
...
{/if}
{* 0=paire, 1=paire, 2=paire, 3=impaire, 4=impaire, 5=impaire, etc. *}
{if $var is even by 3}
...
{/if}</programlisting>
</example>
</sect1>
<sect1 id="language.function.ldelim">
<title>ldelim,rdelim</title>
<para>
ldelim et rdelim sont utilisés pour afficher les délimiteurs en tant
que tels, dans notre cas "{" ou "}". Le moteur de template tentera
toujours d'interpréter le contenu entre les délimiteurs, c'est donc
une façon d'afficher ces derniers sans interférer avec Smarty.
</para>
<example>
<title>ldelim, rdelim</title>
<programlisting>
{* Affiche les délimiteurs de template *}
{ldelim}nomFonction{rdelim} est la façon dont sont appelées les fonctions dans Smarty !
SORTIE:
{nomFonction} est la façon dont sont appelées les fonctions dans Smarty !</programlisting>
</example>
</sect1>
<sect1 id="language.function.literal">
<title>literal</title>
<para>
Les balises "literal" permettent à un bloc de données d'être pris tel
quel, sans qu'il ne soit interprété par Smarty. Très pratique lors
de l'emplois d'éléments tels que javascript, acolades et autres
qui peuvent confondre le moteur de template. Tout le contenu situé
entre les balises {literal}{/literal} ne sera pas interprété, et
affiché comme du contenu statique.
</para>
<example>
<title>balises literal</title>
<programlisting>
{literal}
&lt;script language=javascript&gt;
&lt;!--
function isblank(field) {
if (field.value == '')
{ return false; }
else
{
document.loginform.submit();
return true;
}
}
// --&gt;
&lt;/script&gt;
{/literal}</programlisting>
</example>
</sect1>
<sect1 id="language.function.php">
<title>php</title>
<para>
Les balises PHP permettent de rajouter du code PHP directement dans le
template. Ils ne seront pas ignorés, quelle que soit la valeur de <link
linkend="variable.php.handling">$php_handling</link>. Pour les
utilisateurs avancés seulement, son utilisation n'est normalement pas
nécessaire.
</para>
<example>
<title>balises php</title>
<programlisting>
{php}
// inclusion directe d'un script PHP
// depuis le template.
include("/path/to/display_weather.php");
{/php}</programlisting>
</example>
</sect1>
<sect1 id="language.function.section">
<title>section,sectionelse</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>chaîne de caractère</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom de la section</entry>
</row>
<row>
<entry>loop</entry>
<entry>[$nom_variable]</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>le nom de la variable qui détermine le nombre de
fois que la boucle sera exécutée.
</entry>
</row>
<row>
<entry>start</entry>
<entry>entier</entry>
<entry>Non</entry>
<entry><emphasis>0</emphasis></entry>
<entry>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.</entry>
</row>
<row>
<entry>step</entry>
<entry>entier</entry>
<entry>Non</entry>
<entry><emphasis>1</emphasis></entry>
<entry>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.</entry>
</row>
<row>
<entry>max</entry>
<entry>entier</entry>
<entry>Non</entry>
<entry><emphasis>1</emphasis></entry>
<entry>Définit le nombre maximum de fois que le tableau sera
parcouru.</entry>
</row>
<row>
<entry>show</entry>
<entry>booléen</entry>
<entry>Non</entry>
<entry><emphasis>true</emphasis></entry>
<entry>Détermine s'il est nécessaire d'afficher la
section ou non.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Les balises <emphasis>section</emphasis> sont utilisées pour
parcourir un tableau de données. Toutes les balises
<emphasis>section</emphasis> doivent être utilisées de paire avec
les balises <emphasis>/section</emphasis>. Les paramètres requis
sont <emphasis>name</emphasis> et <emphasis>loop</emphasis>.
Le nom de la section est, selon votre choix, composé de lettres,
chiffres et underscores. Les sections peuvent être imbriquées,
mais leurs noms doivent être uniques. La variable de parcours
(généralement un tableau de données) détermine le nombre de fois
que la section sera parcourue. Lorsque l'on affiche une variable
dans une section, le nom de la section doit précéder
la variable entre crochets. <emphasis>sectionelse</emphasis>
est exécuté lorsqu'aucune valeur n'est trouvée dans la variable à
parcourir.
</para>
<example>
<title>section</title>
<programlisting>
{* Cet exemple va afficher toutes les valeurs du tableau $custid *}
{section name=client loop=$custid}
id: {$custid[client]}&lt;br&gt;
{/section}
SORTIE:
id: 1000&lt;br&gt;
id: 1001&lt;br&gt;
id: 1002&lt;br&gt;</programlisting>
</example>
<example>
<title>section, variable de parcours</title>
<programlisting>
{* La variable de parcours détermine uniquement le nombre de fois que nous allons
rentrer dans la boucle. Vous pouvez accéder à toutes les variables du template
lorsque vous êtes dans une section. Cet exemple part du principe que
$idClient, $noms et $adresses sont tous des tableaux qui contiennent
autant de valeurs les uns que les autres.*}
{section name=client loop=$custid}
id: {$idClient[client]}&lt;br&gt;
nom: {$noms[client]}&lt;br&gt;
addresse: {$addresses[client]}&lt;br&gt;
&lt;p&gt;
{/section}
SORTIE:
id: 1000&lt;br&gt;
nom: John Smith&lt;br&gt;
addresse: 253 N 45th&lt;br&gt;
&lt;p&gt;
id: 1001&lt;br&gt;
nom: Jack Jones&lt;br&gt;
addresse: 417 Mulberry ln&lt;br&gt;
&lt;p&gt;
id: 1002&lt;br&gt;
nom: Jane Munson&lt;br&gt;
addresse: 5605 apple st&lt;br&gt;
&lt;p&gt;</programlisting>
</example>
<example>
<title>nom de section</title>
<programlisting>
{* Le nom de la section peut être ce que vous voulez,
et est utilisé pour référencer les données depuis la section. *}
{section name=monTableau loop=$idClient}
id: {$idCLient[monTableau]}&lt;br&gt;
name: {$noms[monTableau]}&lt;br&gt;
address: {$addresses[monTableau]}&lt;br&gt;
&lt;p&gt;
{/section}</programlisting>
</example>
<example>
<title>sections imbriquées</title>
<programlisting>
{* Les sections peuvent être imbriquées à un nombre de niveaux illimité.
Grâce aux sections imbriquées, vous pouvez accéder à des structures de données
complexes, comme des tableaux multi-dimentionnels. Dans cet exemple,
$type_contact[client] est un tableau de type de contact pour le client
courant. *}
{section name=client loop=$custid}
id: {$idClient[client]}&lt;br&gt;
nom: {$nom[client]}&lt;br&gt;
addresse: {$addresse[client]}&lt;br&gt;
{section name=contact loop=$type_contact[client]}
{$type_contact[client][contact]}: {$info_contact[client][contact]}&lt;br&gt;
{/section}
&lt;p&gt;
{/section}
SORTIE:
id: 1000&lt;br&gt;
nom: John Smith&lt;br&gt;
addresse: 253 N 45th&lt;br&gt;
telephone: 555-555-5555&lt;br&gt;
telephone portable: 555-555-5555&lt;br&gt;
e-mail: john@mydomain.com&lt;br&gt;
&lt;p&gt;
id: 1001&lt;br&gt;
nom: Jack Jones&lt;br&gt;
addresse: 417 Mulberry ln&lt;br&gt;
telephone: 555-555-5555&lt;br&gt;
telephone portable: 555-555-5555&lt;br&gt;
e-mail: jack@mydomain.com&lt;br&gt;
&lt;p&gt;
id: 1002&lt;br&gt;
nom: Jane Munson&lt;br&gt;
addresse: 5605 apple st&lt;br&gt;
telephone: 555-555-5555&lt;br&gt;
telephone portable: 555-555-5555&lt;br&gt;
e-mail: jane@mydomain.com&lt;br&gt;
&lt;p&gt;</programlisting>
</example>
<example>
<title>Sections et tableaux associatifs</title>
<programlisting>
{* Exemple d'affichage d'un tableau associatif dans une section *}
{section name=client loop=$contacts}
nom: {$contacts[client].name}&lt;br&gt;
telephone: {$contacts[client].home}&lt;br&gt;
portable: {$contacts[client].cell}&lt;br&gt;
e-mail: {$contacts[client].email}&lt;p&gt;
{/section}
SORTIE:
nom: John Smith&lt;br&gt;
telephone: 555-555-5555&lt;br&gt;
portable: 555-555-5555&lt;br&gt;
e-mail: john@mydomain.com&lt;p&gt;
nom: Jack Jones&lt;br&gt;
telephone: 555-555-5555&lt;br&gt;
portable: 555-555-5555&lt;br&gt;
e-mail: jack@mydomain.com&lt;p&gt;
nom: Jane Munson&lt;br&gt;
telephone: 555-555-5555&lt;br&gt;
portable: 555-555-5555&lt;br&gt;
e-mail: jane@mydomain.com&lt;p&gt;</programlisting>
</example>
<example>
<title>sectionelse</title>
<programlisting>
{* sectionelse est exécuté s'il n'existe aucune valeur dans idClient *}
{section name=client loop=$idClient}
id: {$idClient[client]}&lt;br&gt;
{sectionelse}
Aucune valeur dans $idClient.
{/section}</programlisting>
</example>
<para>
Les sections ont leur propre variable de gestion des propriétés.
Elles sont de la forme: {$smarty.section.nomSection.nomVariable}
</para>
<para>
NOTE: Depuis Smarty 1.5.0, la syntaxe pour les propiétés des sections
a été changée de {%sectionname.varname%} à
{$smarty.section.nomSection.nomVariable}. L'ancienne syntaxe est toujours
supportée, mais vous ne verrez que des exemples avec la nouvelle syntaxe
dans le manuel.
</para>
<sect2 id="section.property.index">
<title>index</title>
<para>
Index est utilisé pour afficher l'index de parcours courant, commence par
0 (ou l'attribut start), et s'incrémente de 1 (ou de la valeur
de l'attribut step).
</para>
<note>
<title>Note technique</title>
<para>
Si les attributs step et start ne sont pas modifiés, alors index
fonctionne de la même façon que iteration, à l'exception qu'il commence
par 0 plutôt que par 1.
</para>
</note>
<example>
<title>propriété de section index</title>
<programlisting>
{section name=client loop=$idClient}
{$smarty.section.client.index} id: {$idClient[client]}&lt;br&gt;
{/section}
SORTIE:
0 id: 1000&lt;br&gt;
1 id: 1001&lt;br&gt;
2 id: 1002&lt;br&gt;
</programlisting>
</example>
</sect2>
<sect2 id="section.property.index.prev">
<title>index_prev</title>
<para>
index_prev est utilisé pour afficher l'index de parcours
précédent de la boucle. Au premier passage, il vaut -1.
</para>
<example>
<title>propriété de section index_prev</title>
<programlisting>
{section name=client loop=$custid}
{$smarty.section.client.index} id: {$idClient[client]}&lt;br&gt;
{* Pour votre information, $idClient[client.index] and $idClient[client] sont identiques *}
{if $idClient[client.index_prev] ne $idClient[client.index]}
L'id du client à été modifié&lt;br&gt;
{/if}
{/section}
SORTIE:
0 id: 1000&lt;br&gt;
L'id du client à été modifié&lt;br&gt;
1 id: 1001&lt;br&gt;
L'id du client à été modifié&lt;br&gt;
2 id: 1002&lt;br&gt;
L'id du client à été modifié&lt;br&gt;
</programlisting>
</example>
</sect2>
<sect2 id="section.property.index.next">
<title>index_next</title>
<para>
index_next est utilisé pour afficher la valeur théorique suivante de
index. Dans la dernière boucle, cela reste la valeur incrémentée,
qui respecte l'attribut step si donné.
</para>
<example>
<title>propriété de section index_next</title>
<programlisting>
{section name=client loop=$idClient}
{$smarty.section.client.index} id: {$idClient[client]}&lt;br&gt;
{* Pour votre information, $idClient[client.index] and $idClient[client] sont identiques *}
{if $idClient[client.index_next] ne $idClient[client.index]}
L'id du client va changer&lt;br&gt;
{/if}
{/section}
SORTIE:
0 id: 1000&lt;br&gt;
L'id du client va changer&lt;br&gt;
1 id: 1001&lt;br&gt;
L'id du client va changer&lt;br&gt;
2 id: 1002&lt;br&gt;
L'id du client va changer&lt;br&gt;
</programlisting>
</example>
</sect2>
<sect2 id="section.property.iteration">
<title>iteration</title>
<para>
iteration est utilisé pour afficher la valeur courante de l'iteration.
</para>
<para>
NOTE: Cette valeur n'est pas affectée par les attributs start, step et
max, à l'inverse de la propriété index. L'itération commence par
1 et non par 0 (comme le fait index). rownum est un alias de iteration,
ils fonctionnent de la même façon.
</para>
<example>
<title>propriété iteration de section</title>
<programlisting>
{section name=client loop=$idClient start=5 step=2}
Iteration courante: {$smarty.section.client.iteration}&lt;br&gt;
{$smarty.section.client.index} id: {$idClient[client]}&lt;br&gt;
{* Pour votre information, $idClient[client.index] and $idClient[client] sont identiques *}
{if $idCLient[client.index_next] ne $idClient[client.index]}
L'id du client va changer&lt;br&gt;
{/if}
{/section}
SORTIE:
Iteration courante: 1
5 id: 1000&lt;br&gt;
L'id du client va changer&lt;br&gt;
Iteration courante: 2
7 id: 1001&lt;br&gt;
L'id du client va changer&lt;br&gt;
Iteration courante: 3
9 id: 1002&lt;br&gt;
L'id du client va changer&lt;br&gt;
</programlisting>
</example>
</sect2>
<sect2 id="section.property.first">
<title>first</title>
<para>
first est à true lorsque la section est parcouru pour la première fois.
</para>
<example>
<title>propriété first de la section</title>
<programlisting>
{section name=client loop=$idClient}
{if $smarty.section.client.first}
&lt;table&gt;
{/if}
&lt;tr&gt;&lt;td&gt;{$smarty.section.client.index} id:
{$idClient[client]}&lt;/td&gt;&lt;/tr&gt;
{if $smarty.section.client.last}
&lt;/table&gt;
{/if}
{/section}
SORTIE:
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;0 id: 1000&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1 id: 1001&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2 id: 1002&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</programlisting>
</example>
</sect2>
<sect2 id="section.property.last">
<title>last</title>
<para>
last est à true lorsque la section est parcourue pour la dernière fois.
</para>
<example>
<title>Propriété last de section</title>
<programlisting>
{section name=client loop=$idClient}
{if $smarty.section.client.first}
&lt;table&gt;
{/if}
&lt;tr&gt;&lt;td&gt;{$smarty.section.client.index} id:
{$idClient[client]}&lt;/td&gt;&lt;/tr&gt;
{if $smarty.section.client.last}
&lt;/table&gt;
{/if}
{/section}
SORTIE:
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;0 id: 1000&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1 id: 1001&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2 id: 1002&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</programlisting>
</example>
</sect2>
<sect2 id="section.property.rownum">
<title>rownum</title>
<para>
rownum, utilisé pour afficher la valeur courante de l'itération,
commence par 1. C'est un alias de iteration, ils fonctionnent de façon
identique.
</para>
<example>
<title>propriété rownum de section</title>
<programlisting>
{section name=client loop=$idClient}
{$smarty.section.client.rownum} id: {$idClient[client]}&lt;br&gt;
{/section}
SORTIE:
1 id: 1000&lt;br&gt;
2 id: 1001&lt;br&gt;
3 id: 1002&lt;br&gt;
</programlisting>
</example>
</sect2>
<sect2 id="section.property.loop">
<title>loop</title>
<para>
loop est utilisé pour afficher la dernière valeur de index que cette
section a utilisé. Peut être utilisé dans ou en dehors de la section.
</para>
<example>
<title>Propriété de section index</title>
<programlisting>
{section name=client loop=$idClient}
{$smarty.section.client.index} id: {$idClient[client]}&lt;br&gt;
{/section}
Il y eu {$smarty.section.client.loop} clients d'affichés.
SORTIE:
0 id: 1000&lt;br&gt;
1 id: 1001&lt;br&gt;
2 id: 1002&lt;br&gt;
il y eu 3 clients d'affichés.
</programlisting>
</example>
</sect2>
<sect2 id="section.property.show">
<title>show</title>
<para>
<emphasis>show</emphasis> est utilisé comme paramètre de section.
<emphasis>show</emphasis> est une valeur booléenne, true ou false.
Si show est à "false", la section ne sera pas affichée. Si un
sectionelse est présent, elle sera affiché.
</para>
<example>
<title>section, attribut show</title>
<programlisting>
{* $show_client_info a pu être passé par le script PHP,
pour déterminer si oui ou non on souhaite afficher la section *}
{section name=client loop=$idClient show=$show_client_info}
{$smarty.section.client.rownum} id: {$idClient[client]}&lt;br&gt;
{/section}
{if $smarty.section.client.show}
la section à été affichée.
{else}
la section n'a pas été affichée.
{/if}
SORTIE:
1 id: 1000&lt;br&gt;
2 id: 1001&lt;br&gt;
3 id: 1002&lt;br&gt;
la section à été affichée.
</programlisting>
</example>
</sect2>
<sect2 id="section.property.total">
<title>total</title>
<para>
total est utilisé pour afficher le nombre d'itération que la section
va exécuter. Peut être utilisé dans ou en dehors de la section.
</para>
<example>
<title>section, propriété total</title>
<programlisting>
{section name=client loop=$idClient step=2}
{$smarty.section.client.index} id: {$idClient[client]}&lt;br&gt;
{/section}
Il y eu {$smarty.section.client.total} clients affichés.
SORTIE:
0 id: 1000&lt;br&gt;
2 id: 1001&lt;br&gt;
4 id: 1002&lt;br&gt;
Il y eu 3 clients affichés.
</programlisting>
</example>
</sect2>
</sect1>
<sect1 id="language.function.strip">
<title>strip</title>
<para>
Il est fréquent que les designers web rencontrent des problèmes
dus aux espaces et retours chariots, qui affectent le rendu HTML
("fonctionnalités" des navigateurs), les obligeant à coller les
balises les unes aux autres. Cette solution rend généralement le
code illisible et impossible à maintenir.
</para>
<para>
Tout contenu situé entre les balises {strip}{/strip} se verra
allégé des espaces superflus et des retours chariots en début ou en fin
de ligne, avant qu'il ne soit affichés. De la sorte, vous pouvez
conserver vos templates lisibles, sans vous soucier des effets
indésirables que peuvent apporter les espaces superflus.
</para>
<note>
<title>Note technique</title>
<para>
{strip}{/strip} n'affecte en aucun cas le contenu des variables de
template. Voir le <link linkend="language.modifier.strip">modificateur
strip</link> pour un rendu identique pour les variables.
</para>
</note>
<example>
<title>balises strip</title>
<programlisting>
{* la suite sera affichée sur une seule ligne *}
{strip}
&lt;table border=0&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;A HREF="{$url}"&gt;
&lt;font color="red"&gt;Un test&lt;/font&gt;
&lt;/A&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
{/strip}
SORTIE:
&lt;table border=0&gt;&lt;tr&gt;&lt;td&gt;&lt;A HREF="http://mon.domaine.com"&gt;&lt;font color="red"&gt;Un test&lt;/font&gt;&lt;/A&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</programlisting>
</example>
<para>
Notez que dans l'exemple ci-dessus, toutes les lignes commencent et
se terminent par des balises HTML. Sachez que si vous avez du texte
en début ou en fin de ligne dans des balises strip, ce dernier sera collé
au suivant/précédent et risque de ne pas être affiché selon
l'effet désiré.
</para>
</sect1>
</chapter>
<chapter id="language.custom.functions">
<title>Fonctions utilisateur</title>
<para>
Smarty est livré avec plusieurs fonctions utilisateurs que vous pouvez
appeler dans vos templates.
</para>
<sect1 id="language.function.assign">
<title>assign</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>var</entry>
<entry>chaîne de caractère</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom de la variable assignée</entry>
</row>
<row>
<entry>value</entry>
<entry>chaîne de caractère</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>La valeur assignée</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Assign est utilisé pour déclarer ou modifier des variables de template.
</para>
<example>
<title>assign</title>
<programlisting>
{assign var="name" value="Bob"}
La valeur de $name est {$name}.
SORTIE:
La valeur de $name est Bob.</programlisting>
</example>
</sect1>
<sect1 id="language.function.counter">
<title>counter</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>chaîne de caractère</entry>
<entry>Non</entry>
<entry><emphasis>default</emphasis></entry>
<entry>Le nom du compteur</entry>
</row>
<row>
<entry>start</entry>
<entry>numérique</entry>
<entry>Non</entry>
<entry><emphasis>1</emphasis></entry>
<entry>La valeur initiale du compteur</entry>
</row>
<row>
<entry>skip</entry>
<entry>numérique</entry>
<entry>Non</entry>
<entry><emphasis>1</emphasis></entry>
<entry>L'intervale du compteur</entry>
</row>
<row>
<entry>direction</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>up</emphasis></entry>
<entry>la direction du compteur (up/down) [compte / décompte]</entry>
</row>
<row>
<entry>print</entry>
<entry>booléen</entry>
<entry>Non</entry>
<entry><emphasis>true</emphasis></entry>
<entry>S'il faut afficher cette valeur ou non</entry>
</row>
<row>
<entry>assign</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>La variable dans laquelle la valeur du compteur
sera assignée.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
counter affiche un compteur. counter retient la valeur
du compte à chaque itération. Vous pouvez adapter le nombre, l'intervale
et la direction du compteur, ainsi que décider d'afficher ou non
les valeurs. Vous pouvez lancer plusieurs compteurs simultanément en
leur donnant des noms uniques. Si vous ne donnez pas de nom à un
compteur, 'default' sera utilisé.
</para>
<para>
Si vous donnez une valeur à l'attribut "assign", alors la sortie de la
fonction counter sera assignée à la variable de template donnée plutôt
que d'être directement affichée.
</para>
<example>
<title>counter</title>
<programlisting>
{* initialisation du compteur *}
{counter start=0 skip=2 print=false}
{counter}&lt;br&gt;
{counter}&lt;br&gt;
{counter}&lt;br&gt;
{counter}&lt;br&gt;
SORTIE:
2&lt;br&gt;
4&lt;br&gt;
6&lt;br&gt;
8&lt;br&gt;</programlisting>
</example>
</sect1>
<sect1 id="language.function.cycle">
<title>cycle</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>default</emphasis></entry>
<entry>Le nom du cycle</entry>
</row>
<row>
<entry>values</entry>
<entry>divers</entry>
<entry>Oui</entry>
<entry><emphasis>N/A</emphasis></entry>
<entry>Les valeurs sur lesquelles boucler, soit une liste
séparée par des virgules, (voir l'attribut delimiter),
soit un tableau de valeurs.</entry>
</row>
<row>
<entry>print</entry>
<entry>booléen</entry>
<entry>Non</entry>
<entry><emphasis>true</emphasis></entry>
<entry>S'il faut afficher ou non cette valeur</entry>
</row>
<row>
<entry>advance</entry>
<entry>booléen</entry>
<entry>Non</entry>
<entry><emphasis>true</emphasis></entry>
<entry>Oui ou non aller à la prochaîne valeur</entry>
</row>
<row>
<entry>delimiter</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>,</emphasis></entry>
<entry>Le délimiteur à utiliser dans la liste.</entry>
</row>
<row>
<entry>assign</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>La variable de template dans laquelle la sortie
sera assignée</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
cycle est utilisé pour boucler sur un ensemble de valeurs. Très pratique
pour alterner entre deux ou plusieurs couleurs dans un tableau,
ou plus généralement pour boucler sur les valeurs d'un tableau.
</para>
<para>
Vous pouvez définir plusieurs "cycle" dans votre template, en leur
donnant des noms uniques (attribut name).
</para>
<para>
Vous pouvez empêcher la valeur courante de s'afficher en définissant
l'attribut print à false. Ce procédé peut être utile pour discrètement
passer outre une valeur de la liste.
</para>
<para>
L'attribut advance est utilisé pour répéter une valeur. Lorsque
définit à false, le prochain appel de cycle ramènera la même valeur.
</para>
<para>
Si vous définissez l'attribut spécial "assign", la sortie de la fonction
cycle y sera assignée plutôt que d'être directement affichée.
</para>
<example>
<title>cycle</title>
<programlisting>
{section name=rows loop=$data}
&lt;tr bgcolor="{cycle values="#eeeeee,#d0d0d0"}"&gt;
&lt;td&gt;{$data[rows]}&lt;/td&gt;
&lt;/tr&gt;
{/section}
SORTIE:
&lt;tr bgcolor="#eeeeee"&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bgcolor="#d0d0d0"&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bgcolor="#eeeeee"&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
</programlisting>
</example>
</sect1>
<sect1 id="language.function.debug">
<title>debug</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>output</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>html</emphasis></entry>
<entry>Type de sortie, html ou javascript</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
{debug} amène la console de débogage sur la page. Fonctionne
quelle que soit la valeur du paramètre <link
linkend="chapter.debugging.console">debug</link> de Smarty.
Comme ce dernier est appelé lors de l'exécution, il n'est capable
d'afficher que les variables assignées au template, et non
les templates en cours d'utilisation. Toutefois, vous voyez toutes
les variables disponibles pour le template courant.
</para>
</sect1>
<sect1 id="language.function.eval">
<title>eval</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>var</entry>
<entry>mixed</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>variable (ou chaîne de caractères) à évaluer</entry>
</row>
<row>
<entry>assign</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom de la variable PHP dans laquelle la sortie
sera assignée</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
eval évalue une variable comme si cette dernière était un template.
Peut être utile pour embarquer des balises de templates ou des variables
de template dans des variables ou des balises/variables dans des
variables de fichiers de configuration.
</para>
<para>
Si vous définissez l'attribut "assign", la sortie sera assignée à la
variable de template désignée plutôt que d'être affichée dans le
template.
</para>
<note>
<title>Note technique</title>
<para>
Les variables évaluées sont traitées de la même façon que les templates.
Elles suivent les mêmes règles de traitement et de sécurité, comme si
elles étaient réellement des templates.
</para>
</note>
<note>
<title>Note technique</title>
<para>
Les variables évaluées sont compilées à chaque invocation, et la version
compilée n'est pas sauvegardée ! Toutefois, si le cache est activé,
la sortie sera placée en cache avec le reste du template.
</para>
</note>
<example>
<title>eval</title>
<programlisting>
setup.conf
----------
emphstart = &lt;b&gt;
emphend = &lt;/b&gt;
titre = Bienvenue sur la homepage de {$company} !
ErrorVille = Vous devez spécifier un nom de {#emphstart#}ville{#emphend#}.
ErrorDept = Vous devez spécifier un {#emphstart#}département{#emphend#}.
index.tpl
---------
{config_load file="setup.conf"}
{eval var=$foo}
{eval var=#titre#}
{eval var=#ErrorVille#}
{eval var=#ErrorDept# assign="state_error"}
{$state_error}
SORTIE:
Ceci est le contenu de foo.
Bienvenue sur la homepage de FictifLand.
Vous devez spécifier un nom de &lt;b&gt;ville&lt;/b&gt;.
Vous devez spécifier un &lt;b&gt;département&lt;/b&gt;.
</programlisting>
</example>
</sect1>
<sect1 id="language.function.fetch">
<title>fetch</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>chaîne de caractères</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>le fichier, site http ou ftp à récupérer</entry>
</row>
<row>
<entry>assign</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>le nom de la variable PHP dans laquelle la sortie
sera assignée plutôt que d'être directement affichée.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
fetch est utilisé pour récupérer des fichiers depuis le système de
fichier local, depuis un serveur http ou ftp, et en afficher le contenu.
Si le nom du fichier commence par "http://", la page internet sera
récupérée, puis affichée. Si le nom du fichier commence par "ftp://",
le fichier sera récupéré depuis le serveur ftp, et affiché.
Pour les fichiers du système local, le chemin doit être absolu ou
relatif au chemin d'exécution du script PHP.
</para>
<para>
Vous pouvez spécifier l'attribut optionnel <emphasis>assign</emphasis>
qui défini une variable de template dans laquelle la sortie
sera stockée plutôt qude d'être affichée (nouveau dans Smarty 1.5.0).
</para>
<note>
<title>Note technique</title>
<para>Ne supporte pas les redirections http. Assurez vous d'inclure les
slash de fin sur votre page web si nécessaire.
</para>
</note>
<note>
<title>Note technique</title>
<para>
Si la sécurité est activée, vous ne pourez récupérer les
fichiers du système local que s'ils sont situés dans l'un des
répertoires sécurisé ($secure_dir).
</para>
</note>
<example>
<title>fetch</title>
<programlisting>
{* Inclus du javascript dans votre template *}
{fetch file="/export/httpd/www.domain.com/docs/navbar.js"}
{* récupère les informations météo d'un autre site sur votre page *}
{fetch file="http://www.myweather.com/68502/"}
{* récupère les titres depuis un fichier ftp *}
{fetch file="ftp://user:password@ftp.domain.com/path/to/currentheadlines.txt"}
{* assigne le contenu récupéré à une variable de template *}
{fetch file="http://www.myweather.com/68502/" assign="weather"}
{if $weather ne ""}
&lt;b&gt;{$weather}&lt;/b&gt;
{/if}</programlisting>
</example>
</sect1>
<sect1 id="language.function.html.checkboxes">
<title>html_checkboxes</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>checkbox</emphasis></entry>
<entry>Nom de la liste de cases à cocher</entry>
</row>
<row>
<entry>values</entry>
<entry>array</entry>
<entry>Oui, à moins que vous n'utilisiez l'attribut
option</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Un tableau de valeurs pour les cases à
cocher</entry>
</row>
<row>
<entry>output</entry>
<entry>array</entry>
<entry>Oui, à moins que vous n'utilisiez l'attribut
option</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Un tableau de sortie pour les cases à cocher</entry>
</row>
<row>
<entry>checked</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>Les éléments cochés de la liste</entry>
</row>
<row>
<entry>options</entry>
<entry>associative array</entry>
<entry>Oui, à moins que vous n'utilisiez values et
output</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Un tableau associatif de valeurs et
sorties</entry>
</row>
<row>
<entry>separator</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>chaîne de caractère pour séparer chaque case
à cocher</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
html_checkboxes est une fonction utilisateur qui crée un groupe de
cases à cocher avec les données fournies. Elle prend en compte la liste
des éléments sélectionnés par défaut. Les attributs requis sont
values et output, à moins que vous n'utilisiez options à la place.
La sortie générée est compatible XHTML.
</para>
<para>
Tous les paramètres qui ne sont pas listés ci-dessus sont affichés
en tant que paires nom/valeur dans chaque balise &lt;input&gt; crée.
</para>
<example>
<title>html_checkboxes</title>
<programlisting>
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty-&gt;assign('id_client', array(1000,1001,1002,1003));
$smarty-&gt;assign('cust_names', array('Joe Schmoe','Jack Smith','Jane
Johnson','Charlie Brown'));
$smarty-&gt;assign('client_id', 1001);
$smarty-&gt;display('index.tpl');
index.tpl:
{html_checkboxes values=$id_client checked=$client_id output=$nom_client separator="&lt;br /&gt;"}
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty-&gt;assign('cust_checkboxes', array(
1001 =&gt; 'Joe Schmoe',
1002 =&gt; 'Jack Smith',
1003 =&gt; 'Jane Johnson','Charlie Brown'));
$smarty-&gt;assign('client_id', 1001);
$smarty-&gt;display('index.tpl');
index.tpl:
{html_checkboxes name="id" options=$cust_checkboxes checked=$client_id separator="&lt;br /&gt;"}
SORTIE: (pour les deux exemples)
&lt;input type="checkbox" name="id[]" value="1000"&gt;Joe Schmoe&lt;br /&gt;
&lt;input type="checkbox" name="id[]" value="1001" checked="checked"&gt;&lt;br /&gt;
&lt;input type="checkbox" name="id[]" value="1002"&gt;Jane Johnson&lt;br /&gt;
&lt;input type="checkbox" name="id[]" value="1003"&gt;Charlie Brown&lt;br /&gt;</programlisting>
</example>
</sect1>
<sect1 id="language.function.html.image">
<title>html_image</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>chaîne de caractères</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>nom/chemin des images</entry>
</row>
<row>
<entry>border</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>0</emphasis></entry>
<entry>Bordure de l'image</entry>
</row>
<row>
<entry>height</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>Hauteur de l'image actuelle</emphasis></entry>
<entry>Hauteur de l'image à afficher</entry>
</row>
<row>
<entry>width</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>Longueur de l'image actuelle</emphasis></entry>
<entry>Longueur de l'image à afficher</entry>
</row>
<row>
<entry>basedir</entry>
<entry>chaîne de caractères</entry>
<entry>non</entry>
<entry><emphasis>racine du serveur web</emphasis></entry>
<entry>répertoire depuis lequel baser le calcul des
chemins relatifs</entry>
</row>
<row>
<entry>link</entry>
<entry>chaîne de caractères</entry>
<entry>non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>lien sur lequel l'image pointe</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
html_image est une fonction utilisateur qui génère la balise
HTML pour une image. La hauteur et la longueur de l'image sont calculés
automatiquement depuis le fichier image si aucune n'est spécifiée.
</para>
<para>
basedir est le répertoire de base depuis lequel seront calculés les
chemins relatifs. Si non spécifié, la racine du serveur web est utilisé
(variable d'environnement DOCUMENT_ROOT). Si la sécurité est activée,
l'image doit se situer dans un répertoire sécurisé.
</para>
<para>
link est la valeur href à laquelle lier l'image. Si link est défini,
une balise &lt;a href="VALEURLINK"&gt;&lt;a&gt; est placée autour de
l'image.
</para>
<note>
<title>Note technique</title>
<para>
html_image requiert un accès au disque dur pour lire l'image et
calculer ses dimensions. Si vous n'utilisez pas un cache, il
est généralement préférable d'éviter d'utiliser html_image
et de laisser les balises images statiques pour de meilleures
performances.
</para>
</note>
<example>
<title>html_image</title>
<programlisting>
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty-&gt;display('index.tpl');
index.tpl:
{image file="pumpkin.jpg"}
{image file="/path/from/docroot/pumpkin.jpg"}
{image file="../path/relative/to/currdir/pumpkin.jpg"}
SORTIE: (possible)
&lt;img src="pumpkin.jpg" border="0" width="44" height="68"&gt;
&lt;img src="/path/under/docroot/pumpkin.jpg" border="0" width="44" height="68"&gt;
&lt;img src="../path/relative/to/currdir/pumpkin.jpg" border="0" width="44" height="68"&gt;</programlisting>
</example>
</sect1>
<sect1 id="language.function.html.options">
<title>html_options</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>values</entry>
<entry>array</entry>
<entry>Oui, à moins que vous n'utilisiez
l'attribut options</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>un tableau de valeurs pour les listes
déroulantes</entry>
</row>
<row>
<entry>output</entry>
<entry>array</entry>
<entry>Oui, à moins que vous n'utilisiez
l'attribut options</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Un tableau de libellés pour la liste
déroulante</entry>
</row>
<row>
<entry>selected</entry>
<entry>chaîne de caractères/tableau</entry>
<entry>Non</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>Les éléments sélectionnés</entry>
</row>
<row>
<entry>options</entry>
<entry>Tableau associatif</entry>
<entry>Oui, à moins que vous n'utilisiez option
et values</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Un tableau associatif valeur / libellé</entry>
</row>
<row>
<entry>name</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>Nom du goupe d'options</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
html_options est une fonction utilisateur qui crée un groupe d'options
avec les données fournies. Elle prend en charge les éléments
sélectionnés par défaut. Les attributs requis sont values et output,
à moins que vous n'utilisiez options à la place.
</para>
<para>
Si la valeur donnée est un tableau, elle sera traitée comme un
OPTGROUP html, et affichée. La récursivité est supportée avec
OPTGROUP. La sortie est compatible XHTML.
</para>
<para>
Si l'attribut optionnel <emphasis>name</emphasis> est donné, les
balises &lt;select name="groupname"&gt;&lt;/select&gt; entoureront la
liste d'options.
</para>
<para>
Tous les paramètres qui ne sont pas dans la liste ci-dessus sont
affichés en tant que paires nom / valeur. Ils sont ignorés si
le paramètre optionnel <emphasis>name</emphasis> n'est pas donné.
</para>
<example>
<title>html_options</title>
<programlisting>
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty-&gt;assign('id_client', array(1000,1001,1002,1003));
$smarty-&gt;assign('nom_client', array('Joe Schmoe','Jack Smith','Jane
Johnson','Charlie Brown'));
$smarty-&gt;assign('client_id', 1001);
$smarty-&gt;display('index.tpl');
index.tpl:
&lt;select name=client_id&gt;
{html_options values=$id_client selected=$client_id output=$nom_client}
&lt;/select&gt;
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty-&gt;assign('cust_options', array(
1001 =&gt; 'Joe Schmoe',
1002 =&gt; 'Jack Smith',
1003 =&gt; 'Jane Johnson',
1004 =&gt; 'Charlie Brown'));
$smarty-&gt;assign('client_id', 1001);
$smarty-&gt;display('index.tpl');
index.tpl:
&lt;select name=client_id&gt;
{html_options options=$cust_options selected=$client_id}
&lt;/select&gt;
SORTIE: (valable pour les deux exemples)
&lt;select name=client_id&gt;
&lt;option value="1000"&gt;Joe Schmoe&lt;/option&gt;
&lt;option value="1001" selected="selected"&gt;Jack Smith&lt;/option&gt;
&lt;option value="1002"&gt;Jane Johnson&lt;/option&gt;
&lt;option value="1003"&gt;Charlie Brown&lt;/option&gt;
&lt;/select&gt;</programlisting>
</example>
</sect1>
<sect1 id="language.function.html.radios">
<title>html_radios</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>radio</emphasis></entry>
<entry>nom de la liste boutons radio</entry>
</row>
<row>
<entry>values</entry>
<entry>tableau</entry>
<entry>Oui, à moins que vous n'utilisiez l'attribut
options</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le tableau des valeurs des boutons radio</entry>
</row>
<row>
<entry>output</entry>
<entry>tableau</entry>
<entry>Oui, à moins que vous n'utilisiez l'attribut
options</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Un tableau de libellés pour les boutons radio</entry>
</row>
<row>
<entry>checked</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>Les boutons radios sélectionnés</entry>
</row>
<row>
<entry>options</entry>
<entry>tableau associatif</entry>
<entry>Oui, à moins que vous n'utilisiez values
et outputs</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>un tableau associatif valeurs / libellés</entry>
</row>
<row>
<entry>separator</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>chaîne de séparation à placer entre les
boutons radio</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
html_radio est une fonction utilisateur qui crée des boutons radio
html à partir des données fournies. Elle prend en charge les éléments
sélectionnés par défaut. Les attributs requis sont values et output,
à moins que vous n'utilisiez options à la place. La sortie générée est
compatible XHTML.
</para>
<para>
Tous les paramètres qui ne sont pas dans la liste ci dessus sont
affichés en tant que paires nom / valeur dans chaque balise &lt;input&gt;
créée.
</para>
<example>
<title>html_radios</title>
<programlisting>
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty-&gt;assign('id_client', array(1000,1001,1002,1003));
$smarty-&gt;assign('nom_client', array('Joe Schmoe','Jack Smith','Jane
Johnson','Charlie Brown'));
$smarty-&gt;assign('client_id', 1001);
$smarty-&gt;display('index.tpl');
index.tpl:
{html_radios values=$id_client checked=$client_id output=$nom_client separator="&lt;br /&gt;"}
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty-&gt;assign('cust_radios', array(
1001 =&gt; 'Joe Schmoe',
1002 =&gt; 'Jack Smith',
1003 =&gt; 'Jane Johnson',
1004 =&gt; 'Charlie Brown'));
$smarty-&gt;assign('client_id', 1001);
$smarty-&gt;display('index.tpl');
index.tpl:
{html_radios name="id" options=$cust_radios checked=$client_id separator="&lt;br /&gt;"}
SORTIE: (both examples)
&lt;input type="radio" name="id[]" value="1000"&gt;Joe Schmoe&lt;br /&gt;
&lt;input type="radio" name="id[]" value="1001" checked="checked"&gt;&lt;br /&gt;
&lt;input type="radio" name="id[]" value="1002"&gt;Jane Johnson&lt;br /&gt;
&lt;input type="radio" name="id[]" value="1003"&gt;Charlie Brown&lt;br /&gt;</programlisting>
</example>
</sect1>
<sect1 id="language.function.html.select.date">
<title>html_select_date</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>prefix</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>Date_</entry>
<entry>Avec quoi préfixer le nom de variable</entry>
</row>
<row>
<entry>time</entry>
<entry>timestamp/YYYY-MM-DD</entry>
<entry>Non</entry>
<entry>la date courante au format unix YYYY-MM-DD
format</entry>
<entry>la date / heure à utiliser</entry>
</row>
<row>
<entry>start_year</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>current year</entry>
<entry>La première année dans la liste déroulante, soit
le numéro de l'année, soit un nombre relatif à l'année
courante (+/- N).</entry>
</row>
<row>
<entry>end_year</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>même chose que start_year</entry>
<entry>La dernière année dans la liste déroulante, soit
le numéro de l'année, soit un nombre relatif à l'année
courante (+/- N).</entry>
</row>
<row>
<entry>display_days</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry>true</entry>
<entry>Si l'on souhaite afficher les jours ou pas.</entry>
</row>
<row>
<entry>display_months</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry>true</entry>
<entry>Si l'on souhaite afficher les mois ou pas.</entry>
</row>
<row>
<entry>display_years</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry>true</entry>
<entry>Si l'on souhaite afficher les années ou pas.</entry>
</row>
<row>
<entry>month_format</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>%B</entry>
<entry>le format du mois (strftime)</entry>
</row>
<row>
<entry>day_format</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>%02d</entry>
<entry>Le format du jour (sprintf)</entry>
</row>
<row>
<entry>day_value_format</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>%d</entry>
<entry>le format de la valeur du jour (sprintf)</entry>
</row>
<row>
<entry>year_as_text</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry>false</entry>
<entry>S'il faut afficher l'année au format texte</entry>
</row>
<row>
<entry>reverse_years</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry>false</entry>
<entry>Affiche les années dans l'ordre inverse</entry>
</row>
<row>
<entry>field_array</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>null</entry>
<entry>
Si un nom est donné, la liste déroulante sera affichée
de telle façon que les résultats seront retournés à PHP
sous la forme nom[Day] (jour), nom[Year] (année),
nom[Month] (Mois).
</entry>
</row>
<row>
<entry>day_size</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>null</entry>
<entry>Ajoute un attribut size à la liste
déroulante des jours.</entry>
</row>
<row>
<entry>month_size</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>null</entry>
<entry>Ajoute un attribut size à la liste
déroulante des mois.</entry>
</row>
<row>
<entry>year_size</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>null</entry>
<entry>Ajoute un attribut size à la liste
déroulante des années.</entry>
</row>
<row>
<entry>all_extra</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>null</entry>
<entry>Ajoute des attributs supplémentaires à
toutes les balises select/input.</entry>
</row>
<row>
<entry>day_extra</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>null</entry>
<entry>Ajoute des attributs supplémentaires aux balises
select/input du jour.</entry>
</row>
<row>
<entry>month_extra</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>null</entry>
<entry>Ajoute des attributs supplémentaires aux balises
select/input du mois.</entry>
</row>
<row>
<entry>year_extra</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>null</entry>
<entry>Ajoute des attributs supplémentaires aux balises
select/input de l'année.</entry>
</row>
<row>
<entry>field_order</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>MDY</entry>
<entry>L'ordre dans lequel afficher les
listes déroulantes.</entry>
</row>
<row>
<entry>field_separator</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>\n</entry>
<entry>la chaîne de caractères affichée entre les
différents champs.</entry>
</row>
<row>
<entry>month_value_format</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>%m</entry>
<entry>Le format strftime de la valeur des mois, par défaut %m
pour les numéros.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
html_select_date est une fonction utilisateur qui crée des listes
déroulantes pour saisir la date. Elle peut afficher n'importe quel
jour, mois et année.
</para>
<example>
<title>html_select_date</title>
<programlisting>
{html_select_date}
SORTIE:
&lt;select name="Date_Month"&gt;
&lt;option value="1"&gt;January&lt;/option&gt;
&lt;option value="2"&gt;February&lt;/option&gt;
&lt;option value="3"&gt;March&lt;/option&gt;
&lt;option value="4"&gt;April&lt;/option&gt;
&lt;option value="5"&gt;May&lt;/option&gt;
&lt;option value="6"&gt;June&lt;/option&gt;
&lt;option value="7"&gt;July&lt;/option&gt;
&lt;option value="8"&gt;August&lt;/option&gt;
&lt;option value="9"&gt;September&lt;/option&gt;
&lt;option value="10"&gt;October&lt;/option&gt;
&lt;option value="11"&gt;November&lt;/option&gt;
&lt;option value="12" selected&gt;December&lt;/option&gt;
&lt;/select&gt;
&lt;select name="Date_Day"&gt;
&lt;option value="1"&gt;01&lt;/option&gt;
&lt;option value="2"&gt;02&lt;/option&gt;
&lt;option value="3"&gt;03&lt;/option&gt;
&lt;option value="4"&gt;04&lt;/option&gt;
&lt;option value="5"&gt;05&lt;/option&gt;
&lt;option value="6"&gt;06&lt;/option&gt;
&lt;option value="7"&gt;07&lt;/option&gt;
&lt;option value="8"&gt;08&lt;/option&gt;
&lt;option value="9"&gt;09&lt;/option&gt;
&lt;option value="10"&gt;10&lt;/option&gt;
&lt;option value="11"&gt;11&lt;/option&gt;
&lt;option value="12"&gt;12&lt;/option&gt;
&lt;option value="13" selected&gt;13&lt;/option&gt;
&lt;option value="14"&gt;14&lt;/option&gt;
&lt;option value="15"&gt;15&lt;/option&gt;
&lt;option value="16"&gt;16&lt;/option&gt;
&lt;option value="17"&gt;17&lt;/option&gt;
&lt;option value="18"&gt;18&lt;/option&gt;
&lt;option value="19"&gt;19&lt;/option&gt;
&lt;option value="20"&gt;20&lt;/option&gt;
&lt;option value="21"&gt;21&lt;/option&gt;
&lt;option value="22"&gt;22&lt;/option&gt;
&lt;option value="23"&gt;23&lt;/option&gt;
&lt;option value="24"&gt;24&lt;/option&gt;
&lt;option value="25"&gt;25&lt;/option&gt;
&lt;option value="26"&gt;26&lt;/option&gt;
&lt;option value="27"&gt;27&lt;/option&gt;
&lt;option value="28"&gt;28&lt;/option&gt;
&lt;option value="29"&gt;29&lt;/option&gt;
&lt;option value="30"&gt;30&lt;/option&gt;
&lt;option value="31"&gt;31&lt;/option&gt;
&lt;/select&gt;
&lt;select name="Date_Year"&gt;
&lt;option value="2001" selected&gt;2001&lt;/option&gt;
&lt;/select&gt;</programlisting>
</example>
<example>
<title>html_select_date</title>
<programlisting>
{* le démarage et la fin de l'année peuvent être relatif à l'année courante *}
{html_select_date prefix="StartDate" time=$time start_year="-5" end_year="+1" display_days=false}
SORTIE: (current year is 2000)
&lt;select name="StartDateMonth"&gt;
&lt;option value="1"&gt;January&lt;/option&gt;
&lt;option value="2"&gt;February&lt;/option&gt;
&lt;option value="3"&gt;March&lt;/option&gt;
&lt;option value="4"&gt;April&lt;/option&gt;
&lt;option value="5"&gt;May&lt;/option&gt;
&lt;option value="6"&gt;June&lt;/option&gt;
&lt;option value="7"&gt;July&lt;/option&gt;
&lt;option value="8"&gt;August&lt;/option&gt;
&lt;option value="9"&gt;September&lt;/option&gt;
&lt;option value="10"&gt;October&lt;/option&gt;
&lt;option value="11"&gt;November&lt;/option&gt;
&lt;option value="12" selected&gt;December&lt;/option&gt;
&lt;/select&gt;
&lt;select name="StartDateYear"&gt;
&lt;option value="1999"&gt;1995&lt;/option&gt;
&lt;option value="1999"&gt;1996&lt;/option&gt;
&lt;option value="1999"&gt;1997&lt;/option&gt;
&lt;option value="1999"&gt;1998&lt;/option&gt;
&lt;option value="1999"&gt;1999&lt;/option&gt;
&lt;option value="2000" selected&gt;2000&lt;/option&gt;
&lt;option value="2001"&gt;2001&lt;/option&gt;
&lt;/select&gt;</programlisting>
</example>
</sect1>
<sect1 id="language.function.html.select.time">
<title>html_select_time</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>prefix</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>Time_</entry>
<entry>Par quoi préfixer la variable.</entry>
</row>
<row>
<entry>time</entry>
<entry>timestamp</entry>
<entry>Non</entry>
<entry>current time</entry>
<entry>Quel jour / heure utiliser.</entry>
</row>
<row>
<entry>display_hours</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry>true</entry>
<entry>S'il faut afficher l'heure.</entry>
</row>
<row>
<entry>display_minutes</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry>true</entry>
<entry>S'il faut afficher les minutes.</entry>
</row>
<row>
<entry>display_seconds</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry>true</entry>
<entry>S'il faut afficher les secondes.</entry>
</row>
<row>
<entry>display_meridian</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry>true</entry>
<entry>S'il faut afficher le méridian (am/pm)</entry>
</row>
<row>
<entry>use_24_hours</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry>true</entry>
<entry>S'il faut utiliser l'horloge 24 heure.</entry>
</row>
<row>
<entry>minute_interval</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry>1</entry>
<entry>Intervalle des minutes dans la liste
déroulante</entry>
</row>
<row>
<entry>second_interval</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry>1</entry>
<entry>Intervalle des secondes dans la liste
déroulante</entry>
</row>
<row>
<entry>field_array</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>n/a</entry>
<entry>Nom du tableau dans lequel les valeures
seront stockées.</entry>
</row>
<row>
<entry>all_extra</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>null</entry>
<entry>Ajoute des attributs supplémentaires aux balises
select / input.</entry>
</row>
<row>
<entry>hour_extra</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>null</entry>
<entry>Ajoute des attributs supplémentaires aux balises
select / input de l'heure.</entry>
</row>
<row>
<entry>minute_extra</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>null</entry>
<entry>Ajoute des attributs supplémentaires aux balises
select / input des minutes.</entry>
</row>
<row>
<entry>second_extra</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>null</entry>
<entry>Ajoute des attributs supplémentaires aux balises
select / input des secondes.</entry>
</row>
<row>
<entry>meridian_extra</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry>null</entry>
<entry>Ajoute des attributs supplémentaires aux balises
select / input du méridian.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
html_select_time est une fonction utilisateur qui crée des listes
déroulantes pour saisir une heure. Elle prends en charge l'heure,
les minutes, les secondes et le méridian.
</para>
<example>
<title>html_select_time</title>
<programlisting>
{html_select_time use_24_hours=true}
SORTIE:
&lt;select name="Time_Hour"&gt;
&lt;option value="00"&gt;00&lt;/option&gt;
&lt;option value="01"&gt;01&lt;/option&gt;
&lt;option value="02"&gt;02&lt;/option&gt;
&lt;option value="03"&gt;03&lt;/option&gt;
&lt;option value="04"&gt;04&lt;/option&gt;
&lt;option value="05"&gt;05&lt;/option&gt;
&lt;option value="06"&gt;06&lt;/option&gt;
&lt;option value="07"&gt;07&lt;/option&gt;
&lt;option value="08"&gt;08&lt;/option&gt;
&lt;option value="09" selected&gt;09&lt;/option&gt;
&lt;option value="10"&gt;10&lt;/option&gt;
&lt;option value="11"&gt;11&lt;/option&gt;
&lt;option value="12"&gt;12&lt;/option&gt;
&lt;option value="13"&gt;13&lt;/option&gt;
&lt;option value="14"&gt;14&lt;/option&gt;
&lt;option value="15"&gt;15&lt;/option&gt;
&lt;option value="16"&gt;16&lt;/option&gt;
&lt;option value="17"&gt;17&lt;/option&gt;
&lt;option value="18"&gt;18&lt;/option&gt;
&lt;option value="19"&gt;19&lt;/option&gt;
&lt;option value="20"&gt;20&lt;/option&gt;
&lt;option value="21"&gt;21&lt;/option&gt;
&lt;option value="22"&gt;22&lt;/option&gt;
&lt;option value="23"&gt;23&lt;/option&gt;
&lt;/select&gt;
&lt;select name="Time_Minute"&gt;
&lt;option value="00"&gt;00&lt;/option&gt;
&lt;option value="01"&gt;01&lt;/option&gt;
&lt;option value="02"&gt;02&lt;/option&gt;
&lt;option value="03"&gt;03&lt;/option&gt;
&lt;option value="04"&gt;04&lt;/option&gt;
&lt;option value="05"&gt;05&lt;/option&gt;
&lt;option value="06"&gt;06&lt;/option&gt;
&lt;option value="07"&gt;07&lt;/option&gt;
&lt;option value="08"&gt;08&lt;/option&gt;
&lt;option value="09"&gt;09&lt;/option&gt;
&lt;option value="10"&gt;10&lt;/option&gt;
&lt;option value="11"&gt;11&lt;/option&gt;
&lt;option value="12"&gt;12&lt;/option&gt;
&lt;option value="13"&gt;13&lt;/option&gt;
&lt;option value="14"&gt;14&lt;/option&gt;
&lt;option value="15"&gt;15&lt;/option&gt;
&lt;option value="16"&gt;16&lt;/option&gt;
&lt;option value="17"&gt;17&lt;/option&gt;
&lt;option value="18"&gt;18&lt;/option&gt;
&lt;option value="19"&gt;19&lt;/option&gt;
&lt;option value="20" selected&gt;20&lt;/option&gt;
&lt;option value="21"&gt;21&lt;/option&gt;
&lt;option value="22"&gt;22&lt;/option&gt;
&lt;option value="23"&gt;23&lt;/option&gt;
&lt;option value="24"&gt;24&lt;/option&gt;
&lt;option value="25"&gt;25&lt;/option&gt;
&lt;option value="26"&gt;26&lt;/option&gt;
&lt;option value="27"&gt;27&lt;/option&gt;
&lt;option value="28"&gt;28&lt;/option&gt;
&lt;option value="29"&gt;29&lt;/option&gt;
&lt;option value="30"&gt;30&lt;/option&gt;
&lt;option value="31"&gt;31&lt;/option&gt;
&lt;option value="32"&gt;32&lt;/option&gt;
&lt;option value="33"&gt;33&lt;/option&gt;
&lt;option value="34"&gt;34&lt;/option&gt;
&lt;option value="35"&gt;35&lt;/option&gt;
&lt;option value="36"&gt;36&lt;/option&gt;
&lt;option value="37"&gt;37&lt;/option&gt;
&lt;option value="38"&gt;38&lt;/option&gt;
&lt;option value="39"&gt;39&lt;/option&gt;
&lt;option value="40"&gt;40&lt;/option&gt;
&lt;option value="41"&gt;41&lt;/option&gt;
&lt;option value="42"&gt;42&lt;/option&gt;
&lt;option value="43"&gt;43&lt;/option&gt;
&lt;option value="44"&gt;44&lt;/option&gt;
&lt;option value="45"&gt;45&lt;/option&gt;
&lt;option value="46"&gt;46&lt;/option&gt;
&lt;option value="47"&gt;47&lt;/option&gt;
&lt;option value="48"&gt;48&lt;/option&gt;
&lt;option value="49"&gt;49&lt;/option&gt;
&lt;option value="50"&gt;50&lt;/option&gt;
&lt;option value="51"&gt;51&lt;/option&gt;
&lt;option value="52"&gt;52&lt;/option&gt;
&lt;option value="53"&gt;53&lt;/option&gt;
&lt;option value="54"&gt;54&lt;/option&gt;
&lt;option value="55"&gt;55&lt;/option&gt;
&lt;option value="56"&gt;56&lt;/option&gt;
&lt;option value="57"&gt;57&lt;/option&gt;
&lt;option value="58"&gt;58&lt;/option&gt;
&lt;option value="59"&gt;59&lt;/option&gt;
&lt;/select&gt;
&lt;select name="Time_Second"&gt;
&lt;option value="00"&gt;00&lt;/option&gt;
&lt;option value="01"&gt;01&lt;/option&gt;
&lt;option value="02"&gt;02&lt;/option&gt;
&lt;option value="03"&gt;03&lt;/option&gt;
&lt;option value="04"&gt;04&lt;/option&gt;
&lt;option value="05"&gt;05&lt;/option&gt;
&lt;option value="06"&gt;06&lt;/option&gt;
&lt;option value="07"&gt;07&lt;/option&gt;
&lt;option value="08"&gt;08&lt;/option&gt;
&lt;option value="09"&gt;09&lt;/option&gt;
&lt;option value="10"&gt;10&lt;/option&gt;
&lt;option value="11"&gt;11&lt;/option&gt;
&lt;option value="12"&gt;12&lt;/option&gt;
&lt;option value="13"&gt;13&lt;/option&gt;
&lt;option value="14"&gt;14&lt;/option&gt;
&lt;option value="15"&gt;15&lt;/option&gt;
&lt;option value="16"&gt;16&lt;/option&gt;
&lt;option value="17"&gt;17&lt;/option&gt;
&lt;option value="18"&gt;18&lt;/option&gt;
&lt;option value="19"&gt;19&lt;/option&gt;
&lt;option value="20"&gt;20&lt;/option&gt;
&lt;option value="21"&gt;21&lt;/option&gt;
&lt;option value="22"&gt;22&lt;/option&gt;
&lt;option value="23" selected&gt;23&lt;/option&gt;
&lt;option value="24"&gt;24&lt;/option&gt;
&lt;option value="25"&gt;25&lt;/option&gt;
&lt;option value="26"&gt;26&lt;/option&gt;
&lt;option value="27"&gt;27&lt;/option&gt;
&lt;option value="28"&gt;28&lt;/option&gt;
&lt;option value="29"&gt;29&lt;/option&gt;
&lt;option value="30"&gt;30&lt;/option&gt;
&lt;option value="31"&gt;31&lt;/option&gt;
&lt;option value="32"&gt;32&lt;/option&gt;
&lt;option value="33"&gt;33&lt;/option&gt;
&lt;option value="34"&gt;34&lt;/option&gt;
&lt;option value="35"&gt;35&lt;/option&gt;
&lt;option value="36"&gt;36&lt;/option&gt;
&lt;option value="37"&gt;37&lt;/option&gt;
&lt;option value="38"&gt;38&lt;/option&gt;
&lt;option value="39"&gt;39&lt;/option&gt;
&lt;option value="40"&gt;40&lt;/option&gt;
&lt;option value="41"&gt;41&lt;/option&gt;
&lt;option value="42"&gt;42&lt;/option&gt;
&lt;option value="43"&gt;43&lt;/option&gt;
&lt;option value="44"&gt;44&lt;/option&gt;
&lt;option value="45"&gt;45&lt;/option&gt;
&lt;option value="46"&gt;46&lt;/option&gt;
&lt;option value="47"&gt;47&lt;/option&gt;
&lt;option value="48"&gt;48&lt;/option&gt;
&lt;option value="49"&gt;49&lt;/option&gt;
&lt;option value="50"&gt;50&lt;/option&gt;
&lt;option value="51"&gt;51&lt;/option&gt;
&lt;option value="52"&gt;52&lt;/option&gt;
&lt;option value="53"&gt;53&lt;/option&gt;
&lt;option value="54"&gt;54&lt;/option&gt;
&lt;option value="55"&gt;55&lt;/option&gt;
&lt;option value="56"&gt;56&lt;/option&gt;
&lt;option value="57"&gt;57&lt;/option&gt;
&lt;option value="58"&gt;58&lt;/option&gt;
&lt;option value="59"&gt;59&lt;/option&gt;
&lt;/select&gt;
&lt;select name="Time_Meridian"&gt;
&lt;option value="am" selected&gt;AM&lt;/option&gt;
&lt;option value="pm"&gt;PM&lt;/option&gt;
&lt;/select&gt;</programlisting>
</example>
</sect1>
<sect1 id="language.function.html.table">
<title>html_table</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>loop</entry>
<entry>array</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Tableau de données à parcourir</entry>
</row>
<row>
<entry>cols</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry><emphasis>3</emphasis></entry>
<entry>Nombre de colonnes du tableau</entry>
</row>
<row>
<entry>table_attr</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>border="1"</emphasis></entry>
<entry>attributs pour la balise table</entry>
</row>
<row>
<entry>tr_attr</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>attributs pour les balises tr (les tableaux sont
parcourus)</entry>
</row>
<row>
<entry>td_attr</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>attributs pour les balises td (les tableaux sont
parcourus)</entry>
</row>
<row>
<entry>trailpad</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>&amp;nbsp;</emphasis></entry>
<entry>valeur avec laquelle remplir les cellules
restantes de la dernière ligne (si il y en a)</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
<emphasis>html_table</emphasis> est une fonction utilisateur
qui transforme un tableau de données dans un tabeau HTML. L'attribut
<emphasis>cols</emphasis> détermine le nombre de colonne du tableau.
Les attributs <emphasis>table_attr</emphasis>, <emphasis>tr_attr</emphasis>
et <emphasis>td_attr</emphasis> déterminent les attributs donnés aux
balises table, tr et td. Si <emphasis>tr_attr</emphasis> ou
<emphasis>td_attr</emphasis> sont des tableaux, ils seront parcourus.
<emphasis>trailpad</emphasis> est la valeur avec laquelle remplir
les cellules restantes de la dernière ligne, s'il y en a une.
</para>
<example>
<title>html_table</title>
<programlisting>
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty-&gt;assign('data',array(1,2,3,4,5,6,7,8,9));
$smarty-&gt;assign('tr',array('bgcolor="#eeeeee"','bgcolor="#dddddd"'));
$smarty-&gt;display('index.tpl');
index.tpl:
{html_table loop=$data}
{html_table loop=$data cols=4 table_attr='border="0"'}
{html_table loop=$data cols=4 tr_attr=$tr}
SORTIE:
&lt;table border="1"&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;table border="0"&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;table border="1"&gt;
&lt;tr bgcolor="#eeeeee"&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor="#dddddd"&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor="#eeeeee"&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</programlisting>
</example>
</sect1>
<sect1 id="language.function.math">
<title>math</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>equation</entry>
<entry>chaîne de caractères</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>L'opération à éxécuter</entry>
</row>
<row>
<entry>format</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le format du résultat (sprintf)</entry>
</row>
<row>
<entry>var</entry>
<entry>numeric</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Les variables de l'opération</entry>
</row>
<row>
<entry>assign</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Variable de template dans laquelle la sortie
sera assignée</entry>
</row>
<row>
<entry>[var ...]</entry>
<entry>numeric</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Valeurs des variables de l'opération</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
math autorise les designers de templates à effectuer des opérations
dans le template. Toute valeur numérique peut être utilisée dans une
opération, et le résultat sera affiché à la place des balises
"equation". Les variables utilisées dans l'opération sont passées en
tant que paramètre, et peuvent être des variables de templates ou des
valeurs statiques. +, -, /, *, abs, ceil, cos,
exp, floor, log, log10, max, min, pi, pow, rand, round, sin, sqrt,
srans et tan sont tous des opérateurs valides. Voir la
documentation PHP pour plus d'informations sur ces fonctions
mathématiques.
</para>
<para>
Si vous spécifiez l'attribut assign, la sortie sera assignée à la variable
donnée plutôt que d'être directement affichée.
</para>
<note>
<title>Note technique</title>
<para>
math est une fonction coûteuse en terme de performances, du fait
qu'elle utilise la fonction PHP eval (). Effectuer les calculs
dans votre code PHP est beaucoup plus efficient, donc, chaque fois
que possible, effectuez vos calculs directement dans PHP et assignez
le résultat au template. Evitez coût que coût les appels
répétitifs à la fonction math, comme on pourait le faire une
une boucle section.
</para>
</note>
<example>
<title>math</title>
<programlisting>
{* $height=4, $width=5 *}
{math equation="x + y" x=$height y=$width}
SORTIE:
9
{* $row_height = 10, $row_width = 20, #col_div# = 2, assigned in template *}
{math equation="height * width / division"
height=$row_height
width=$row_width
division=#col_div#}
SORTIE:
100
{* vous pouvez utiliser des parenthèses *}
{math equation="(( x + y ) / z )" x=2 y=10 z=2}
SORTIE:
6
{* vous pouvez définir un format sprintf pour l'affichage *}
{math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}
SORTIE:
9.44</programlisting>
</example>
</sect1>
<sect1 id="language.function.mailto">
<title>mailto</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>address</entry>
<entry>chaîne de caractères</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>l'adresse email</entry>
</row>
<row>
<entry>text</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>le texte à afficher, par défaut l'adresse email</entry>
</row>
<row>
<entry>encode</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>none</emphasis></entry>
<entry>Comment encoder l'adresse email.
none, hex et javascript sont des valeurs correctes.</entry>
</row>
<row>
<entry>cc</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Les adresses email en copie (Cc).
Séparez les entrées par une virgule.</entry>
</row>
<row>
<entry>bcc</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Les adresses email en copie cachées (Bcc).
Séparez les entrées par une virgule.</entry>
</row>
<row>
<entry>subject</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Sujet de l'email.</entry>
</row>
<row>
<entry>newsgroups</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>newsgroup ou poster le message.
Séparez les entrées par une virgule.</entry>
</row>
<row>
<entry>followupto</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Adresses ou transmettre le message.
Séparez les entrées par une virgule.
</entry>
</row>
<row>
<entry>extra</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Toute information que vous souhaitez passer au lien,
comme par exemple une classe css.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
mailto crée un lien mailto automatiquement encodé (optionnel).
L'encodage rend la tâche de récupération des e-mails sur votre
site plus difficiles aux "web spiders".
</para>
<note>
<title>Note technique</title>
<para>
javascript n'est certainement pas la forme d'encodage la plus robuste.
Vous pouvez également utiliser un encodage hexadécimal.
</para>
</note>
<example>
<title>mailto</title>
<programlisting>
{mailto address="me@domain.com"}
{mailto address="moi@domaine.com" text="send me some mail"}
{mailto address="moi@domaine.com" encode="javascript"}
{mailto address="moi@domaine.com" encode="hex"}
{mailto address="moi@domaine.com" subject="Hello to you!"}
{mailto address="moi@domaine.com" cc="you@domain.com,they@domain.com"}
{mailto address="moi@domaine.com" extra='class="email"'}
SORTIE:
&lt;a href="mailto:moi@domaine.com" &gt;moi@domaine.com&lt;/a&gt;
&lt;a href="mailto:moi@domaine.com" &gt;send me some mail&lt;/a&gt;
&lt;SCRIPT language="javascript"&gt;eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%6
9%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%
61%69%6e%2e%63%6f%6d%22%20%3e%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%3c%2f%61%3e
%27%29%3b'))&lt;/SCRIPT&gt;
&lt;a href="mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d" &gt;&amp;#x6d;&amp;#x65;&amp;#x40;&amp;#x64;&amp;
#x6f;&amp;#x6d;&amp;#x61;&amp;#x69;&amp;#x6e;&amp;#x2e;&amp;#x63;&amp;#x6f;&amp;#x6d;&lt;/a&gt;
&lt;a href="mailto:moi@domaine.com?subject=Hello%20to%20you%21" &gt;moi@domaine.com&lt;/a&gt;
&lt;a href="mailto:moi@domaine.com?cc=you@domain.com%2Cthey@domain.com" &gt;moi@domaine.com&lt;/a&gt;
&lt;a href="mailto:moi@domaine.com" class="email"&gt;moi@domaine.com&lt;/a&gt;</programlisting>
</example>
</sect1>
<sect1 id="language.function.popup.init">
<title>popup_init</title>
<para>
popup est une intégration de overLib, une librairie capable de réaliser
des fenêtres surgissantes. (nous parlerons de "popup").
Ce type de fenêtre est utilisé pour apporter des informations
contextuelles, comme des infobulles d'aides ou astuces.
popup_init doit être appelé une fois, en début de page si vous comptez
utiliser la fonction <link linkend="language.function.popup">popup</link>.
overLib à été écrit par Erik Bosrup. Le site d'overlib est situé à
l'adresse http://www.bosrup.com/web/overlib/.
</para>
<para>
Comme dans Smarty 2.1.2, overLib n'est PAS fournie dans la distribution.
Téléchargez overLib, déposez overlib.js dans votre arborescence web et
indiquez le chemin relatif à ce fichier dans l'attribut src de
popup_init.
</para>
<example>
<title>popup_init</title>
<programlisting>
{* popup_init doit être appelé une fois en début de page. *}
{popup_init src="/javascripts/overlib.js"}</programlisting>
</example>
</sect1>
<sect1 id="language.function.popup">
<title>popup</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>text</entry>
<entry>chaîne de caractères</entry>
<entry>Oui</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>le texte/code html à afficher dans la popup</entry>
</row>
<row>
<entry>trigger</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>onMouseOver</emphasis></entry>
<entry>L'évènement utilisé pour rendre la popup active,
onMouseOver ou onClick.</entry>
</row>
<row>
<entry>sticky</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry><emphasis>false</emphasis></entry>
<entry>Rends la popup active jusqu'a ce qu'elle soit
explicitement fermée.</entry>
</row>
<row>
<entry>caption</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Défini le libellé du titre</entry>
</row>
<row>
<entry>fgcolor</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>couleur interne de la popup</entry>
</row>
<row>
<entry>bgcolor</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>couleur de la bordure de la popup</entry>
</row>
<row>
<entry>textcolor</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>couleur du texte à l'intérieur de la
popup</entry>
</row>
<row>
<entry>capcolor</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>couleur du libellé de la popup</entry>
</row>
<row>
<entry>closecolor</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>couleur du texte de fermeture</entry>
</row>
<row>
<entry>textfont</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>la police à utiliser dans le texte principal</entry>
</row>
<row>
<entry>captionfont</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>la police à utiliser dans le libellé</entry>
</row>
<row>
<entry>closefont</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>la police pour le texte de fermeture</entry>
</row>
<row>
<entry>textsize</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>taille de la police texte prinicpal</entry>
</row>
<row>
<entry>captionsize</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>taille de la police du libellé</entry>
</row>
<row>
<entry>closesize</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>taille de la police du bouton "fermer"</entry>
</row>
<row>
<entry>width</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Longeur de la popup</entry>
</row>
<row>
<entry>height</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Hauteur de la popup</entry>
</row>
<row>
<entry>left</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry><emphasis>false</emphasis></entry>
<entry>la popup va à gauche de la souris</entry>
</row>
<row>
<entry>right</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry><emphasis>false</emphasis></entry>
<entry>la popup va à droite de la souris</entry>
</row>
<row>
<entry>center</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry><emphasis>false</emphasis></entry>
<entry>la popup est centrée par rapport à la
position de la souris</entry>
</row>
<row>
<entry>above</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry><emphasis>false</emphasis></entry>
<entry>la popup est au dessus de la souris. NOTE:
possible uniquement si la hauteur est définie</entry>
</row>
<row>
<entry>below</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry><emphasis>false</emphasis></entry>
<entry>la popup apparait en dessous de la souris</entry>
</row>
<row>
<entry>border</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>rends la bordure de la popup plus épaisse ou plus
fine</entry>
</row>
<row>
<entry>offsetx</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>A quelle distance du curseur la popup apparaitra
, horizontalement.</entry>
</row>
<row>
<entry>offsety</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>A quelle distance du curseur la popup apparaitra
, verticalement.</entry>
</row>
<row>
<entry>fgbackground</entry>
<entry>url to image</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Une image à utiliser à la place de la couleur de
fonds dans la popup</entry>
</row>
<row>
<entry>bgbackground</entry>
<entry>url to image</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Image à utiliser à la place de la bordure de la
popup. NOTE: vous veillerez à définir bgcolor à "" ou la
couleur apparaitra de même. NOTE: Lorsque vous avez un
lien de fermeture, Netscape effectuera un nouveau rendu
des cellules du tableau, affichant mal les éléments</entry>
</row>
<row>
<entry>closetext</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>définit le texte de fermeture par autre chose
que "Close"</entry>
</row>
<row>
<entry>noclose</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>N'affiche pas le bouton "Close" pour les fenêtres
"collantes".
</entry>
</row>
<row>
<entry>status</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>défini le texte de la barre de statut
du navigateur</entry>
</row>
<row>
<entry>autostatus</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Défini le texte de la barre de statut au contenu
de la popup. NOTE: Ecrase l'attribut status.</entry>
</row>
<row>
<entry>autostatuscap</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Défini le texte de la barre de statut au libellé
de la popup. NOTE: Ecrase l'attribut status.</entry>
</row>
<row>
<entry>inarray</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>indique à overLib de lire le texte à cet index dans le
tableau ol_text, situé dans overlib.js. Ce paramètre peut être
utilisé à la place de text.</entry>
</row>
<row>
<entry>caparray</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>indique à overlib de lire le libellé depuis le
tableau ol_caps</entry>
</row>
<row>
<entry>capicon</entry>
<entry>url</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>affiche l'image spécifiée avant le libellé de la
popup</entry>
</row>
<row>
<entry>snapx</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Aligne la popup sur une grille horizontale</entry>
</row>
<row>
<entry>snapy</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Aligne la popup sur une grille verticale</entry>
</row>
<row>
<entry>fixx</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>vérrouille la popup à une position horizontale.
Note: remplace les autres paramètres de position
horizontale</entry>
</row>
<row>
<entry>fixy</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>vérouille la popup à une position verticale
Note: remplace les autres paramètres de position
verticale</entry>
</row>
<row>
<entry>background</entry>
<entry>url</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>défini l'image à utiliser plutôt que le tableau
de fond</entry>
</row>
<row>
<entry>padx</entry>
<entry>integer,integer</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>écarte l'image de fond du reste des éléments
avec un espace horizontal, pour le positionnement du texte.
Note: c'est un attribut à deux paramètres.</entry>
</row>
<row>
<entry>pady</entry>
<entry>integer,integer</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>écarte l'image de fond du reste des éléments
avec un espace vertical, pour le positionnement du texte.
Note: c'est un attribut à deux paramètres.</entry>
</row>
<row>
<entry>fullhtml</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>vous autorise à placer du code html en tant que
contenu de la popup. Le code html est attendu dans
l'attribut text.</entry>
</row>
<row>
<entry>frame</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>contrôle la popup dans un cadre différent.
Voir la documentation d'overlib pour plus de détails
sur cette fonction.</entry>
</row>
<row>
<entry>timeout</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Appelle la fonction javascript spécifiée et prends
sa valeur de retour comme texte devant être affiché
dans la popup.</entry>
</row>
<row>
<entry>delay</entry>
<entry>integer</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>la popup se comporte comme une infobulle.
Elle disparaitra au bout d'un certain délai, en
millisecondes.</entry>
</row>
<row>
<entry>hauto</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Détermine automatiquement si la popup doit être
à gauche ou à droite de la souris</entry>
</row>
<row>
<entry>vauto</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Détermine automatiquement si la popup doit être
au-dessus ou au-dessous de la souris</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
popup est utilisé pour créer une fenêtre popup javascript.
</para>
<example>
<title>popup</title>
<programlisting>
{* popup_init doit être appelé en haut de votre page *}
{popup_init src="/javascripts/overlib.js"}
{* création d'un lien avec une popup qui apparait sur l'évènement onMouseOver *}
&lt;A href="mypage.html" {popup text="Ce lien vous amène sur ma page!"}&gt;mypage&lt;/A&gt;
{* vous pouvez utiliser du html, des liens, etc dans vos popup *}
&lt;A href="mypage.html" {popup sticky=true caption="mypage contents"
text="&lt;UL&gt;&lt;LI&gt;links&lt;LI&gt;pages&lt;LI&gt;images&lt;/UL&gt;" snapx=10 snapy=10}&gt;mypage&lt;/A&gt;
SORTIE:
(allez sur le site officiel de Smarty pour des exemples.)</programlisting>
</example>
</sect1>
<sect1 id="language.function.textformat">
<title>textformat</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Nom attribut</entry>
<entry>Type</entry>
<entry>Requis</entry>
<entry>Defaut</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>style</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>style prédéfini</entry>
</row>
<row>
<entry>indent</entry>
<entry>number</entry>
<entry>Non</entry>
<entry><emphasis>0</emphasis></entry>
<entry>Taille de l'indentation pour chaque
ligne</entry>
</row>
<row>
<entry>indent_first</entry>
<entry>number</entry>
<entry>Non</entry>
<entry><emphasis>0</emphasis></entry>
<entry>Taille de l'indentation de la
première ligne</entry>
</row>
<row>
<entry>indent_char</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>(single space)</emphasis></entry>
<entry>Le caractère (ou la chaîne) à utiliser pour
indenter</entry>
</row>
<row>
<entry>wrap</entry>
<entry>number</entry>
<entry>Non</entry>
<entry><emphasis>80</emphasis></entry>
<entry>A combien de caractères doit on ajuster chaque
ligne</entry>
</row>
<row>
<entry>wrap_char</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>\n</emphasis></entry>
<entry>Le caractère (ou chaîne de caractères) avec lequel
terminer les lignes</entry>
</row>
<row>
<entry>wrap_cut</entry>
<entry>boolean</entry>
<entry>Non</entry>
<entry><emphasis>false</emphasis></entry>
<entry>Si true, wrap réduira les lignes au caractère exact
au lieu d'ajuster à la fin d'un mot</entry>
</row>
<row>
<entry>assign</entry>
<entry>chaîne de caractères</entry>
<entry>Non</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Le nom de la variable PHP dans laquelle la
sortie sera assignée</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
textformat est une fonction de bloc utilisée pour formater du texte.
Elle nettoie la chaîne de ses espaces et caractères spéciaux, puis
formate les paragraphes en ajustant ces derniers à une certaine limite,
puis en indentant les lignes.
</para>
<para>
Vous pouvez soit utiliser un style prédéfini, soit définir explicitement
chaque attribut. Actuellement, seul le style prédéfini "email" est
disponible.
</para>
<example>
<title>textformat</title>
<programlisting>
{textformat wrap=40}
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is bar.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
{/textformat}
SORTIE:
This is foo. This is foo. This is foo.
This is foo. This is foo. This is foo.
This is bar.
bar foo bar foo foo. bar foo bar foo
foo. bar foo bar foo foo. bar foo bar
foo foo. bar foo bar foo foo. bar foo
bar foo foo. bar foo bar foo foo.
{textformat wrap=40 indent=4}
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is bar.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
{/textformat}
SORTIE:
This is foo. This is foo. This is
foo. This is foo. This is foo. This
is foo.
This is bar.
bar foo bar foo foo. bar foo bar foo
foo. bar foo bar foo foo. bar foo
bar foo foo. bar foo bar foo foo.
bar foo bar foo foo. bar foo bar
foo foo.
{textformat wrap=40 indent=4 indent_first=4}
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is bar.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
{/textformat}
SORTIE:
This is foo. This is foo. This
is foo. This is foo. This is foo.
This is foo.
This is bar.
bar foo bar foo foo. bar foo bar
foo foo. bar foo bar foo foo. bar
foo bar foo foo. bar foo bar foo
foo. bar foo bar foo foo. bar foo
bar foo foo.
{textformat style="email"}
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is bar.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
{/textformat}
SORTIE:
This is foo. This is foo. This is foo. This is foo. This is foo. This is
foo.
This is bar.
bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo
bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo
foo.
</programlisting>
</example>
</sect1>
</chapter>
<chapter id="config.files">
<title>Fichiers de configuration</title>
<para>
Les fichiers de configuration sont un moyen interressant pour gérer
des variables depuis un seul et même fichier. L'exemple le plus courant
étant le schéma de couleurs du template. Normalement, pour changer le
schéma de couleur d'une application, vous devriez aller
dans chaque template et changer la couleur des éléments (ou les classes css).
Avec un fichier de configuration, il vous est possible de conserver
la couleur dans un seul endroit, puis de la mettre à jour une seule fois.
</para>
<example>
<title>Exemple de fichier de configuration</title>
<programlisting>
# variables globales
titrePage = "Menu principal"
bodyBgColor = #000000
tableBgColor = #000000
rowBgColor = #00ff00
[client]
titrePage = "Infos client"
[Login]
titrePage = "Login"
focus = "utilisateur"
Intro = """Une valeur qui tient sur
plusieur lignes. Vous devez la placer
entre trois guillemets."""
# hidden section
[.Database]
host=mon.domaine.com
db=ADDRESSBOOK
user=php-user
pass=foobar</programlisting>
</example>
<para>
Les valeurs des variables de fichiers de configuration peuvent être entre
guillemets, sans que cela soit nécessaire. Si vous vouler utiliser des
valeurs sur plusieurs lignes, vous devrez les entourer de triples
guillemets ("""). Vous pouvez insérer des commentaires dans les fichiers de
configuration en utilisant une syntaxe quelquonque, non valide.
Nous recommandons l'utilisation de <literal>#</literal> (dièse) en début
de ligne.
</para>
<para>
Cet exemple de fichier de configuration contient deux sections. Les noms des
sections sont entourés de crochets []. Les noms de section peuvent être
des chaînes, ne contenant aucun des symboles <literal>[</literal> et
<literal>]</literal>. Dans notre exemple, les 4 variables du début sont
des variables dites globales, qui ne sont pas contenue dans une section.
Ces variables sont toujours chargées depuis le fichier de configuration.
Si une section est chargée, alors toutes les variables de cette section
ainsi que les variables globales sont chargées. Si une variable existe
à la fois en tant que globale et à la fois en tant que variable de
section, la variable de section est prioritaire.
Si vous appelez deux variables dans une même section de la même façon,
la dernière déclarée prime.
</para>
<para>
Les fichiers de configuration sont chargés dans le template grâce à la
fonction <command>config_load</command>.
</para>
<para>
Vous pouvez masquer des variables ou des sections entières en préfixant
le nom de la variable ou le nom de la section avec une virgule.
Ce procédé est utile si votre application récupère ses données depuis
plusieurs fichiers de configuration et récupère des données sensibles dont
vos templates n'ont pas besoin. Si des tiers éditent des templates, vous
êtes sûr que ces derniers n'accèderont pas à ces données de configuration
en les chargeant depuis le template.
</para>
</chapter>
<chapter id="chapter.debugging.console">
<title>Console de débogage</title>
<para>
Il existe une console de débogage dans Smarty. La console vous indique
toutes les variables incluses, assignées et chargées depuis un fichier de
configuration pour le template courant. Un template appelé "debug.tpl"
est inclus dans la distribution de Smarty. Si besoin, vous pouvez définir
$debug_tpl de façon à ce que ce dernier contienne le chemin
du template à utiliser(dans SMARTY_DIR par defaut).
Lorsque vous chargez la page, une console javascript est censée surgir
et vous donner les noms de toutes les variables inclues et assignées dans
votre page courante. Pour voir toutes les variables d'un template particulier,
voir la fonction <link linkend="language.function.debug">{debug}</link>.
Pour désactiver la console de débogage, définissez $debugging à false.
Vous pouvez également temporairement activer le débogage en indiquant
SMARTY_DEBUG dans l'url si tant est que l'option
<link
linkend="variable.debugging.ctrl">$debugging_ctrl</link> soit activée.
</para>
<note>
<title>Note technique</title>
<para>
La console de débogage ne fonctionne pas si vous utilisez l'API fetch (),
mais seulement lorsque vous utilisez display (). C'est en effet un jeu
d'instructions javascripts à la fin du template qui déclenchent l'ouverture
de la fenêtre. Si vous n'aimez pas javascript, vous pouvez modifier
debug.tpl pour formater les données de la façon qui vous conviendra le
mieux. Les données de débogage ne sont pas mises en cache et les
informations de debug.tpl ne sont pas incluses dans la sortie de la
console de débogage.
</para>
</note>
<note>
<para>
Le temps de chargement des templates et des fichiers de configuration sont
indiqués en secondes.
</para>
</note>
</chapter>
</part>