diff --git a/docs/fr/appendixes.sgml b/docs/fr/appendixes.sgml
new file mode 100644
index 00000000..791c5d9b
--- /dev/null
+++ b/docs/fr/appendixes.sgml
@@ -0,0 +1,408 @@
+
+ Appendices
+
+ Diagnostic des erreurs
+
+
+ Erreurs Smarty/PHP
+
+ Smarty peut identifier de nombreuses erreurs comme des attributs de
+ balises manquants ou de noms de variables malformés. Dans ce cas-là,
+ vous verrez apparaître une erreur semblable à :
+
+
+erreurs Smarty
+
+Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah'
+ in /path/to/smarty/Smarty.class.php on line 1041
+
+Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name
+ in /path/to/smarty/Smarty.class.php on line 1041
+
+
+
+ Smarty vous indique le nom du template, le numéro de la ligne et l'erreur.
+ Après cela, vous pouvez connaître le numéro de ligne où il y a eu erreur dans
+ la définition de la classe Smarty.
+
+
+
+ Il y a certaines erreurs que Smarty ne peut pas détecter, comme les
+ balises fermantes manquantes. Ce type d'erreurs est la plupart du temps
+ repéré dans la phase de compilation PHP du template compilé.
+
+
+
+erreur d'analyse PHP
+
+Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75
+
+
+
+ Quand vous rencontrez une erreur d'analyse PHP, le numéro de la ligne
+ indiqué est celui du fichier PHP compilé et non du template. Vous pouvez alors
+ regarder le template et détecter l'erreur. Voici quelques erreurs fréquentes :
+ balises fermantes pour {if}{/if} ou {section}{/section} manquantes, ou
+ syntaxe logique incorrecte dans une instruction {if}. Si vous ne trouvez pas l'erreur,
+ vous devrez alors ouvrir le fichier PHP compilé et aller à la ligne correspondante pour
+ trouver d'où vient l'erreur.
+
+
+
+
+ Trucs et astuces
+
+
+
+ Gestion des variables non-assignées
+
+ Peut-être voudrez-vous des fois afficher une valeur par défaut pour
+ une variable qui n'a pas été assignée, comme pour afficher " "
+ afin que les couleurs de fond des tableaux fonctionnent. Beaucoup utiliseraient
+ une instruction {if} pour gérer cela, mais il existe un moyen plus facile dans
+ Smarty, l'utilisation du modificateur de variable default.
+
+
+afficher quand une variable est vide
+
+
+{* la méthode pas adaptée *}
+
+{if $title eq ""}
+
+{else}
+ {$title}
+{/if}
+
+
+{* la bonne méthode *}
+
+{$title|default:" "}
+
+
+
+
+ Gestion des variables par défaut
+
+ Si une variable est utilisée fréquemment dans vos templates,
+ lui appliquer le modificateur par défaut peut être un peu fastidieux.
+ Vous pouvez remédier à cela en lui assignant une valeur par défaut
+ avec la fonction assign.
+
+
+assigner une valeur par défaut à une variable de template
+
+{* faites cela qq part en haut de votre template *}
+{assign var="title" value=$title|default:"no title"}
+
+{* si $title est vide, il contiendra alors no "no title" *}
+{$title}
+
+
+
+ Passage du titre à un template d'en-tête
+
+ Quand la majorité de vos templates utilisent les mêmes en-tête et pied-de-page,
+ il est d'usage de les mettre dans leurs propres templates et de les inclure.
+ Mais comment faire si l'en-tête doit avoir un titre différent, selon la page
+ d'où on vient ? Vous pouvez passer le titre à l'en-tête quand il est inclus.
+
+
+passer le titre au template d'en-tête
+
+
+mainpage.tpl
+------------
+
+{include file="header.tpl" title="Main Page"}
+{* le corps du template va ici *}
+{include file="footer.tpl"}
+
+
+archives.tpl
+------------
+
+{config_load file="archive_page.conf"}
+{include file="header.tpl" title=#archivePageTitle#}
+{* le corps du template va ici *}
+{include file="footer.tpl"}
+
+
+header.tpl
+----------
+<HTML>
+<HEAD>
+<TITLE>{$title|default:"BC News"}</TITLE>
+</HEAD>
+<BODY>
+
+
+footer.tpl
+----------
+</BODY>
+</HTML>
+
+
+ Quand la page principale est conçue, le titre "Main page" est passé à header.tpl
+ et sera donc utilisé pour le titre. Quand la page d'archive est conçue,
+ le titre sera "Archives". Notez que dans l'exemple des archives, on utilise
+ le fichier archives_page.conf plutôt que des variables codées en dur.
+ Remarquez aussi que "BC News" est affichée si la variable $title
+ n'est pas définie, grâce au modificateur de variable default.
+
+
+
+ Dates
+
+ De façon générale, essayez de toujours passer les dates à Smarty
+ sous forme de timestamp. Cela permet aux designers de templates d'utiliser
+ date_format
+ pour avoir un contrôle total sur le formatage des dates et de comparer
+ facilement les dates entre elles.
+
+
+ NOTE : à partir Smarty 1.4.0, vous pouvez passer les dates à Smarty
+ sous la forme de timestamps Unix ou MySQL, ou tout autre format de dates
+ que comprend strtotime().
+
+
+utilisation de date_format
+
+{$startDate|date_format}
+
+OUTPUT:
+
+Jan 4, 2001
+
+
+{$startDate|date_format:"%Y/%m/%d"}
+
+OUTPUT:
+
+2001/01/04
+
+
+{if $date1 < $date2}
+ ...
+{/if}
+
+
+ En utilisant la fonction {html_select_date} dans un template, le programmeur
+ veut en général convertir le résultat d'un formulaire en un timestamp.
+ Voici une fonction qui devrait vous être utile.
+
+
+conversion des éléments date d'un formulaire en timestamp
+
+// cela suppose que vos éléments de formulaire soient nommés
+// startDate_Day, startDate_Month, startDate_Year
+
+$startDate = makeTimeStamp($startDate_Year,$startDate_Month,$startDate_Day);
+
+function makeTimeStamp($year="",$month="",$day="")
+{
+ if(empty($year))
+ $year = strftime("%Y");
+ if(empty($month))
+ $month = strftime("%m");
+ if(empty($day))
+ $day = strftime("%d");
+
+ return mktime(0,0,0,$month,$day,$year);
+}
+
+
+
+ WAP/WML
+
+ Les templates WAP/WML nécessitent un en-tête "Content-Type" qui doit être
+ passé avec le template. Le moyen le plus facile de faire cela est d'écrire
+ une fonction utilisateur qui écrit l'en-tête. Si vous utilisez le cache,
+ cela ne fonctionnera pas. Nous utiliserons donc une balise d'insertion
+ (rappelez-vous que les balises d'insertion ne sont pas mises en cache !).
+ Assurez-vous qu'aucune sortie
+ rien n'est transmise au navigateur avant l'appel du template, sans quoi
+ la modification de l'en-tête échouera.
+
+
+utilisation d'insert pour écrire un en-tête Content-Type WML
+
+// assurez-vous que Apache est configuré pour les extensions .wml !
+// mettez cette fonction qq part dans votre applications
+// ou dans Smarty.addons.php
+function insert_header() {
+ // cette fonction attend un argument $content
+ extract(func_get_arg(0));
+ if(empty($content))
+ return;
+ header($content);
+ return;
+}
+
+// votre template Smarty DOIT commencer avec la balise d'insertion
+
+<?xml version="1.0"?>
+<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
+
+<!-- begin new wml deck -->
+<wml>
+<!-- begin first card -->
+<card>
+<do type="accept">
+<go href="#two"/>
+</do>
+<p>
+Welcome to WAP with Smarty!
+Press OK to continue...
+</p>
+</card>
+<!-- begin second card -->
+<card id="two">
+<p>
+Pretty easy isn't it?
+</p>
+</card>
+</wml>
+
+
+
+ Templates composants
+
+ Cette astuce tient plus du hack qu'autre chose mais n'en demeure pas
+ moins une idée plutôt chouette. Utilisez-la à vos propres risques. ;-)
+
+
+ Traditionnellemnt, la programmation avec des templates dans les applications
+ se déroule de la façon suivante : d'abord vous récupérez vos variables
+ dans l'application PHP (peut-être avec des requêtes en base de données), puis
+ vous instanciez votre objet Smarty, assignez les variables et affichez le
+ template. Disons par exemple que nous avons un téléscripteur dans
+ notre template. Nous récupérerions les données dans notre application,
+ puis les assignerions ensuite pour les afficher. Mais ne serait-ce pas
+ mieux de pouvoir ajouter ce téléscripteur à n'importe quelle application
+ en incluant directement le template sans avoir à se soucier de la récupération
+ des données.
+
+
+ Vous pouvez intégrer du PHP dans vos templates avec les balises
+ {php}{/php}. Avec cette méthode, vous pouvez inclure des templates complets,
+ dans la mesure où ils récupèrent leurs propres données pour les assigner
+ à leurs propres variables. Avec le traitement intégré
+ de cette façon, vous pouvez garder le template et le traitement ensemble.
+ Ainsi, on ne se soucie plus d'où vient le contenu du template,
+ tout vient comme un seul et unique composant.
+
+
+template composant
+
+{* Smarty *}
+
+{php}
+
+ // notre fonction pour récupérer les données
+ function fetch_ticker($symbol,&$ticker_name,&$ticker_price) {
+ // du traitement qui récupère $ticker_name
+ // $ticker_price
+ }
+
+ // appelle la fonction
+ fetch_ticker("YHOO",$ticker_name,$ticker_price);
+
+ // assigne les variables
+ $this->assign("ticker_name",$ticker_name);
+ $this->assign("ticker_price",$ticker_price);
+
+{/php}
+
+Stock Name: {$ticker_name} Stock Price: {$ticker_price}
+
+
+ A partir de Smarty 1.5.0, il y a même un moyen plus propre. Vous
+ pouvez inclure du PHP dans votre template avec la balise {include_php ...}.
+ De cette façon, vous pouvez garder séparée la logique applicative
+ de la logique de présentation. Reportez-vous à la fonction include_php pour plus
+ d'informations.
+
+
+template composant avec include_php
+
+load_ticker.php
+---------------
+
+<?php
+ // notre fonction pour récupérer les données
+ function fetch_ticker($symbol,&$ticker_name,&$ticker_price) {
+ // put logic here that fetches $ticker_name
+ // and $ticker_price from some resource
+ }
+
+ // appelle la fonction
+ fetch_ticker("YHOO",$ticker_name,$ticker_price);
+
+ // assigne les variables
+ $this->assign("ticker_name",$ticker_name);
+ $this->assign("ticker_price",$ticker_price);
+?>
+
+
+index.tpl
+---------
+
+{* Smarty *}
+
+{include_php file="load_ticker.php"}
+
+Stock Name: {$ticker_name} Stock Price: {$ticker_price}
+
+
+
+ Dissimuler les adresses email
+
+ Vous-êtes vous déjà demandé pourquoi vos adresses emails sont sur autant
+ de mailing listes de spam ? Une façon pour les spammers de récupérer les
+ adresses est de parcourir les pages Web. Voici une façon de remédier
+ à ce problème : mettre votre adresse email dans du Javascript brouillé
+ au milieu de votre source HTML, sans que cela ne gêne l'affichage sur le
+ navigateur Web. Cela est fait grâce au plugin mailto.
+
+
+exemple de dissimulation d'une adresse email
+
+
+index.tpl
+---------
+
+Send inquiries to
+{mailto address=$EmailAddress encode="javascript" subject="Hello"}
+
+
+
+
+ Note technique
+
+ Cette méthode n'est pas infaillible. Un spammer peut programmer son
+ collecteur d'email pour passer outre cette astuce, mais c'est cependant
+ peu probable.
+
+
+
+
+
+ Ressources
+
+ La page Web de Smarty se trouve à l'adresse suivante : http://smarty.php.net/.
+ Vous pouvez souscrire à la mailing liste en envoyant un email à
+ smarty-general-subscribe@lists.php.net.
+ Les archives de la mailing list se trouvent à l'adresse suivante :
+ http://marc.theaimsgroup.com/?l=smarty&r=1&w=2
+
+
+
+ BUGS
+
+ Vérifiez le fichier de BUGS fourni avec la dernière version de Smarty ou
+ consultez le site Web.
+
+
+
diff --git a/docs/fr/common.dsl b/docs/fr/common.dsl
new file mode 100644
index 00000000..ad47f956
--- /dev/null
+++ b/docs/fr/common.dsl
@@ -0,0 +1,46 @@
+;; -*- Scheme -*-
+;;
+;; $Id$
+;;
+;; This file contains stylesheet customization common to the HTML
+;; and print versions.
+;;
+
+;; Stylesheets Localization
+(define %default-language% "en")
+
+(define %use-id-as-filename% #t)
+(define %gentext-nav-tblwidth% "100%")
+(define %refentry-function% #t)
+(define %refentry-generate-name% #f)
+(define %funcsynopsis-style% 'ansi)
+(define ($legalnotice-link-file$ legalnotice)
+ (string-append "copyright" %html-ext%))
+(define %generate-legalnotice-link% #t)
+(define %footnotes-at-end% #t)
+(define %force-chapter-toc% #t)
+(define newline "\U-000D")
+(define %number-programlisting-lines% #f)
+(define %linenumber-mod% 1)
+(define %shade-verbatim% #t)
+
+(define ($generate-book-lot-list$)
+ ;; REFENTRY generate-book-lot-list
+ ;; PURP Which Lists of Titles should be produced for Books?
+ ;; DESC
+ ;; This parameter should be a list (possibly empty) of the elements
+ ;; for which Lists of Titles should be produced for each 'Book'.
+ ;;
+ ;; It is meaningless to put elements that do not have titles in this
+ ;; list. If elements with optional titles are placed in this list, only
+ ;; the instances of those elements that do have titles will appear in
+ ;; the LOT.
+ ;;
+ ;; /DESC
+ ;; AUTHOR N/A
+ ;; /REFENTRY
+ (list (normalize "table")))
+
+(define (php-code code)
+ (make processing-instruction
+ data: (string-append "php " code "?")))
diff --git a/docs/fr/designers.sgml b/docs/fr/designers.sgml
new file mode 100644
index 00000000..2c0802c4
--- /dev/null
+++ b/docs/fr/designers.sgml
@@ -0,0 +1,5790 @@
+
+ Smarty pour les graphistes
+
+
+ Bases syntaxiques
+
+ Toutes les balises Smarty sont entourées de délimiteurs. Par défaut,
+ ces délimiteurs sont { et
+ }, mais ils peuvent être modifiés.
+
+
+ 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.
+
+
+
+ Commentaires
+
+ 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.
+
+
+ Commentaires
+
+{* Smarty *}
+
+{* Inclusion de l'en tête *}
+{include file="header.tpl"}
+
+{include file=$includeFile}
+
+{include file=#includeFile#}
+
+{* affiche des listes déroulantes *}
+<SELECT name=company>
+{html_options values=$vals selected=$selected output=$output}
+</SELECT>
+
+
+
+
+ Fonctions
+
+ Les balises Smarty affichent une variable
+ 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"}.
+
+
+ syntaxe des fonctions
+
+{config_load file="colors.conf"}
+
+{include file="header.tpl"}
+
+{if $name eq "Fred"}
+ Vous êtes admis dans cette zone
+{else}
+ Bienvenue, <font color="{#fontColor#}">{$name}!</font>
+{/if}
+
+{include file="footer.tpl"}
+
+
+ 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 if,
+ section et strip. 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. html_options et
+ html_select_date sont deux exemples de fonctions
+ utilisateurs.
+
+
+
+
+ Paramètres
+
+ 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.
+
+
+ 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: true, on, et yes,
+ ou false, off, et no.
+
+
+ Paramètres de fonction, syntaxe
+
+{include file="header.tpl"}
+
+{include file=$includeFile}
+
+{include file=#includeFile#}
+
+{html_select_date display_days=yes}
+
+<SELECT name=company>
+{html_options values=$vals selected=$selected output=$output}
+</SELECT>
+
+
+
+ Variables insérées dans des chaînes de caractères
+
+ 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 (`).
+
+
+ Syntaxe d'insertion de variables dans des chaînes
+
+EXEMPLE DE SYNTAXE:
+{func var="test $foo test"} <-- comprends $foo
+{func var="test $foo_bar test"} <-- comprends $foo_bar
+{func var="test $foo[0] test"} <-- comprends $foo[0]
+{func var="test $foo[bar] test"} <-- comprends $foo[bar]
+{func var="test $foo.bar test"} <-- comprends $foo (not $foo.bar)
+{func var="test `$foo.bar` test"} <-- comprends $foo.bar
+
+EXEMPLE PRATIQUE:
+{include file="subdir/$tpl_name.tpl"} <-- remplace $tpl_name avec la valeur
+{cycle values="one,two,`$smarty.config.myval`"} <-- doit comporter les
+apostrophes inverses
+
+
+
+
+
+
+ Variables
+
+ 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.
+
+
+
+ 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 :
+
+{$Nom}
+
+{$Contacts[enreg].Telephone}
+
+<body bgcolor="{#bgcolor#}">
+
+
+
+ Variables assignées depuis PHP
+
+ Pour utiliser une variables assignées depuis PHP, il faut la préfixer par le
+ symbole dollar $. Les variables asignées depuis un
+ template grâce à la fonction assign
+ sont manipulées de la même façon.
+
+
+
+ Variables assignées
+
+Bienvenue {$prenom}, heureux de voir que tu es arrivé ici.
+<p>
+La dernière connexion remonte au {$dateConnexionPrecedente}.
+
+SORTIE:
+
+Bienvenue Doug, heureux de voir que tu est arrivé ici.
+<p>
+La dernière connexion remonte au 11 janvier 2001.
+
+
+
+ Tableaux associatifs
+
+ 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).
+
+
+accéder aux variables de tableaux associatifs
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('Contacts',
+ array('fax' => '555-222-9876',
+ 'email' => 'zaphod@slartibartfast.com',
+ 'phone' => array('home' => '555-444-3333',
+ 'cell' => '555-111-1234')));
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$Contacts.fax}<br>
+{$Contacts.email}<br>
+{* you can print arrays of arrays as well *}
+{$Contacts.phone.home}<br>
+{$Contacts.phone.cell}<br>
+
+SORTIE:
+
+555-222-9876<br>
+zaphod@slartibartfast.com<br>
+555-444-3333<br>
+555-111-1234<br>
+
+
+
+ Tableaux indexés
+
+ Vous pouvez utiliser des tableaux indexés de la même façon que vous le
+ faites en PHP.
+
+
+Accès aux tableaux grâce à l'index
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('Contacts',
+ array('555-222-9876',
+ 'zaphod@slartibartfast.com',
+ array('555-444-3333',
+ '555-111-1234')));
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$Contacts[0]}<br>
+{$Contacts[1]}<br>
+{* you can print arrays of arrays as well *}
+{$Contacts[2][0]}<br>
+{$Contacts[2][1]}<br>
+
+SORTIE:
+
+555-222-9876<br>
+zaphod@slartibartfast.com<br>
+555-444-3333<br>
+555-111-1234<br>
+
+
+
+ Objets
+
+ Les attributs des objets assignés depuis PHP peuvent être utilisées en
+ en spécifiant le nom après le symbole '->'.
+
+
+accéder aux attributs des objets
+
+nom: {$person->name}<br>
+email: {$person->email}<br>
+
+SORTIE:
+
+nom: Zaphod Beeblebrox<br>
+email: zaphod@slartibartfast.com<br>
+
+
+
+
+
+ Variables chargées depuis des fichiers de configuration
+
+ 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
+ $smarty.config.
+
+
+
+variables de fichiers de configuration
+
+foo.conf:
+
+pageTitle = "C'est le mien"
+bodyBgColor = "#eeeeee"
+tableBorderSize = "3"
+tableBgColor = "#bbbbbb"
+rowBgColor = "#cccccc"
+
+index.tpl:
+
+{config_load file="foo.conf"}
+<html>
+<title>{#pageTitle#}</title>
+<body bgcolor="{#bodyBgColor#}">
+<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
+<tr bgcolor="{#rowBgColor#}">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+</tr>
+</table>
+</body>
+</html>
+
+index.tpl: (alternate syntax)
+
+{config_load file="foo.conf"}
+<html>
+<title>{$smarty.config.pageTitle}</title>
+<body bgcolor="{$smarty.config.bodyBgColor}">
+<table border="{$smarty.config.tableBorderSize}" bgcolor="{$smarty.config.tableBgColor}">
+<tr bgcolor="{$smarty.config.rowBgColor}">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+</tr>
+</table>
+</body>
+</html>
+
+
+SORTIE: (same for both examples)
+
+<html>
+<title>C'est le mien</title>
+<body bgcolor="#eeeeee">
+<table border="3" bgcolor="#bbbbbb">
+<tr bgcolor="#cccccc">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+</tr>
+</table>
+</body>
+</html>
+
+
+ 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 config_load.
+
+
+
+
+ Variable réservée {$smarty}
+
+ 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.
+
+
+
+ Variables de requête
+
+ Les variables de requête comme GET, POST, COOKIES, SERVER, ENVIRONNEMENT
+ et SESSION peuvent être utilisées comme dans l'exemple suivant:
+
+
+
+ Afficher des variables de requête
+
+{* 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}
+
+
+
+
+ {$smarty.now}
+
+ 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.
+
+
+
+utilisation de {$smarty.now}
+
+{* utilise le modificateur de variable date_format pour afficher la date et heure *}
+{$smarty.now|date_format:"%d-%m-%Y %H:%M:%S"}
+
+
+
+ {$smarty.const}
+
+ Vous pouvez directement accéder aux constantes PHP.
+
+
+
+Utiliser {$smarty.const}
+
+{$smarty.const._MA_CONSTANTE_}
+
+
+
+
+ {$smarty.capture}
+
+ 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 capture pour un
+ exemple à ce sujet.
+
+
+
+
+ {$smarty.config}
+
+ 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 config_load
+ pour un exemple à ce sujet.
+
+
+
+
+ {$smarty.section}, {$smarty.foreach}
+
+ La variable {$smarty} peut être utilisée pour accéder aux propriétés
+ des boucles 'section' et 'foreach'. Voir la documentation de
+ section et
+ foreach.
+
+
+
+
+ {$smarty.template}
+
+ Cette variable contient le nom du template en cours de traitement.
+
+
+
+
+
+
+
+ Modificateurs de variables
+
+ 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 |
+ (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 : (deux points).
+
+
+ Exemple de modificateur
+
+{* Met le titre en majuscule *}
+<h2>{$title|upper}</h2>
+
+{* 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"}
+
+
+ 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
+ @ comme ceci: {$titreArticle|@count}
+ (Affiche le nombre d'élements du tableau $titreArticle.)
+
+
+
+ capitalize
+
+ Met la première lettre de chaque mot d'une variable en majuscule.
+
+
+ capitalize
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('titreArticle', 'La police commence une campagne de sensibilisation contre la violence routière.');
+$smarty->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.
+
+
+
+ count_characters
+
+ Compte le nombre de caractères dans une variable.
+
+
+count_characters
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('titreArticle', 'Vagues de froid liées à la température.');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$titreArticle}
+{$titreArticle|count_characters}
+
+SORTIE:
+
+Vagues de froid liées à la température.
+39
+
+
+
+
+ cat
+
+
+
+
+
+
+
+
+
+ Position du paramètre
+ Type
+ Requis
+ cat
+ Description
+
+
+
+
+ 1
+ chaîne de caractères
+ Non
+ empty
+ Valeur à concaténer à la variable donnée.
+
+
+
+
+
+ Cette valeur est concaténée à la variable donnée.
+
+
+cat
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('TitreArticle', 'Les devins ont prévus que le monde existera toujours ');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$TitreArticle|cat:" demain."}
+
+SORTIE:
+
+Les devins ont prévus que le monde existera toujours demain.
+
+
+
+ count_paragraphs
+
+ Compte le nombre de paragraphes dans une variable.
+
+
+count_paragraphs
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('TitreArticle', 'La guerre apporte la paix, au prix de la vie de certains innocents.');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$TitreArticle}
+{$TitreArticle|count_paragraphs}
+
+SORTIE:
+
+La guerre apporte la paix, au prix de la vie des innocents.
+1
+
+
+
+ count_sentences
+
+ Compte le nombre de phrases dans une variable.
+
+
+count_sentences
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('TitreArticle', 'Deux navires rentrent en
+collision - Un des deux coule. Des vaches enragées blessent un fermier à
+coups de haches.');
+$smarty->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
+
+
+
+ count_words
+
+ Compte le nombre de mots dans une variable.
+
+
+count_words
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('TitreArticle', 'Un anneau pour les gouverner tous.');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$titreArticle}
+{$titreArticle|count_words}
+
+SORTIE:
+
+Un anneau pour les gouverner tous.
+6
+
+
+
+ date_format
+
+
+
+
+
+
+
+
+
+ Position du paramètre
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ 1
+ chaîne de caractères
+ Non
+ %b %e, %Y
+ Format de sortie de la date.
+
+
+ 2
+ chaîne de caractères
+ Non
+ n/a
+ Date par défaut si aucune n'est spécifiée en entrée.
+
+
+
+
+
+ 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.
+
+
+date_format
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('hier', strtotime('-1 day'));
+$smarty->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
+
+
+date_format indicateurs de convertion
+
+%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.
+
+
+
+
+ default
+
+
+
+
+
+
+
+
+
+ Position du paramètre
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ 1
+ chaîne de caractères
+ Non
+ empty
+ La valeur par défaut de la sortie si la variable
+ d'entrée est vide.
+
+
+
+
+
+ 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.
+
+
+default
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('TitreArticle', 'Les portes de la moria restent fermées.');
+$smarty->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
+
+
+
+ escape
+
+
+
+
+
+
+
+
+
+
+ Position du paramètre
+ Type
+ Requis
+ Valeurs possibles
+ Defaut
+ Description
+
+
+
+
+ 1
+ chaîne de caractère
+ Non
+ html, htmlall, url, quotes, hex, hexentity,
+ javascript
+ html
+ Format d'échappement à utiliser.
+
+
+
+
+
+ "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.
+
+
+escape
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('TitreArticle', "'Stiff Opposition Expected to Casketless Funeral Plan'");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$titreArticle}
+{$titreArticle|escape}
+{$titreArticle|escape:"html"} {* escapes & " ' < > *}
+{$titreArticle|escape:"htmlall"} {* escapes ALL html entities *}
+{$titreArticle|escape:"url"}
+{$titreArticle|escape:"quotes"}
+<a
+href="mailto:{$EmailAddress|escape:"hex"}">{$EmailAddress|escape:"hexentity"}</a>
+
+SORTIE:
+
+'Stiff Opposition Expected to Casketless Funeral Plan'
+'Stiff%20Opposition%20Expected%20to%20Casketless%20Funeral%20Plan'
+'Stiff%20Opposition%20Expected%20to%20Casketless%20Funeral%20Plan'
+'Stiff%20Opposition%20Expected%20to%20Casketless%20Funeral%20Plan'
+'Stiff+Opposition+Expected+to+Casketless+Funeral+Plan'
+\'Stiff Opposition Expected to Casketless Funeral Plan\'
+<a
+href="mailto:%62%6f%62%40%6d%65%2e%6e%65%74">bob@me.net</a>
+
+
+
+ indent
+
+
+
+
+
+
+
+
+
+ Position du paramètre
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ 1
+ entier
+ Non
+ 4
+ De combien de caractères l'indentation doit être effectuée.
+
+
+ 2
+ chaîne de caractère
+ Non
+ (espace)
+ Caractère à utiliser pour l'indentation.
+
+
+
+
+
+ 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).
+
+
+indent
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('TitreArticle', 'Il fera noir cette nuit.');
+$smarty->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.
+
+
+
+
+ lower
+
+ Met une variable en minuscules.
+
+
+lower
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('TitreArticle', 'Deux Suspects Se Sont Sauvés.');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$TitreArticle}
+{$TitreArticle|lower}
+
+SORTIE:
+
+Deux Suspects Se Sont Sauvés.
+deux suspects se sont sauvés.
+
+
+
+ nl2br
+
+ Transforme toutes les fins de lignes en balises <br />.
+ Equivalent à la fonction PHP nl2br().
+
+
+nl2br
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('TitreArticle', "Pluie ou soleil attendu\naujourd'hui, nuit noire");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$TitreArticle|nl2br}
+
+SORTIE:
+
+Pluie ou soleil attendu<br />aujourd'hui, nuit noire
+
+
+
+ regex_replace
+
+
+
+
+
+
+
+
+
+ Position du paramètre
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ 1
+ chaîne de caractère
+ Oui
+ n/a
+ Expression régulière à remplacer.
+
+
+ 2
+ chaîne de caractère
+ Oui
+ n/a
+ La chaîne de remplacement.
+
+
+
+
+
+ Un rechercher / remplacer avec une expression régulière. Utilise la même
+ syntaxe que la fonction PHP preg_replace.
+
+
+regex_replace
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('TitreArticle', "L'infertilité est un maux grandissant\n, disent les experts.");
+$smarty->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.
+
+
+
+ replace
+
+
+
+
+
+
+
+
+
+ Position du paramètre
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ 1
+ chaîne de caractères
+ Oui
+ n/a
+ chaîne à remplacer.
+
+
+ 2
+ chaîne de caractères
+ Oui
+ n/a
+ chaîne de remplacement.
+
+
+
+
+
+ Un simple remplacement de chaîne de caractères.
+
+
+replace
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('titreArticle', "Child's Stool Great for Use in Garden.");
+$smarty->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.
+
+
+
+ spacify
+
+
+
+
+
+
+
+
+
+ Position du paramètre
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ 1
+ chaîne de caractère
+ Non
+ espace
+ Ce qui est inséré entre chaque caractère de la variable.
+
+
+
+
+
+ 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.
+
+
+spacify
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('titreArticle', 'Quelque chose s'est mal passé et à provoqué
+cet accident, disent les experts');
+$smarty->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^^.
+
+
+
+ string_format
+
+
+
+
+
+
+
+
+
+ Position du paramètre
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ 1
+ chaîne de caractères
+ Oui
+ n/a
+ Le format à utiliser (sprintf)
+
+
+
+
+
+ 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.
+
+
+string_format
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('nombre', 23.5787446);
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$nombre}
+{$nombre|string_format:"%.2f"}
+{$nombre|string_format:"%d"}
+
+SORTIE:
+
+23.5787446
+23.58
+24
+
+
+
+ strip
+
+ Remplace les espaces multiples, les nouvelles lignes et les tabulations
+ par un espace simple, ou une chaîne donnée.
+
+
+ Note
+
+ Si vous voulez réaliser cette action sur un bloc complet du template,
+ utilisez la fonction strip.
+
+
+
+strip
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('titreArticle', "Une réunion autour\n d'un feu de cheminée\t
+est toujours agréable.");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$titreArticle}
+{$titreArticle|strip}
+{$titreArticle|strip:" "}
+
+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 réunion autour d'un feu de cheminée est toujours
+ agréable.
+
+
+
+ strip_tags
+
+ Supprime toutes les balises, et plus généralement tout ce qui se trouve
+ entre < et >.
+
+
+strip_tags
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('titreArticle', "Une femme aveugle obtient un nouveau <font face=\"helvetica\">
+rein</font> d'un père qu'elle n'a pas vu depuis<b> des années</b>.");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$titreArticle}
+{$titreArticle|strip_tags}
+
+SORTIE:
+
+Une femme aveugle obtient un nouveau <font face=\"helvetica\">
+rein</font> d'un père qu'elle n'a pas vu depuis<b> des années</b>.
+Une femme aveugle obtient un nouveau rein d'un père
+qu'elle n'a pas vu depuis des années.
+
+
+
+ truncate
+
+
+
+
+
+
+
+
+
+ Position du paramètre
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ 1
+ entier
+ Non
+ 80
+ Le nombre de caractères maximums au-delà duquel
+ on effectue le troncage
+
+
+ 2
+ chaîne de caractère
+ Non
+ ...
+ Le texte à rajouter lorsque l'on effectue un
+ troncage.
+
+
+ 3
+ booléen
+ Non
+ false
+ Détermine si le troncage est effectué sur
+ le dernier mot (false), ou au caractère exact (true).
+
+
+
+
+
+
+ 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.
+
+
+truncate
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('titreArticle', 'Deux soeurs réunies après 18 ans de séparation.');
+$smarty->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...
+
+
+
+
+ upper
+
+ Met une variable en majuscules.
+
+
+upper
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('titreArticle', "Si l'attaque n'est pas mise en place
+rapidement, cela risque de durer longtemps.");
+$smarty->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.
+
+
+
+ wordwrap
+
+
+
+
+
+
+
+
+
+ Position du paramètre
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ 1
+ entier
+ Non
+ 80
+ La nombre de colonnes sur lequel ajuster l'affichage.
+
+
+ 2
+ chaîne de caractères
+ Non
+ \n
+ chaîne de caractères utilisée pour l'ajustement.
+
+
+ 3
+ booléen
+ Non
+ false
+ Détermine si l'ajustement se fait en fin de mot
+ (false) ou au caractère exact (true).
+
+
+
+
+
+ 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.
+
+
+wordwrap
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('titreArticle', "Une femme aveugle obtient un nouveau rein
+d'un père qu'elle n'a pas vu depuis des années.");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$titreArticle}
+
+{$titreArticle|wordwrap:30}
+
+{$titreArticle|wordwrap:20}
+
+{$titreArticle|wordwrap:30:"<br>\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<br>
+nouveau rein d'un père<br>
+qu'elle n'a pas vu depuis<br>
+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.
+
+
+
+
+
+
+
+ Combiner des modificateurs de variable.
+
+ 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 | (pipe).
+
+
+ Combiner des modificateurs
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('titreArticle', 'Les fumeurs sont productifs, mais la mort
+tue l'efficacitée.');
+$smarty->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. . .
+
+
+
+
+
+ Fonctions natives
+
+ 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.
+
+
+ capture
+
+ 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.
+
+
+ Note technique
+
+ 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.
+
+
+
+
+ Faites attention lorsque vous interceptez la sortie de commandes
+ insert. Si vous avez configuré le cache pour que ce
+ dernier soit actif, et que vous avez des commandes insert
+ supposées s'exécuter dans un contenu en cache, ne tentez pas de capturer
+ ce contenu.
+
+
+
+
+ Capturer le contenu d'un template.
+
+{* 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 ""}
+ <tr>
+ <td>
+ {$smarty.capture.banner}
+ </td>
+ </tr>
+{/if}
+
+
+
+
+ config_load
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ file
+ chaîne de caractère
+ Oui
+ n/a
+ Le nom du fichier de configuration à inclure
+
+
+ section
+ chaîne de caractère
+ Non
+ n/a
+ Le nom de la section à charger
+
+
+ scope
+ chaîne de caractère
+ non
+ local
+
+ 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.
+
+
+
+ global
+ booléen
+ Non
+ No
+
+ 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é.
+
+
+
+
+
+
+ Cette fonction est utiliseé pour charger des variables de fichier
+ de configuration dans un template. Voir
+ Fichiers de configuration pour de plus amples informations.
+
+
+fonction config_load
+
+
+{config_load file="colors.conf"}
+
+<html>
+<title>{#pageTitle#}</title>
+<body bgcolor="{#bodyBgColor#}">
+<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
+ <tr bgcolor="{#rowBgColor#}">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+ </tr>
+</table>
+</body>
+</html>
+
+
+ Les fichiers de configuration peuvent contenir des sections.
+ Vous pouvez charger des variables d'une section donnée avec le
+ nouvel attribut section.
+
+
+ NOTE: Les sections des fichiers de configuration
+ et la fonction native section n'ont rien en
+ commun, il s'avère simplement qu'elles portent le même nom.
+
+
+fonction config_load et section
+
+{config_load file="colors.conf" section="client"}
+
+<html>
+<title>{#pageTitle#}</title>
+<body bgcolor="{#bodyBgColor#}">
+<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
+ <tr bgcolor="{#rowBgColor#}">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+ </tr>
+</table>
+</body>
+</html>
+
+
+
+ foreach,foreachelse
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ from
+ chaîne de caractère
+ oui
+ n/a
+ Le nom du tableau à parcourir
+
+
+ item
+ chaîne de caractère
+ Oui
+ n/a
+ Le nom de la variable "élément courant"
+
+
+ key
+ chaîne de caractère
+ Non
+ n/a
+ Le nom de la variable représentant la clef courante.
+
+
+ name
+ chaîne de caractère
+ Non
+ n/a
+ Le nom de la boucle foreach, qui nous permettra
+ d'accéder à ses propriétés.
+
+
+
+
+
+ Les boucles foreach sont une alternative aux boucles
+ section. Les boucles foreach
+ sont utilisées pour parcourir des tableaux associatifs simples.
+ La syntaxe des boucles foreach est bien plus simple
+ que celle des boucles section, mais en contrepartie,
+ elles ne peuvent être utilisées que pour des tableaux associatifs simples.
+ La balise foreach doit toujours être accompagnée
+ de la balise /foreach. Les paramètres requis sont
+ from et item. Le nom des boucles
+ foreach doit être composés exclusivement de lettres,
+ chiffres et underscores, selon vos préférences. Les boucles
+ foreach peuvent être imbriquées.
+ La variable from (généralement le tableau à
+ parcourir) détermine le nombre de fois que foreach
+ sera exécuté. foreachelse est exécuté si aucune
+ valeur n'est présente dans la variable donnée à l'attribut
+ from.
+
+
+foreach
+
+
+{* Cet exemple affiche toutes les valeurs du tableau $custid *}
+{foreach from=$custid item=curr_id}
+ id: {$curr_id}<br>
+{/foreach}
+
+SORTIE:
+
+id: 1000<br>
+id: 1001<br>
+id: 1002<br>
+
+
+
+foreach key
+
+{* key contient la clef de chaque élément parcouru
+
+l'attribution des élément est de la forme:
+
+$smarty->assign("contacts", array(array("tel" => "1", "fax" => "2", "portable" => "3"),
+ array("tel" => "555-4444", "fax" => "555-3333", "portable" => "760-1234")));
+
+*}
+
+{foreach name=outer item=contact from=$contacts}
+ {foreach key=key item=item from=$contact}
+ {$key}: {$item}<br>
+ {/foreach}
+{/foreach}
+
+SORTIE:
+
+tel: 1<br>
+fax: 2<br>
+portable: 3<br>
+tel: 555-4444<br>
+fax: 555-3333<br>
+portable: 760-1234<br>
+
+
+
+ include
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ file
+ chaîne de caractères
+ Oui
+ n/a
+ Le nom du template à inclure
+
+
+ assign
+ chaîne de caractères
+ Non
+ n/a
+ Le nom de la variable dans laquelle sera assignée
+ la sortie de include
+
+
+ [var ...]
+ [type de variable]
+ Non
+ n/a
+ Variables à passer au template
+
+
+
+
+
+ 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.
+
+
+ Vous pouvez spécifier un attribut optionnel assign
+ qui définit une variable de template dans laquelle la sortie de
+ include sera stockée plutôt qu'affichée.
+
+
+fonction include
+
+{include file="header.tpl"}
+
+{* Le corp du template va ici *}
+
+{include file="footer.tpl"}
+
+
+ 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.
+
+
+fonction include, passage de variables
+
+{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"}
+
+
+ Utilisez la syntaxe ressource template pour inclure
+ des fichiers situés en dehors du répertoire $template_dir.
+
+
+fonction include, exemple de ressource template
+
+{* 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"}
+
+
+
+ include_php
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ file
+ chaîne de caractère
+ oui
+ n/a
+ Le nom du fichier PHP à inclure
+
+
+ once
+ boléen
+ Non
+ true
+ Inclure plusieurs fois ou non le fichier PHP si
+ plusieurs demandes d'inclusions sont faites.
+
+
+ assign
+ chaîne de caractère
+ Non
+ n/a
+ le nom de la variable PHP dans laquelle la sortie
+ sera assignée plutôt que directement affichée.
+
+
+
+
+
+ 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.
+
+
+ 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.
+
+
+ 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 once. Mettre l'attribut once à
+ false aura pour effet d'inclure le script PHP à chaque fois que demandé
+ dans le template.
+
+
+ Vous pouvez donner une valeur à l'attribut optionnel
+ assign, pour demander à la fonction
+ include_php d'assigner la sortie du script PHP
+ à la variable spécifiée plutôt que d'en afficher directement le résultat.
+
+
+ L'objet Smarty est disponible en tant que $this dans le script PHP inclus.
+
+
+fonction include_php
+
+load_nav.php
+-------------
+
+<?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);
+
+?>
+
+
+index.tpl
+---------
+
+{* chemin absolu, ou relatif à $trusted_dir *}
+{include_php file="/path/to/load_nav.php"}
+
+{foreach item="curr_section" from=$sections}
+ <a href="{$curr_section.url}">{$curr_section.name}</a><br>
+{/foreach}
+
+
+
+ insert
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ name
+ chaîne de caractères
+ Oui
+ n/a
+ le nom de la fonction insert (insert_name)
+
+
+ assign
+ chaîne de caractère
+ Non
+ n/a
+ Le nom de la variable qui recevra la sortie
+
+
+ script
+ chaîne de caractères
+ Non
+ n/a
+ Le nom du script PHP inclus avant que la fonction
+ insert ne soit appelée.
+
+
+ [var ...]
+ [var type]
+ Non
+ n/a
+ Variable à passer à la fonction insert
+
+
+
+
+
+ Les balises insert fonctionnent à peu près comme les balises include,
+ à l'exception que leur sortie n'est pas placée en cache lorsque
+ le cache [caching] est activé.
+ Les balises insert seront exécutées à chaque appel du template.
+
+
+ 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.
+
+
+function insert
+
+{* exemple de récupération d'un bandeau publicitaire *}
+{insert name="getBanner" lid=#emplacement_bandeau# sid=#id_site#}
+
+
+ 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.
+
+
+ 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é.
+
+
+ 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.
+
+
+ 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.
+
+
+ Note technique
+
+ 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
+ caching, 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.
+
+
+
+
+ if,elseif,else
+
+ 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 if doivent être
+ utilisés de pair avec un /if.
+ else et elseif 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","==","!=",">", "<","<=",">=" sont tous
+ des opérateurs conditionnels valides, et doivent obligatoirement être
+ séparés des autres éléments par des espaces.
+
+
+Instruction if
+
+{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 < 0 or $amount > 1000 ) and $volume >= #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}
+
+
+
+ ldelim,rdelim
+
+ 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.
+
+
+ldelim, rdelim
+
+{* 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 !
+
+
+
+ literal
+
+ 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.
+
+
+balises literal
+
+{literal}
+ <script language=javascript>
+
+ <!--
+ function isblank(field) {
+ if (field.value == '')
+ { return false; }
+ else
+ {
+ document.loginform.submit();
+ return true;
+ }
+ }
+ // -->
+
+ </script>
+{/literal}
+
+
+
+ php
+
+ 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 $php_handling. Pour les
+ utilisateurs avancés seulement, son utilisation n'est normalement pas
+ nécessaire.
+
+
+balises php
+
+{php}
+ // inclusion directe d'un script PHP
+ // depuis le template.
+ include("/path/to/display_weather.php");
+{/php}
+
+
+
+ section,sectionelse
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ name
+ chaîne de caractère
+ Oui
+ n/a
+ Le nom de la section
+
+
+ loop
+ [$nom_variable]
+ Oui
+ n/a
+ le nom de la variable qui détermine le nombre de
+ fois que la boucle sera exécutée.
+
+
+
+ start
+ entier
+ Non
+ 0
+ La position de l'index ou la section commencera son
+ parcours. Si la valeur donnée est négative, la position de
+ départ est calculée depuis la fin du tableau. Par exemple,
+ s'il existe 7 valeurs dans le tableau à parcourir et que start
+ est à -2, l'index de départ sera 5. Les valeurs incorrectes
+ (en dehors de la portée du tableau) sont automatiquements
+ tronquées à la valeur correcte la plus proche.
+
+
+ step
+ entier
+ Non
+ 1
+ La valeur du pas qui sera utilisé pour parcourir le
+ tableau.Par exemple, step=2 parcourera les indices
+ 0,2,4, etc. Si step est négatif, le tableau sera parcouru en sens
+ inverse.
+
+
+ max
+ entier
+ Non
+ 1
+ Définit le nombre maximum de fois que le tableau sera
+ parcouru.
+
+
+ show
+ booléen
+ Non
+ true
+ Détermine s'il est nécessaire d'afficher la
+ section ou non.
+
+
+
+
+
+ Les balises section sont utilisées pour
+ parcourir un tableau de données. Toutes les balises
+ section doivent être utilisées de paire avec
+ les balises /section. Les paramètres requis
+ sont name et loop.
+ 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. sectionelse
+ est exécuté lorsqu'aucune valeur n'est trouvée dans la variable à
+ parcourir.
+
+
+section
+
+
+{* Cet exemple va afficher toutes les valeurs du tableau $custid *}
+{section name=client loop=$custid}
+ id: {$custid[client]}<br>
+{/section}
+
+SORTIE:
+
+id: 1000<br>
+id: 1001<br>
+id: 1002<br>
+
+
+
+section, variable de parcours
+
+{* 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]}<br>
+ nom: {$noms[client]}<br>
+ addresse: {$addresses[client]}<br>
+ <p>
+{/section}
+
+
+SORTIE:
+
+id: 1000<br>
+nom: John Smith<br>
+addresse: 253 N 45th<br>
+<p>
+id: 1001<br>
+nom: Jack Jones<br>
+addresse: 417 Mulberry ln<br>
+<p>
+id: 1002<br>
+nom: Jane Munson<br>
+addresse: 5605 apple st<br>
+<p>
+
+
+
+nom de section
+
+{* 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]}<br>
+ name: {$noms[monTableau]}<br>
+ address: {$addresses[monTableau]}<br>
+ <p>
+{/section}
+
+
+
+sections imbriquées
+
+{* 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]}<br>
+ nom: {$nom[client]}<br>
+ addresse: {$addresse[client]}<br>
+ {section name=contact loop=$type_contact[client]}
+ {$type_contact[client][contact]}: {$info_contact[client][contact]}<br>
+ {/section}
+ <p>
+{/section}
+
+
+SORTIE:
+
+id: 1000<br>
+nom: John Smith<br>
+addresse: 253 N 45th<br>
+telephone: 555-555-5555<br>
+telephone portable: 555-555-5555<br>
+e-mail: john@mydomain.com<br>
+<p>
+id: 1001<br>
+nom: Jack Jones<br>
+addresse: 417 Mulberry ln<br>
+telephone: 555-555-5555<br>
+telephone portable: 555-555-5555<br>
+e-mail: jack@mydomain.com<br>
+<p>
+id: 1002<br>
+nom: Jane Munson<br>
+addresse: 5605 apple st<br>
+telephone: 555-555-5555<br>
+telephone portable: 555-555-5555<br>
+e-mail: jane@mydomain.com<br>
+<p>
+
+
+
+Sections et tableaux associatifs
+
+{* Exemple d'affichage d'un tableau associatif dans une section *}
+{section name=client loop=$contacts}
+ nom: {$contacts[client].name}<br>
+ telephone: {$contacts[client].home}<br>
+ portable: {$contacts[client].cell}<br>
+ e-mail: {$contacts[client].email}<p>
+{/section}
+
+
+SORTIE:
+
+nom: John Smith<br>
+telephone: 555-555-5555<br>
+portable: 555-555-5555<br>
+e-mail: john@mydomain.com<p>
+nom: Jack Jones<br>
+telephone: 555-555-5555<br>
+portable: 555-555-5555<br>
+e-mail: jack@mydomain.com<p>
+nom: Jane Munson<br>
+telephone: 555-555-5555<br>
+portable: 555-555-5555<br>
+e-mail: jane@mydomain.com<p>
+
+
+
+
+
+sectionelse
+
+{* sectionelse est exécuté s'il n'existe aucune valeur dans idClient *}
+{section name=client loop=$idClient}
+ id: {$idClient[client]}<br>
+{sectionelse}
+ Aucune valeur dans $idClient.
+{/section}
+
+
+ Les sections ont leur propre variable de gestion des propriétés.
+ Elles sont de la forme: {$smarty.section.nomSection.nomVariable}
+
+
+ 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.
+
+
+ index
+
+ 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).
+
+
+ Note technique
+
+ 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.
+
+
+
+ propriété de section index
+
+ {section name=client loop=$idClient}
+ {$smarty.section.client.index} id: {$idClient[client]}<br>
+ {/section}
+
+
+ SORTIE:
+
+ 0 id: 1000<br>
+ 1 id: 1001<br>
+ 2 id: 1002<br>
+
+
+
+
+ index_prev
+
+ index_prev est utilisé pour afficher l'index de parcours
+ précédent de la boucle. Au premier passage, il vaut -1.
+
+
+ propriété de section index_prev
+
+ {section name=client loop=$custid}
+ {$smarty.section.client.index} id: {$idClient[client]}<br>
+ {* 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é<br>
+ {/if}
+ {/section}
+
+
+ SORTIE:
+
+ 0 id: 1000<br>
+ L'id du client à été modifié<br>
+ 1 id: 1001<br>
+ L'id du client à été modifié<br>
+ 2 id: 1002<br>
+ L'id du client à été modifié<br>
+
+
+
+
+ index_next
+
+ 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é.
+
+
+ propriété de section index_next
+
+ {section name=client loop=$idClient}
+ {$smarty.section.client.index} id: {$idClient[client]}<br>
+ {* 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<br>
+ {/if}
+ {/section}
+
+
+ SORTIE:
+
+ 0 id: 1000<br>
+ L'id du client va changer<br>
+ 1 id: 1001<br>
+ L'id du client va changer<br>
+ 2 id: 1002<br>
+ L'id du client va changer<br>
+
+
+
+
+ iteration
+
+ iteration est utilisé pour afficher la valeur courante de l'iteration.
+
+
+ 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.
+
+
+ propriété iteration de section
+
+ {section name=client loop=$idClient start=5 step=2}
+ Iteration courante: {$smarty.section.client.iteration}<br>
+ {$smarty.section.client.index} id: {$idClient[client]}<br>
+ {* 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<br>
+ {/if}
+ {/section}
+
+
+ SORTIE:
+
+ Iteration courante: 1
+ 5 id: 1000<br>
+ L'id du client va changer<br>
+ Iteration courante: 2
+ 7 id: 1001<br>
+ L'id du client va changer<br>
+ Iteration courante: 3
+ 9 id: 1002<br>
+ L'id du client va changer<br>
+
+
+
+
+ first
+
+ first est à true lorsque la section est parcouru pour la première fois.
+
+
+ propriété first de la section
+
+ {section name=client loop=$idClient}
+ {if $smarty.section.client.first}
+ <table>
+ {/if}
+
+ <tr><td>{$smarty.section.client.index} id:
+ {$idClient[client]}</td></tr>
+
+ {if $smarty.section.client.last}
+ </table>
+ {/if}
+ {/section}
+
+
+ SORTIE:
+
+ <table>
+ <tr><td>0 id: 1000</td></tr>
+ <tr><td>1 id: 1001</td></tr>
+ <tr><td>2 id: 1002</td></tr>
+ </table>
+
+
+
+
+ last
+
+ last est à true lorsque la section est parcourue pour la dernière fois.
+
+
+ Propriété last de section
+
+ {section name=client loop=$idClient}
+ {if $smarty.section.client.first}
+ <table>
+ {/if}
+
+ <tr><td>{$smarty.section.client.index} id:
+ {$idClient[client]}</td></tr>
+
+ {if $smarty.section.client.last}
+ </table>
+ {/if}
+ {/section}
+
+
+ SORTIE:
+
+ <table>
+ <tr><td>0 id: 1000</td></tr>
+ <tr><td>1 id: 1001</td></tr>
+ <tr><td>2 id: 1002</td></tr>
+ </table>
+
+
+
+
+ rownum
+
+ 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.
+
+
+ propriété rownum de section
+
+ {section name=client loop=$idClient}
+ {$smarty.section.client.rownum} id: {$idClient[client]}<br>
+ {/section}
+
+
+ SORTIE:
+
+ 1 id: 1000<br>
+ 2 id: 1001<br>
+ 3 id: 1002<br>
+
+
+
+
+ loop
+
+ 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.
+
+
+ Propriété de section index
+
+ {section name=client loop=$idClient}
+ {$smarty.section.client.index} id: {$idClient[client]}<br>
+ {/section}
+
+ Il y eu {$smarty.section.client.loop} clients d'affichés.
+
+ SORTIE:
+
+ 0 id: 1000<br>
+ 1 id: 1001<br>
+ 2 id: 1002<br>
+
+ il y eu 3 clients d'affichés.
+
+
+
+
+ show
+
+ show est utilisé comme paramètre de section.
+ show 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é.
+
+
+ section, attribut show
+
+ {* $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]}<br>
+ {/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<br>
+ 2 id: 1001<br>
+ 3 id: 1002<br>
+
+ la section à été affichée.
+
+
+
+
+ total
+
+ 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.
+
+
+ section, propriété total
+
+ {section name=client loop=$idClient step=2}
+ {$smarty.section.client.index} id: {$idClient[client]}<br>
+ {/section}
+
+ Il y eu {$smarty.section.client.total} clients affichés.
+
+ SORTIE:
+
+ 0 id: 1000<br>
+ 2 id: 1001<br>
+ 4 id: 1002<br>
+
+ Il y eu 3 clients affichés.
+
+
+
+
+
+ strip
+
+ 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.
+
+
+ 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.
+
+
+ Note technique
+
+ {strip}{/strip} n'affecte en aucun cas le contenu des variables de
+ template. Voir le modificateur
+ strip pour un rendu identique pour les variables.
+
+
+
+balises strip
+
+{* la suite sera affichée sur une seule ligne *}
+{strip}
+<table border=0>
+ <tr>
+ <td>
+ <A HREF="{$url}">
+ <font color="red">Un test</font>
+ </A>
+ </td>
+ </tr>
+</table>
+{/strip}
+
+
+SORTIE:
+
+<table border=0><tr><td><A HREF="http://mon.domaine.com"><font color="red">Un test</font></A></td></tr></table>
+
+
+ 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é.
+
+
+
+
+
+ Fonctions utilisateur
+
+ Smarty est livré avec plusieurs fonctions utilisateurs que vous pouvez
+ appeler dans vos templates.
+
+
+ assign
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ var
+ chaîne de caractère
+ Oui
+ n/a
+ Le nom de la variable assignée
+
+
+ value
+ chaîne de caractère
+ Oui
+ n/a
+ La valeur assignée
+
+
+
+
+
+ Assign est utilisé pour déclarer ou modifier des variables de template.
+
+
+assign
+
+{assign var="name" value="Bob"}
+
+La valeur de $name est {$name}.
+
+SORTIE:
+
+La valeur de $name est Bob.
+
+
+
+ counter
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ name
+ chaîne de caractère
+ Non
+ default
+ Le nom du compteur
+
+
+ start
+ numérique
+ Non
+ 1
+ La valeur initiale du compteur
+
+
+ skip
+ numérique
+ Non
+ 1
+ L'intervale du compteur
+
+
+ direction
+ chaîne de caractères
+ Non
+ up
+ la direction du compteur (up/down) [compte / décompte]
+
+
+ print
+ booléen
+ Non
+ true
+ S'il faut afficher cette valeur ou non
+
+
+ assign
+ chaîne de caractères
+ Non
+ n/a
+ La variable dans laquelle la valeur du compteur
+ sera assignée.
+
+
+
+
+
+ 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é.
+
+
+ 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.
+
+
+counter
+
+{* initialisation du compteur *}
+{counter start=0 skip=2 print=false}
+
+{counter}<br>
+{counter}<br>
+{counter}<br>
+{counter}<br>
+
+SORTIE:
+
+2<br>
+4<br>
+6<br>
+8<br>
+
+
+
+ cycle
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ name
+ chaîne de caractères
+ Non
+ default
+ Le nom du cycle
+
+
+ values
+ divers
+ Oui
+ N/A
+ Les valeurs sur lesquelles boucler, soit une liste
+ séparée par des virgules, (voir l'attribut delimiter),
+ soit un tableau de valeurs.
+
+
+ print
+ booléen
+ Non
+ true
+ S'il faut afficher ou non cette valeur
+
+
+ advance
+ booléen
+ Non
+ true
+ Oui ou non aller à la prochaîne valeur
+
+
+ delimiter
+ chaîne de caractères
+ Non
+ ,
+ Le délimiteur à utiliser dans la liste.
+
+
+ assign
+ chaîne de caractères
+ Non
+ n/a
+ La variable de template dans laquelle la sortie
+ sera assignée
+
+
+
+
+
+ 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.
+
+
+ Vous pouvez définir plusieurs "cycle" dans votre template, en leur
+ donnant des noms uniques (attribut name).
+
+
+ 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.
+
+
+ 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.
+
+
+ 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.
+
+
+cycle
+
+{section name=rows loop=$data}
+<tr bgcolor="{cycle values="#eeeeee,#d0d0d0"}">
+ <td>{$data[rows]}</td>
+</tr>
+{/section}
+
+SORTIE:
+
+<tr bgcolor="#eeeeee">
+ <td>1</td>
+</tr>
+<tr bgcolor="#d0d0d0">
+ <td>2</td>
+</tr>
+<tr bgcolor="#eeeeee">
+ <td>3</td>
+</tr>
+
+
+
+
+ debug
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ output
+ chaîne de caractères
+ Non
+ html
+ Type de sortie, html ou javascript
+
+
+
+
+
+ {debug} amène la console de débogage sur la page. Fonctionne
+ quelle que soit la valeur du paramètre debug 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.
+
+
+
+ eval
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ var
+ mixed
+ Oui
+ n/a
+ variable (ou chaîne de caractères) à évaluer
+
+
+ assign
+ chaîne de caractères
+ Non
+ n/a
+ Le nom de la variable PHP dans laquelle la sortie
+ sera assignée
+
+
+
+
+
+ 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.
+
+
+ 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.
+
+
+ Note technique
+
+ 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.
+
+
+
+ Note technique
+
+ 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.
+
+
+
+eval
+
+setup.conf
+----------
+
+emphstart = <b>
+emphend = </b>
+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 <b>ville</b>.
+Vous devez spécifier un <b>département</b>.
+
+
+
+
+
+ fetch
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ file
+ chaîne de caractères
+ Oui
+ n/a
+ le fichier, site http ou ftp à récupérer
+
+
+ assign
+ chaîne de caractères
+ Non
+ n/a
+ le nom de la variable PHP dans laquelle la sortie
+ sera assignée plutôt que d'être directement affichée.
+
+
+
+
+
+
+ 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.
+
+
+ Vous pouvez spécifier l'attribut optionnel assign
+ 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).
+
+
+ Note technique
+ Ne supporte pas les redirections http. Assurez vous d'inclure les
+ slash de fin sur votre page web si nécessaire.
+
+
+
+ Note technique
+
+ 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).
+
+
+
+fetch
+
+{* 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 ""}
+ <b>{$weather}</b>
+{/if}
+
+
+
+ html_checkboxes
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ name
+ chaîne de caractères
+ Non
+ checkbox
+ Nom de la liste de cases à cocher
+
+
+ values
+ array
+ Oui, à moins que vous n'utilisiez l'attribut
+ option
+ n/a
+ Un tableau de valeurs pour les cases à
+ cocher
+
+
+ output
+ array
+ Oui, à moins que vous n'utilisiez l'attribut
+ option
+ n/a
+ Un tableau de sortie pour les cases à cocher
+
+
+ checked
+ chaîne de caractères
+ Non
+ empty
+ Les éléments cochés de la liste
+
+
+ options
+ associative array
+ Oui, à moins que vous n'utilisiez values et
+ output
+ n/a
+ Un tableau associatif de valeurs et
+ sorties
+
+
+ separator
+ chaîne de caractères
+ Non
+ empty
+ chaîne de caractère pour séparer chaque case
+ à cocher
+
+
+
+
+
+ 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.
+
+
+ Tous les paramètres qui ne sont pas listés ci-dessus sont affichés
+ en tant que paires nom/valeur dans chaque balise <input> crée.
+
+html_checkboxes
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->assign('id_client', array(1000,1001,1002,1003));
+$smarty->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane
+Johnson','Charlie Brown'));
+$smarty->assign('client_id', 1001);
+$smarty->display('index.tpl');
+
+
+index.tpl:
+
+{html_checkboxes values=$id_client checked=$client_id output=$nom_client separator="<br />"}
+
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->assign('cust_checkboxes', array(
+ 1001 => 'Joe Schmoe',
+ 1002 => 'Jack Smith',
+ 1003 => 'Jane Johnson','Charlie Brown'));
+$smarty->assign('client_id', 1001);
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{html_checkboxes name="id" checkboxes=$cust_checkboxes checked=$client_id separator="<br />"}
+
+
+SORTIE: (pour les deux exemples)
+
+<input type="checkbox" name="id[]" value="1000">Joe Schmoe<br />
+<input type="checkbox" name="id[]" value="1001" checked="checked"><br />
+<input type="checkbox" name="id[]" value="1002">Jane Johnson<br />
+<input type="checkbox" name="id[]" value="1003">Charlie Brown<br />
+
+
+
+ html_image
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ file
+ chaîne de caractères
+ Oui
+ n/a
+ nom/chemin des images
+
+
+ border
+ chaîne de caractères
+ Non
+ 0
+ Bordure de l'image
+
+
+ height
+ chaîne de caractères
+ Non
+ Hauteur de l'image actuelle
+ Hauteur de l'image à afficher
+
+
+ width
+ chaîne de caractères
+ Non
+ Longueur de l'image actuelle
+ Longueur de l'image à afficher
+
+
+ basedir
+ chaîne de caractères
+ non
+ racine du serveur web
+ répertoire depuis lequel baser le calcul des
+ chemins relatifs
+
+
+ link
+ chaîne de caractères
+ non
+ n/a
+ lien sur lequel l'image pointe
+
+
+
+
+
+ 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.
+
+
+ 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é.
+
+
+ link est la valeur href à laquelle lier l'image. Si link est défini,
+ une balise <a href="VALEURLINK"><a> est placée autour de
+ l'image.
+
+
+ Note technique
+
+ 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.
+
+
+
+html_image
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->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)
+
+<img src="pumpkin.jpg" border="0" width="44" height="68">
+<img src="/path/under/docroot/pumpkin.jpg" border="0" width="44" height="68">
+<img src="../path/relative/to/currdir/pumpkin.jpg" border="0" width="44" height="68">
+
+
+
+ html_options
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ values
+ array
+ Oui, à moins que vous n'utilisiez
+ l'attribut options
+ n/a
+ un tableau de valeurs pour les listes
+ déroulantes
+
+
+ output
+ array
+ Oui, à moins que vous n'utilisiez
+ l'attribut options
+ n/a
+ Un tableau de libellés pour la liste
+ déroulante
+
+
+ selected
+ chaîne de caractères/tableau
+ Non
+ empty
+ Les éléments sélectionnés
+
+
+ options
+ Tableau associatif
+ Oui, à moins que vous n'utilisiez option
+ et values
+ n/a
+ Un tableau associatif valeur / libellé
+
+
+ name
+ chaîne de caractères
+ Non
+ empty
+ Nom du goupe d'options
+
+
+
+
+
+ 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.
+
+
+ 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.
+
+
+ Si l'attribut optionnel name est donné, les
+ balises <select name="groupname"></select> entoureront la
+ liste d'options.
+
+
+ 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 name n'est pas donné.
+
+html_options
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->assign('id_client', array(1000,1001,1002,1003));
+$smarty->assign('nom_client', array('Joe Schmoe','Jack Smith','Jane
+Johnson','Charlie Brown'));
+$smarty->assign('client_id', 1001);
+$smarty->display('index.tpl');
+
+index.tpl:
+
+<select name=client_id>
+ {html_options values=$id_client selected=$client_id output=$nom_client}
+</select>
+
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->assign('cust_options', array(
+ 1001 => 'Joe Schmoe',
+ 1002 => 'Jack Smith',
+ 1003 => 'Jane Johnson',
+ 1004 => 'Charlie Brown'));
+$smarty->assign('client_id', 1001);
+$smarty->display('index.tpl');
+
+index.tpl:
+
+<select name=client_id>
+ {html_options options=$cust_options selected=$client_id}
+</select>
+
+
+SORTIE: (valable pour les deux exemples)
+
+<select name=client_id>
+ <option value="1000">Joe Schmoe</option>
+ <option value="1001" selected="selected">Jack Smith</option>
+ <option value="1002">Jane Johnson</option>
+ <option value="1003">Charlie Brown</option>
+</select>
+
+
+
+ html_radios
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ name
+ chaîne de caractères
+ Non
+ radio
+ nom de la liste boutons radio
+
+
+ values
+ tableau
+ Oui, à moins que vous n'utilisiez l'attribut
+ options
+ n/a
+ Le tableau des valeurs des boutons radio
+
+
+ output
+ tableau
+ Oui, à moins que vous n'utilisiez l'attribut
+ options
+ n/a
+ Un tableau de libellés pour les boutons radio
+
+
+ checked
+ chaîne de caractères
+ Non
+ empty
+ Les boutons radios sélectionnés
+
+
+ options
+ tableau associatif
+ Oui, à moins que vous n'utilisiez values
+ et outputs
+ n/a
+ un tableau associatif valeurs / libellés
+
+
+ separator
+ chaîne de caractères
+ Non
+ empty
+ chaîne de séparation à placer entre les
+ boutons radio
+
+
+
+
+
+ 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.
+
+
+ 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 <input>
+ créée.
+
+html_radios
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->assign('id_client', array(1000,1001,1002,1003));
+$smarty->assign('nom_client', array('Joe Schmoe','Jack Smith','Jane
+Johnson','Charlie Brown'));
+$smarty->assign('client_id', 1001);
+$smarty->display('index.tpl');
+
+
+index.tpl:
+
+{html_radios values=$id_client checked=$client_id output=$nom_client separator="<br />"}
+
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->assign('cust_radios', array(
+ 1001 => 'Joe Schmoe',
+ 1002 => 'Jack Smith',
+ 1003 => 'Jane Johnson',
+ 1004 => 'Charlie Brown'));
+$smarty->assign('client_id', 1001);
+$smarty->display('index.tpl');
+
+
+index.tpl:
+
+{html_radios name="id" radios=$cust_radios checked=$client_id separator="<br />"}
+
+
+SORTIE: (both examples)
+
+<input type="radio" name="id[]" value="1000">Joe Schmoe<br />
+<input type="radio" name="id[]" value="1001" checked="checked"><br />
+<input type="radio" name="id[]" value="1002">Jane Johnson<br />
+<input type="radio" name="id[]" value="1003">Charlie Brown<br />
+
+
+
+ html_select_date
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ prefix
+ chaîne de caractères
+ Non
+ Date_
+ Avec quoi préfixer le nom de variable
+
+
+ time
+ timestamp/YYYY-MM-DD
+ Non
+ la date courante au format unix YYYY-MM-DD
+ format
+ la date / heure à utiliser
+
+
+ start_year
+ chaîne de caractères
+ Non
+ current year
+ 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).
+
+
+ end_year
+ chaîne de caractères
+ Non
+ même chose que start_year
+ 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).
+
+
+ display_days
+ boolean
+ Non
+ true
+ Si l'on souhaite afficher les jours ou pas.
+
+
+ display_months
+ boolean
+ Non
+ true
+ Si l'on souhaite afficher les mois ou pas.
+
+
+ display_years
+ boolean
+ Non
+ true
+ Si l'on souhaite afficher les années ou pas.
+
+
+ month_format
+ chaîne de caractères
+ Non
+ %B
+ le format du mois (strftime)
+
+
+ day_format
+ chaîne de caractères
+ Non
+ %02d
+ Le format du jour (sprintf)
+
+
+ day_value_format
+ chaîne de caractères
+ Non
+ %d
+ le format de la valeur du jour (sprintf)
+
+
+ year_as_text
+ boolean
+ Non
+ false
+ S'il faut afficher l'année au format texte
+
+
+ reverse_years
+ boolean
+ Non
+ false
+ Affiche les années dans l'ordre inverse
+
+
+ field_array
+ chaîne de caractères
+ Non
+ null
+
+ 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).
+
+
+
+ day_size
+ chaîne de caractères
+ Non
+ null
+ Ajoute un attribut size à la liste
+ déroulante des jours.
+
+
+ month_size
+ chaîne de caractères
+ Non
+ null
+ Ajoute un attribut size à la liste
+ déroulante des mois.
+
+
+ year_size
+ chaîne de caractères
+ Non
+ null
+ Ajoute un attribut size à la liste
+ déroulante des années.
+
+
+ all_extra
+ chaîne de caractères
+ Non
+ null
+ Ajoute des attributs supplémentaires à
+ toutes les balises select/input.
+
+
+ day_extra
+ chaîne de caractères
+ Non
+ null
+ Ajoute des attributs supplémentaires aux balises
+ select/input du jour.
+
+
+ month_extra
+ chaîne de caractères
+ Non
+ null
+ Ajoute des attributs supplémentaires aux balises
+ select/input du mois.
+
+
+ year_extra
+ chaîne de caractères
+ Non
+ null
+ Ajoute des attributs supplémentaires aux balises
+ select/input de l'année.
+
+
+ field_order
+ chaîne de caractères
+ Non
+ MDY
+ L'ordre dans lequel afficher les
+ listes déroulantes.
+
+
+ field_separator
+ chaîne de caractères
+ Non
+ \n
+ la chaîne de caractères affichée entre les
+ différents champs.
+
+
+ month_value_format
+ chaîne de caractères
+ Non
+ %m
+ Le format strftime de la valeur des mois, par défaut %m
+ pour les numéros.
+
+
+
+
+
+ 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.
+
+
+html_select_date
+
+{html_select_date}
+
+
+SORTIE:
+
+<select name="Date_Month">
+<option value="1">January</option>
+<option value="2">February</option>
+<option value="3">March</option>
+<option value="4">April</option>
+<option value="5">May</option>
+<option value="6">June</option>
+<option value="7">July</option>
+<option value="8">August</option>
+<option value="9">September</option>
+<option value="10">October</option>
+<option value="11">November</option>
+<option value="12" selected>December</option>
+</select>
+<select name="Date_Day">
+<option value="1">01</option>
+<option value="2">02</option>
+<option value="3">03</option>
+<option value="4">04</option>
+<option value="5">05</option>
+<option value="6">06</option>
+<option value="7">07</option>
+<option value="8">08</option>
+<option value="9">09</option>
+<option value="10">10</option>
+<option value="11">11</option>
+<option value="12">12</option>
+<option value="13" selected>13</option>
+<option value="14">14</option>
+<option value="15">15</option>
+<option value="16">16</option>
+<option value="17">17</option>
+<option value="18">18</option>
+<option value="19">19</option>
+<option value="20">20</option>
+<option value="21">21</option>
+<option value="22">22</option>
+<option value="23">23</option>
+<option value="24">24</option>
+<option value="25">25</option>
+<option value="26">26</option>
+<option value="27">27</option>
+<option value="28">28</option>
+<option value="29">29</option>
+<option value="30">30</option>
+<option value="31">31</option>
+</select>
+<select name="Date_Year">
+<option value="2001" selected>2001</option>
+</select>
+
+
+
+
+html_select_date
+
+
+{* 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)
+
+<select name="StartDateMonth">
+<option value="1">January</option>
+<option value="2">February</option>
+<option value="3">March</option>
+<option value="4">April</option>
+<option value="5">May</option>
+<option value="6">June</option>
+<option value="7">July</option>
+<option value="8">August</option>
+<option value="9">September</option>
+<option value="10">October</option>
+<option value="11">November</option>
+<option value="12" selected>December</option>
+</select>
+<select name="StartDateYear">
+<option value="1999">1995</option>
+<option value="1999">1996</option>
+<option value="1999">1997</option>
+<option value="1999">1998</option>
+<option value="1999">1999</option>
+<option value="2000" selected>2000</option>
+<option value="2001">2001</option>
+</select>
+
+
+
+ html_select_time
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ prefix
+ chaîne de caractères
+ Non
+ Time_
+ Par quoi préfixer la variable.
+
+
+ time
+ timestamp
+ Non
+ current time
+ Quel jour / heure utiliser.
+
+
+ display_hours
+ boolean
+ Non
+ true
+ S'il faut afficher l'heure.
+
+
+ display_minutes
+ boolean
+ Non
+ true
+ S'il faut afficher les minutes.
+
+
+ display_seconds
+ boolean
+ Non
+ true
+ S'il faut afficher les secondes.
+
+
+ display_meridian
+ boolean
+ Non
+ true
+ S'il faut afficher le méridian (am/pm)
+
+
+ use_24_hours
+ boolean
+ Non
+ true
+ S'il faut utiliser l'horloge 24 heure.
+
+
+ minute_interval
+ integer
+ Non
+ 1
+ Intervalle des minutes dans la liste
+ déroulante
+
+
+ second_interval
+ integer
+ Non
+ 1
+ Intervalle des secondes dans la liste
+ déroulante
+
+
+ field_array
+ chaîne de caractères
+ Non
+ n/a
+ Nom du tableau dans lequel les valeures
+ seront stockées.
+
+
+ all_extra
+ chaîne de caractères
+ Non
+ null
+ Ajoute des attributs supplémentaires aux balises
+ select / input.
+
+
+ hour_extra
+ chaîne de caractères
+ Non
+ null
+ Ajoute des attributs supplémentaires aux balises
+ select / input de l'heure.
+
+
+ minute_extra
+ chaîne de caractères
+ Non
+ null
+ Ajoute des attributs supplémentaires aux balises
+ select / input des minutes.
+
+
+ second_extra
+ chaîne de caractères
+ Non
+ null
+ Ajoute des attributs supplémentaires aux balises
+ select / input des secondes.
+
+
+ meridian_extra
+ chaîne de caractères
+ Non
+ null
+ Ajoute des attributs supplémentaires aux balises
+ select / input du méridian.
+
+
+
+
+
+ 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.
+
+
+html_select_time
+
+{html_select_time use_24_hours=true}
+
+
+SORTIE:
+
+<select name="Time_Hour">
+<option value="00">00</option>
+<option value="01">01</option>
+<option value="02">02</option>
+<option value="03">03</option>
+<option value="04">04</option>
+<option value="05">05</option>
+<option value="06">06</option>
+<option value="07">07</option>
+<option value="08">08</option>
+<option value="09" selected>09</option>
+<option value="10">10</option>
+<option value="11">11</option>
+<option value="12">12</option>
+<option value="13">13</option>
+<option value="14">14</option>
+<option value="15">15</option>
+<option value="16">16</option>
+<option value="17">17</option>
+<option value="18">18</option>
+<option value="19">19</option>
+<option value="20">20</option>
+<option value="21">21</option>
+<option value="22">22</option>
+<option value="23">23</option>
+</select>
+<select name="Time_Minute">
+<option value="00">00</option>
+<option value="01">01</option>
+<option value="02">02</option>
+<option value="03">03</option>
+<option value="04">04</option>
+<option value="05">05</option>
+<option value="06">06</option>
+<option value="07">07</option>
+<option value="08">08</option>
+<option value="09">09</option>
+<option value="10">10</option>
+<option value="11">11</option>
+<option value="12">12</option>
+<option value="13">13</option>
+<option value="14">14</option>
+<option value="15">15</option>
+<option value="16">16</option>
+<option value="17">17</option>
+<option value="18">18</option>
+<option value="19">19</option>
+<option value="20" selected>20</option>
+<option value="21">21</option>
+<option value="22">22</option>
+<option value="23">23</option>
+<option value="24">24</option>
+<option value="25">25</option>
+<option value="26">26</option>
+<option value="27">27</option>
+<option value="28">28</option>
+<option value="29">29</option>
+<option value="30">30</option>
+<option value="31">31</option>
+<option value="32">32</option>
+<option value="33">33</option>
+<option value="34">34</option>
+<option value="35">35</option>
+<option value="36">36</option>
+<option value="37">37</option>
+<option value="38">38</option>
+<option value="39">39</option>
+<option value="40">40</option>
+<option value="41">41</option>
+<option value="42">42</option>
+<option value="43">43</option>
+<option value="44">44</option>
+<option value="45">45</option>
+<option value="46">46</option>
+<option value="47">47</option>
+<option value="48">48</option>
+<option value="49">49</option>
+<option value="50">50</option>
+<option value="51">51</option>
+<option value="52">52</option>
+<option value="53">53</option>
+<option value="54">54</option>
+<option value="55">55</option>
+<option value="56">56</option>
+<option value="57">57</option>
+<option value="58">58</option>
+<option value="59">59</option>
+</select>
+<select name="Time_Second">
+<option value="00">00</option>
+<option value="01">01</option>
+<option value="02">02</option>
+<option value="03">03</option>
+<option value="04">04</option>
+<option value="05">05</option>
+<option value="06">06</option>
+<option value="07">07</option>
+<option value="08">08</option>
+<option value="09">09</option>
+<option value="10">10</option>
+<option value="11">11</option>
+<option value="12">12</option>
+<option value="13">13</option>
+<option value="14">14</option>
+<option value="15">15</option>
+<option value="16">16</option>
+<option value="17">17</option>
+<option value="18">18</option>
+<option value="19">19</option>
+<option value="20">20</option>
+<option value="21">21</option>
+<option value="22">22</option>
+<option value="23" selected>23</option>
+<option value="24">24</option>
+<option value="25">25</option>
+<option value="26">26</option>
+<option value="27">27</option>
+<option value="28">28</option>
+<option value="29">29</option>
+<option value="30">30</option>
+<option value="31">31</option>
+<option value="32">32</option>
+<option value="33">33</option>
+<option value="34">34</option>
+<option value="35">35</option>
+<option value="36">36</option>
+<option value="37">37</option>
+<option value="38">38</option>
+<option value="39">39</option>
+<option value="40">40</option>
+<option value="41">41</option>
+<option value="42">42</option>
+<option value="43">43</option>
+<option value="44">44</option>
+<option value="45">45</option>
+<option value="46">46</option>
+<option value="47">47</option>
+<option value="48">48</option>
+<option value="49">49</option>
+<option value="50">50</option>
+<option value="51">51</option>
+<option value="52">52</option>
+<option value="53">53</option>
+<option value="54">54</option>
+<option value="55">55</option>
+<option value="56">56</option>
+<option value="57">57</option>
+<option value="58">58</option>
+<option value="59">59</option>
+</select>
+<select name="Time_Meridian">
+<option value="am" selected>AM</option>
+<option value="pm">PM</option>
+</select>
+
+
+
+ html_table
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ loop
+ array
+ Oui
+ n/a
+ Tableau de données à parcourir
+
+
+ cols
+ integer
+ Non
+ 3
+ Nombre de colonnes du tableau
+
+
+ table_attr
+ chaîne de caractères
+ Non
+ border="1"
+ attributs pour la balise table
+
+
+ tr_attr
+ chaîne de caractères
+ Non
+ empty
+ attributs pour les balises tr (les tableaux sont
+ parcourus)
+
+
+ td_attr
+ chaîne de caractères
+ Non
+ empty
+ attributs pour les balises td (les tableaux sont
+ parcourus)
+
+
+ trailpad
+ chaîne de caractères
+ Non
+
+ valeur avec laquelle remplir les cellules
+ restantes de la dernière ligne (si il y en a)
+
+
+
+
+
+ html_table est une fonction utilisateur
+ qui transforme un tableau de données dans un tabeau HTML. L'attribut
+ cols détermine le nombre de colonne du tableau.
+ Les attributs table_attr, tr_attr
+ et td_attr déterminent les attributs donnés aux
+ balises table, tr et td. Si tr_attr ou
+ td_attr sont des tableaux, ils seront parcourus.
+ trailpad est la valeur avec laquelle remplir
+ les cellules restantes de la dernière ligne, s'il y en a une.
+
+
+html_table
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->assign('data',array(1,2,3,4,5,6,7,8,9));
+$smarty->assign('tr',array('bgcolor="#eeeeee"','bgcolor="#dddddd"'));
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{html_table loop=$data}
+{html_table loop=$data cols=4 table_attrs='border="0"'}
+{html_table loop=$data cols=4 tr_attrs=$tr}
+
+SORTIE:
+
+<table border="1">
+<tr><td>1</td><td>2</td><td>3</td></tr>
+<tr><td>4</td><td>5</td><td>6</td></tr>
+<tr><td>7</td><td>8</td><td>9</td></tr>
+</table>
+<table border="0">
+<tr><td>1</td><td>2</td><td>3</td><td>4</td></tr>
+<tr><td>5</td><td>6</td><td>7</td><td>8</td></tr>
+<tr><td>9</td><td> </td><td> </td><td> </td></tr>
+</table>
+<table border="1">
+<tr bgcolor="#eeeeee"><td>1</td><td>2</td><td>3</td><td>4</td></tr>
+<tr bgcolor="#dddddd"><td>5</td><td>6</td><td>7</td><td>8</td></tr>
+<tr bgcolor="#eeeeee"><td>9</td><td> </td><td> </td><td> </td></tr>
+</table>
+
+
+
+ math
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ equation
+ chaîne de caractères
+ Oui
+ n/a
+ L'opération à éxécuter
+
+
+ format
+ chaîne de caractères
+ Non
+ n/a
+ Le format du résultat (sprintf)
+
+
+ var
+ numeric
+ Oui
+ n/a
+ Les variables de l'opération
+
+
+ assign
+ chaîne de caractères
+ Non
+ n/a
+ Variable de template dans laquelle la sortie
+ sera assignée
+
+
+ [var ...]
+ numeric
+ Oui
+ n/a
+ Valeurs des variables de l'opération
+
+
+
+
+
+ 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.
+
+
+ Si vous spécifiez l'attribut assign, la sortie sera assignée à la variable
+ donnée plutôt que d'être directement affichée.
+
+
+ Note technique
+
+ 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.
+
+
+
+math
+
+{* $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
+
+
+
+ mailto
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ address
+ chaîne de caractères
+ Oui
+ n/a
+ l'adresse email
+
+
+ text
+ chaîne de caractères
+ Non
+ n/a
+ le texte à afficher, par défaut l'adresse email
+
+
+ encode
+ chaîne de caractères
+ Non
+ none
+ Comment encoder l'adresse email.
+ none, hex et javascript sont des valeurs correctes.
+
+
+ cc
+ chaîne de caractères
+ Non
+ n/a
+ Les adresses email en copie (Cc).
+ Séparez les entrées par une virgule.
+
+
+ bcc
+ chaîne de caractères
+ Non
+ n/a
+ Les adresses email en copie cachées (Bcc).
+ Séparez les entrées par une virgule.
+
+
+ subject
+ chaîne de caractères
+ Non
+ n/a
+ Sujet de l'email.
+
+
+ newsgroups
+ chaîne de caractères
+ Non
+ n/a
+ newsgroup ou poster le message.
+ Séparez les entrées par une virgule.
+
+
+ followupto
+ chaîne de caractères
+ Non
+ n/a
+ Adresses ou transmettre le message.
+ Séparez les entrées par une virgule.
+
+
+
+ extra
+ chaîne de caractères
+ Non
+ n/a
+ Toute information que vous souhaitez passer au lien,
+ comme par exemple une classe css.
+
+
+
+
+
+ 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".
+
+
+ Note technique
+
+ javascript n'est certainement pas la forme d'encodage la plus robuste.
+ Vous pouvez également utiliser un encodage hexadécimal.
+
+
+
+mailto
+
+{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:
+
+<a href="mailto:moi@domaine.com" >moi@domaine.com</a>
+<a href="mailto:moi@domaine.com" >send me some mail</a>
+<SCRIPT language="javascript">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'))</SCRIPT>
+<a href="mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d" >me@d&
+#x6f;main.com</a>
+<a href="mailto:moi@domaine.com?subject=Hello%20to%20you%21" >moi@domaine.com</a>
+<a href="mailto:moi@domaine.com?cc=you@domain.com%2Cthey@domain.com" >moi@domaine.com</a>
+<a href="mailto:moi@domaine.com" class="email">moi@domaine.com</a>
+
+
+
+ popup_init
+
+ 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 popup.
+ overLib à été écrit par Erik Bosrup. Le site d'overlib est situé à
+ l'adresse http://www.bosrup.com/web/overlib/.
+
+
+ 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.
+
+
+popup_init
+
+{* popup_init doit être appelé une fois en début de page. *}
+{popup_init src="/javascripts/overlib.js"}
+
+
+
+ popup
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ text
+ chaîne de caractères
+ Oui
+ n/a
+ le texte/code html à afficher dans la popup
+
+
+ trigger
+ chaîne de caractères
+ Non
+ onMouseOver
+ L'évènement utilisé pour rendre la popup active,
+ onMouseOver ou onClick.
+
+
+ sticky
+ boolean
+ Non
+ false
+ Rends la popup active jusqu'a ce qu'elle soit
+ explicitement fermée.
+
+
+ caption
+ chaîne de caractères
+ Non
+ n/a
+ Défini le libellé du titre
+
+
+ fgcolor
+ chaîne de caractères
+ Non
+ n/a
+ couleur interne de la popup
+
+
+ bgcolor
+ chaîne de caractères
+ Non
+ n/a
+ couleur de la bordure de la popup
+
+
+ textcolor
+ chaîne de caractères
+ Non
+ n/a
+ couleur du texte à l'intérieur de la
+ popup
+
+
+ capcolor
+ chaîne de caractères
+ Non
+ n/a
+ couleur du libellé de la popup
+
+
+ closecolor
+ chaîne de caractères
+ Non
+ n/a
+ couleur du texte de fermeture
+
+
+ textfont
+ chaîne de caractères
+ Non
+ n/a
+ la police à utiliser dans le texte principal
+
+
+ captionfont
+ chaîne de caractères
+ Non
+ n/a
+ la police à utiliser dans le libellé
+
+
+ closefont
+ chaîne de caractères
+ Non
+ n/a
+ la police pour le texte de fermeture
+
+
+ textsize
+ chaîne de caractères
+ Non
+ n/a
+ taille de la police texte prinicpal
+
+
+ captionsize
+ chaîne de caractères
+ Non
+ n/a
+ taille de la police du libellé
+
+
+ closesize
+ chaîne de caractères
+ Non
+ n/a
+ taille de la police du bouton "fermer"
+
+
+ width
+ integer
+ Non
+ n/a
+ Longeur de la popup
+
+
+ height
+ integer
+ Non
+ n/a
+ Hauteur de la popup
+
+
+ left
+ boolean
+ Non
+ false
+ la popup va à gauche de la souris
+
+
+ right
+ boolean
+ Non
+ false
+ la popup va à droite de la souris
+
+
+ center
+ boolean
+ Non
+ false
+ la popup est centrée par rapport à la
+ position de la souris
+
+
+ above
+ boolean
+ Non
+ false
+ la popup est au dessus de la souris. NOTE:
+ possible uniquement si la hauteur est définie
+
+
+ below
+ boolean
+ Non
+ false
+ la popup apparait en dessous de la souris
+
+
+ border
+ integer
+ Non
+ n/a
+ rends la bordure de la popup plus épaisse ou plus
+ fine
+
+
+ offsetx
+ integer
+ Non
+ n/a
+ A quelle distance du curseur la popup apparaitra
+ , horizontalement.
+
+
+ offsety
+ integer
+ Non
+ n/a
+ A quelle distance du curseur la popup apparaitra
+ , verticalement.
+
+
+ fgbackground
+ url to image
+ Non
+ n/a
+ Une image à utiliser à la place de la couleur de
+ fonds dans la popup
+
+
+ bgbackground
+ url to image
+ Non
+ n/a
+ 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
+
+
+ closetext
+ chaîne de caractères
+ Non
+ n/a
+ définit le texte de fermeture par autre chose
+ que "Close"
+
+
+ noclose
+ boolean
+ Non
+ n/a
+ N'affiche pas le bouton "Close" pour les fenêtres
+ "collantes".
+
+
+
+ status
+ chaîne de caractères
+ Non
+ n/a
+ défini le texte de la barre de statut
+ du navigateur
+
+
+ autostatus
+ boolean
+ Non
+ n/a
+ Défini le texte de la barre de statut au contenu
+ de la popup. NOTE: Ecrase l'attribut status.
+
+
+ autostatuscap
+ chaîne de caractères
+ Non
+ n/a
+ Défini le texte de la barre de statut au libellé
+ de la popup. NOTE: Ecrase l'attribut status.
+
+
+ inarray
+ integer
+ Non
+ n/a
+ 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.
+
+
+ caparray
+ integer
+ Non
+ n/a
+ indique à overlib de lire le libellé depuis le
+ tableau ol_caps
+
+
+ capicon
+ url
+ Non
+ n/a
+ affiche l'image spécifiée avant le libellé de la
+ popup
+
+
+ snapx
+ integer
+ Non
+ n/a
+ Aligne la popup sur une grille horizontale
+
+
+ snapy
+ integer
+ Non
+ n/a
+ Aligne la popup sur une grille verticale
+
+
+ fixx
+ integer
+ Non
+ n/a
+ vérrouille la popup à une position horizontale.
+ Note: remplace les autres paramètres de position
+ horizontale
+
+
+ fixy
+ integer
+ Non
+ n/a
+ vérouille la popup à une position verticale
+ Note: remplace les autres paramètres de position
+ verticale
+
+
+ background
+ url
+ Non
+ n/a
+ défini l'image à utiliser plutôt que le tableau
+ de fond
+
+
+ padx
+ integer,integer
+ Non
+ n/a
+ é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.
+
+
+ pady
+ integer,integer
+ Non
+ n/a
+ é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.
+
+
+ fullhtml
+ boolean
+ Non
+ n/a
+ vous autorise à placer du code html en tant que
+ contenu de la popup. Le code html est attendu dans
+ l'attribut text.
+
+
+ frame
+ chaîne de caractères
+ Non
+ n/a
+ contrôle la popup dans un cadre différent.
+ Voir la documentation d'overlib pour plus de détails
+ sur cette fonction.
+
+
+ timeout
+ chaîne de caractères
+ Non
+ n/a
+ Appelle la fonction javascript spécifiée et prends
+ sa valeur de retour comme texte devant être affiché
+ dans la popup.
+
+
+ delay
+ integer
+ Non
+ n/a
+ la popup se comporte comme une infobulle.
+ Elle disparaitra au bout d'un certain délai, en
+ millisecondes.
+
+
+ hauto
+ boolean
+ Non
+ n/a
+ Détermine automatiquement si la popup doit être
+ à gauche ou à droite de la souris
+
+
+ vauto
+ boolean
+ Non
+ n/a
+ Détermine automatiquement si la popup doit être
+ au-dessus ou au-dessous de la souris
+
+
+
+
+
+ popup est utilisé pour créer une fenêtre popup javascript.
+
+
+popup
+
+{* 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 *}
+<A href="mypage.html" {popup text="Ce lien vous amène sur ma page!"}>mypage</A>
+
+{* vous pouvez utiliser du html, des liens, etc dans vos popup *}
+<A href="mypage.html" {popup sticky=true caption="mypage contents"
+text="<UL><LI>links<LI>pages<LI>images</UL>" snapx=10 snapy=10}>mypage</A>
+
+SORTIE:
+
+(allez sur le site officiel de Smarty pour des exemples.)
+
+
+
+ textformat
+
+
+
+
+
+
+
+
+
+ Nom attribut
+ Type
+ Requis
+ Defaut
+ Description
+
+
+
+
+ style
+ chaîne de caractères
+ Non
+ n/a
+ style prédéfini
+
+
+ indent
+ number
+ Non
+ 0
+ Taille de l'indentation pour chaque
+ ligne
+
+
+ indent_first
+ number
+ Non
+ 0
+ Taille de l'indentation de la
+ première ligne
+
+
+ indent_char
+ chaîne de caractères
+ Non
+ (single space)
+ Le caractère (ou la chaîne) à utiliser pour
+ indenter
+
+
+ wrap
+ number
+ Non
+ 80
+ A combien de caractères doit on ajuster chaque
+ ligne
+
+
+ wrap_char
+ chaîne de caractères
+ Non
+ \n
+ Le caractère (ou chaîne de caractères) avec lequel
+ terminer les lignes
+
+
+ wrap_cut
+ boolean
+ Non
+ false
+ Si true, wrap réduira les lignes au caractère exact
+ au lieu d'ajuster à la fin d'un mot
+
+
+ assign
+ chaîne de caractères
+ Non
+ n/a
+ Le nom de la variable PHP dans laquelle la
+ sortie sera assignée
+
+
+
+
+
+ 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.
+
+
+ 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.
+
+
+textformat
+
+{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.
+
+
+
+
+
+
+
+ Fichiers de configuration
+
+ 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.
+
+
+ Exemple de fichier de configuration
+
+# 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
+
+
+ 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 # (dièse) en début
+ de ligne.
+
+
+ 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 [ et
+ ]. 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.
+
+
+ Les fichiers de configuration sont chargés dans le template grâce à la
+ fonction config_load.
+
+
+ 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.
+
+
+
+
+ Console de débogage
+
+ 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 {debug}.
+ 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
+ $debugging_ctrl soit activée.
+
+
+ Note technique
+
+ 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.
+
+
+
+
+ Le temps de chargement des templates et des fichiers de configuration sont
+ indiqués en secondes.
+
+
+
+
diff --git a/docs/fr/getting-started.sgml b/docs/fr/getting-started.sgml
new file mode 100644
index 00000000..44cca6be
--- /dev/null
+++ b/docs/fr/getting-started.sgml
@@ -0,0 +1,427 @@
+
+ Pour commencer
+
+
+ Qu'est-ce que Smarty ?
+
+ Smarty est un moteur de template pour PHP. Plus précisément, il facilite
+ la séparation entre la logique applicative et la présentation.
+ Cela s'explique plus facilement dans une situation où le
+ programmeur et le designer de templates jouent des rôles différents, ou,
+ comme la plupart du temps, sont deux personnes distinctes.
+ Supposons par exemple que vous concevez une page Web qui affiche un
+ article de newsletter. Le titre, le sous-titre, l'auteur et le corps
+ sont des éléments de contenu, ils ne contiennent aucune information
+ concernant la présentation. Ils sont transmis à Smarty par l'application,
+ puis le designer de templates éditent les templates et utilisent une
+ combinaison de balises HTML et de balises de templates pour formater
+ la présentation de ces éléments (tableaux HTML, couleurs d'arrière-plan,
+ tailles des polices, feuilles de styles, etc.). Un beau jour le programmeur
+ a besoin de changer la façon dont le contenu de l'article
+ est récupéré (un changement dans la logique applicative). Ce
+ changement n'affecte pas le designer de templates, le contenu
+ arrivera toujours au template de la même façon. De même, si le
+ le designer de templates veut changer complétement l'apparence
+ du template, aucun changement dans la logique de l'application
+ n'est nécessaire. Ainsi le programmeur peut changer la logique
+ de l'application sans restructurer les templates, et le designer
+ de templates peut changer les templates sans briser la logique
+ applicative.
+
+
+ Et maintenant un mot rapide sur ce que Smarty NE fait PAS. Smarty n'a
+ pas pour prétention de supprimer complétement les traitements au sein des
+ templates.
+ Il est tout à fait envisageable de recontrer un traitement dans un template,
+ à condition que ce dernier ne désserve que des besoins de présentation.
+ Un conseil : laissez la logique applicative en dehors des templates et
+ la logique de présentation en dehors de l'application. A l'avenir, cela permet
+ une meilleure gestion des évènements.
+
+
+ L'un des aspects unique de Smarty est la compilation des templates.
+ Cela signifie que Smarty lit les templates et crée des scripts PHP à partir
+ de ces derniers. Une fois créés, ils sont exécutés.
+ Il n'y a donc pas d'analyse coûteuse de template à chaque requête,
+ et les templates peuvent bénéficier des solutions de cache PHP
+ comme Zend Accelerator (http://www.zend.com) ou PHP Accelerator
+ (http://www.php-accelerator.co.uk).
+
+
+ Quelques caractéristiques de Smarty :
+
+
+ Il est très rapide.
+ Il est efficace, le parser PHP s'occupe
+ du sale travail.
+ Pas d'analyse de template coûteuse, une seule compilation.
+
+ Il sait ne recompiler que les fichiers de templates
+ qui ont été modifiés.
+ Vous pouvez créer des
+ fonctions utilisateurs et des
+ modificateurs de variables personnalisés, le langage de
+ template est donc extrémement extensible.
+ Syntaxe des templates configurable, vous
+ pouvez utiliser {}, {{}}, <!--{}-->, etc comme délimiteurs.
+
+ Les instructions if/elseif/else/endif
+ sont passées au parser PHP, la syntaxe de l'expression {if...}
+ peut être aussi simple ou aussi complexe que vous
+ le désirez.
+ Imbrication illimitée de sections,
+ de 'if', etc. autorisée.
+ Il est possible d'inclure du code PHP
+ directement dans vos templates, bien que cela ne soit pas obligatoire
+ (ni conseillé), vu que le moteur est extensible.
+ Support de cache intégré.
+ Sources de templates arbitraires.
+ Fonctions de gestion de cache personnalisables.
+ Architecture de plugins
+
+
+
+
+ Installation
+
+
+ Ce dont vous avez besoin
+
+ Smarty nécessite un serveur Web utilisant PHP 4.0.6 ou supérieur.
+
+
+
+
+ Installation de base
+
+ Copiez les fichiers bibliothèques de Smarty du répertoire
+ /libs/ de la distribution à un emplacement accessible à PHP.
+ Ce sont des fichiers PHP que vous NE DEVEZ PAS
+ modifier. Ils sont partagés par toutes les applications et ne seront
+ mis à jour que lorsque vous installerez une nouvelle version de
+ Smarty.
+
+
+ fichiers de la bibliothèque SMARTY
+
+Smarty.class.php
+Smarty_Compiler.class.php
+Config_File.class.php
+debug.tpl
+/plugins/*.php (tous !)
+
+
+
+ Smarty utilise une constante PHP appelée SMARTY_DIR qui
+ représente le chemin complet de la bibliothèque Smarty. En fait,
+ si votre application trouve le fichier
+ Smarty.class.php, vous n'aurez pas
+ besoin de définir la variable SMARTY_DIR, Smarty s'en chargera pour vous.
+ En revanche, si Smarty.class.php
+ n'est pas dans votre répertoire d'inclusion ou que vous ne
+ donnez pas un chemin absolu à votre application, vous
+ devez définir SMARTY_DIR explicitement. SMARTY_DIR
+ doit avoir être terminé par un slash.
+
+
+
+ Voici comment créer une instance de Smarty dans vos scripts PHP :
+
+
+
+ créer une instance de Smarty
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+
+
+ Essayez de lancer le script ci-dessus. Si vous obtenez une erreur indiquant
+ que le fichier Smarty.class.php n'est pas trouvé,
+ tentez l'une des choses suivantes :
+
+
+
+ fournir un chemin absolu vers la bibliothèque Smarty
+
+require('/usr/local/lib/php/Smarty/Smarty.class.php');
+$smarty = new Smarty;
+
+
+
+ Ajouter le répertoire de la bibliothèque au chemin de php_include
+
+// Editez le fichier php.ini, ajoutez le répertoire de la
+// bibliothèque Smarty au include_path et redémarrez le serveur Web.
+// Cela devrait ensuite fonctionner :
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+
+
+ Définir explicitement la constante SMARTY_DIR
+
+define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
+require(SMARTY_DIR.'Smarty.class.php');
+$smarty = new Smarty;
+
+
+
+ Maintenant que les fichiers de la librairie sont en place,
+ il est temps de définir les répertoires de Smarty, pour votre application.
+ Smarty a besoin de quatre répertoires qui sont (par défaut)
+ templates,
+ templates_c, configs et
+ cache. Chacun d'entre eux peut être défini
+ via les attributs $template_dir,
+ $compile_dir, $config_dir et
+ $cache_dir respectivement. Il est vivement
+ conseillé que vous régliez ces répertoires séparément pour chaque
+ application qui utilise Smarty.
+
+
+ Assurez-vous de bien connaître chemin de la racine
+ de votre arborescence Web. Dans notre exemple, la racine
+ est "/web/www.mydomain.com/docs". Seul Smarty
+ accède aux répertoires en question, et jamais le serveur Web.
+ Pour des raisons de sécurité, il est donc conseillé de
+ sortir ces répertoires dans un répertoire
+ en dehors de l'arborescence
+ Web.
+
+
+ Dans notre exemple d'installation, nous allons régler l'environnement
+ de Smarty pour une application de livre d'or. Nous avons ici choisi
+ une application principalement pour mettre en évidence une
+ convention de nommage des répertoires. Vous pouvez utiliser le même
+ environnement pour n'importe quelle autre application, il suffit de
+ remplacer "livredor" avec le nom de votre application. Nous allons
+ mettre nos répertoires Smarty dans
+ "/web/www.mydomain.com/smarty/livredor/".
+
+
+ Vous allez avoir besoin d'au moins un fichier à la racine de
+ l'arborescence Web,
+ il s'agit du script auquel l'internaute a accès. Nous allons l'appeler
+ "index.php" et le placer dans un sous-répertoire
+ appelé "/livredor/". Il est pratique de configurer le serveur Web de
+ sorte que "index.php" soit identifié comme fichier
+ par défaut de ce répertoire. Aicnsi, si l'on tape
+ "http://www.mydomain.com/livredor/", le script index.php soit
+ exécuté sans que "index.php" ne soit spécifié dans l'URL. Avec Apache
+ vous pouvez régler cela en ajoutant "index.php" à la ligne où se
+ trouve DirectoryIndex (séparez chaque entrée par un espace).
+
+
+ Jetons un coup d'oeil à la structure de fichier obtenue :
+
+
+
+ exemple de structure de fichiers
+
+/usr/local/lib/php/Smarty/Smarty.class.php
+/usr/local/lib/php/Smarty/Smarty_Compiler.class.php
+/usr/local/lib/php/Smarty/Config_File.class.php
+/usr/local/lib/php/Smarty/debug.tpl
+/usr/local/lib/php/Smarty/plugins/*.php
+
+/web/www.mydomain.com/smarty/livredor/templates/
+/web/www.mydomain.com/smarty/livredor/templates_c/
+/web/www.mydomain.com/smarty/livredor/configs/
+/web/www.mydomain.com/smarty/livredor/cache/
+
+/web/www.mydomain.com/docs/livredor/index.php
+
+
+
+ Smarty a besoin d'accéder en écriture aux répertoires
+ $compile_dir et $cache_dir,
+ assurez-vous donc que le serveur Web dispose de ces droits d'accès.
+ Il s'agit généralement de l'utilisateur "nobody" et du group
+ "nobody". Pour les utilisateurs de OS X, l'utilisateur par défaut
+ est "web" et le group "web". Si vous utilisez Apache, vous pouvez
+ parcourir le fichier httpd.conf (en général dans
+ "/usr/local/apache/conf/") pour déterminer quel est l'utilisateur
+ et le groupe auquel il appartient.
+
+
+
+
+ régler les permissions d'accès
+
+
+chown nobody:nobody /web/www.mydomain.com/smarty/templates_c/
+chmod 770 /web/www.mydomain.com/smarty/templates_c/
+
+chown nobody:nobody /web/www.mydomain.com/smarty/cache/
+chmod 770 /web/www.mydomain.com/smarty/cache/
+
+
+
+ Note technique
+
+ La commande chmod 770 est relativement bien sécurisée, elle donne
+ à l'utilisateur "nobody" et au groupe "nobody" les accès en
+ lecture/écriture aux répertoires. Si vous voulez donner le droit d'accès
+ en lecture à tout le monde (principalement pour pouvoir accéder
+ vous-même à ces fichiers), vous pouvez lui préférer chmod 775.
+
+
+
+
+ Nous devons créer le fichier index.tpl que Smarty va charger.
+ Il va se trouver dans $template_dir.
+
+
+
+ Edition de /web/www.mydomain.com/smarty/templates/index.tpl
+
+
+{* Smarty *}
+
+Hello, {$name}!
+
+
+
+
+ Note technique
+
+ {* Smarty *} est un commentaire de template. Il n'est pas
+ obligatoire mais il est bon de commencer tous vos templates
+ avec ce commentaire. Cela rend le fichier facilement
+ reconnaissable en plus de son extension. Les éditeurs
+ de texte peuvent par exemple reconnaître le fichier et
+ adapter la coloration syntaxique.
+
+
+
+
+ Maintenant passons à l'édition du fichier index.php. Nous allons
+ créer une instance de Smarty, assigner une valeur à une variable
+ de template et afficher le résultat avec index.tpl. Dans notre
+ exemple d'environnement, "/usr/local/lib/php/Smarty" est dans notre
+ include_path. Assurez-vous de faire la même chose ou d'utiliser
+ des chemins absolus.
+
+
+
+ édition de /web/www.mydomain.com/docs/livredor/index.php
+
+// charge la bibliothèque Smarty
+require('Smarty.class.php');
+
+$smarty = new Smarty;
+
+$smarty->template_dir = '/web/www.mydomain.com/smarty/livredor/templates/';
+$smarty->compile_dir = '/web/www.mydomain.com/smarty/livredor/templates_c/';
+$smarty->config_dir = '/web/www.mydomain.com/smarty/livredor/configs/';
+$smarty->cache_dir = '/web/www.mydomain.com/smarty/livredor/cache/';
+
+$smarty->assign('name','Ned');
+
+$smarty->display('index.tpl');
+
+
+
+ Note techique
+
+ Dans notre exemple, nous avons configuré les chemins absolus
+ pour chacun des répertoires Smarty. Si
+ '/web/www.mydomain.com/smarty/livredor/' est dans votre
+ include_path PHP alors ces réglages ne sont pas nécessaires.
+ Quoi qu'il en soit il est plus efficace et (par expérience)
+ moins générateur d'erreurs de les définir avec des chemins
+ absolus. Cela nous garantit que Smarty récupèrera les bons fichiers.
+
+
+
+
+ Et maintenant appelez le fichier index.php avec navigateur
+ Web. Vous devriez voir "Hello, Ned!".
+
+
+ Vous venez de terminer l'installation de base de Smarty !
+
+
+
+ Configuration avancée
+
+
+ Ceci est la suite de l'installation de base, veuillez
+ lire cette dernière avant de poursuivre.
+
+
+
+ Une manière un peu plus commode de configurer Smarty est de faire votre
+ propre classe fille et de l'initialiser selon votre environnement.
+ De la sorte, nous n'aurons plus besoin de configurer à chaques fois les
+ chemins de notre environnement. Créons un nouveau répertoire
+ "/php/includes/livredor/" et un nouveau fichier appelé "setup.php".
+ Dans notre exemple d'environnement, "/php/includes" est notre
+ include_path PHP. Assurez-vous de faire la même chose ou alors d'utiliser
+ des chemins absolus.
+
+
+
+ édition de /php/includes/livredor/setup.php
+
+
+// charge la librairie Smarty
+require('Smarty.class.php');
+
+// le fichier setup.php est un bon
+// endroit pour charger les fichiers
+// de librairies de l'application et vous pouvez
+// faire cela juste ici. Par exemple :
+// require('livredor/livredor.lib.php');
+
+class Smarty_livredor extends Smarty {
+
+ function Smarty_livredor() {
+
+ // Constructeur de la classe. Appelé automatiquement
+ // à l'instanciation de la classe.
+
+ $this->Smarty();
+
+ $this->template_dir = '/web/www.mydomain.com/smarty/livredor/templates/';
+ $this->compile_dir = '/web/www.mydomain.com/smarty/livredor/templates_c/';
+ $this->config_dir = '/web/www.mydomain.com/smarty/livredor/configs/';
+ $this->cache_dir = '/web/www.mydomain.com/smarty/livredor/cache/';
+
+ $this->caching = true;
+ $this->assign('app_name','Guest Book');
+ }
+
+}
+
+
+
+ Modifions maintenant le fichier index.php pour qu'il utilise "setup.php"
+
+
+
+ édition de /web/www.mydomain.com/docs/livredor/index.php
+
+
+require('livredor/setup.php');
+
+$smarty = new Smarty_livredor;
+
+$smarty->assign('name','Ned');
+
+$smarty->display('index.tpl');
+
+
+
+ Vous savez maintenant qu'il est facile de créer une instance de Smarty,
+ correctement configurée, en utilisant Smarty_livredor qui initialise
+ automatiquement tout ce qu'il faut pour votre application.
+
+
+
+
+
+
diff --git a/docs/fr/html-common.dsl b/docs/fr/html-common.dsl
new file mode 100644
index 00000000..7fd772c5
--- /dev/null
+++ b/docs/fr/html-common.dsl
@@ -0,0 +1,382 @@
+;; -*- Scheme -*-
+;;
+;; $Id$
+;;
+
+;; Returns the depth of the auto-generated TOC (table of contents) that
+;; should be made at the nd-level
+(define (toc-depth nd)
+ (if (string=? (gi nd) (normalize "book"))
+ 3 ; the depth of the top-level TOC
+ 1 ; the depth of all other TOCs
+ ))
+
+
+
+
+
+
+(element (funcdef function)
+ ($bold-seq$
+ (make sequence
+ (process-children)
+ )
+ )
+ )
+
+
+(define (is-true-optional nl)
+ (and (equal? (gi (parent nl)) (normalize "parameter"))
+ (equal? 0 (string-length (strip (data (preced nl)))))
+ (equal? 0 (string-length (strip (data (follow nl)))))
+ )
+ )
+
+
+(define (has-true-optional nl)
+ (is-true-optional
+ (node-list-first-element
+ (select-elements
+ (descendants nl)
+ (normalize "optional"))
+ )
+ )
+ )
+
+
+(define (count-true-optionals nl)
+ (let loop
+ ((result 0)
+ (nl (select-elements (descendants nl) (normalize "optional")))
+ )
+ (if(node-list-empty? nl)
+ result
+ (if(is-true-optional(node-list-first nl))
+ (loop (+ result 1) (node-list-rest nl))
+ (loop result (node-list-rest nl))
+ )
+ )
+ )
+ )
+
+
+;; there are two different kinds of optionals
+;; optional parameters and optional parameter parts
+;; an optional parameter is identified by an optional tag
+;; with a parameter tag as its parent
+;; and only whitespace between them
+(element optional
+ ;;check for true optional parameter
+ (if (is-true-optional (current-node))
+ ;; yes - handle '[...]' in paramdef
+ (process-children-trim)
+ ;; no - do '[...]' output
+ (make sequence
+ (literal %arg-choice-opt-open-str%)
+ (process-children-trim)
+ (literal %arg-choice-opt-close-str%)
+ )
+ )
+ )
+
+;; now this is going to be tricky
+(element paramdef
+ (make sequence
+ ;; special treatment for first parameter in funcsynopsis
+ (if (equal? (child-number (current-node)) 1)
+ ;; is first ?
+ (make sequence
+ ;; start parameter list
+ (literal "(")
+ ;; is optional ?
+ ( if (has-true-optional (current-node))
+ (literal %arg-choice-opt-open-str%)
+ (empty-sosofo)
+ )
+ )
+ ;; not first
+ (empty-sosofo)
+ )
+
+ ;;
+ (process-children-trim)
+
+ ;; special treatment for last parameter
+ (if (equal? (gi (ifollow (current-node))) (normalize "paramdef"))
+ ;; more parameters will follow
+ (make sequence
+ ;; next is optional ?
+ ( if (has-true-optional (ifollow (current-node)))
+ ;; optional
+ (make sequence
+ (literal " ")
+ (literal %arg-choice-opt-open-str%)
+ )
+ ;; not optional
+ (empty-sosofo)
+ )
+ (literal ", " )
+ )
+ ;; last parameter
+ (make sequence
+ (literal
+ (let loop ((result "")(count (count-true-optionals (parent (current-node)))))
+ (if (<= count 0)
+ result
+ (loop (string-append result %arg-choice-opt-close-str%)(- count 1))
+ )
+ )
+ )
+ ( literal ")" )
+ )
+ )
+ )
+ )
+
+
+(element function
+ (let* ((function-name (data (current-node)))
+ (linkend
+ (string-append
+ "function."
+ (string-replace
+ (string-replace function-name "_" "-")
+ "::" ".")))
+ (target (element-with-id linkend))
+ (parent-gi (gi (parent))))
+ (cond
+ ;; function names should be plain in FUNCDEF
+ ((equal? parent-gi "funcdef")
+ (process-children))
+
+ ;; if a valid ID for the target function is not found, or if the
+ ;; FUNCTION tag is within the definition of the same function,
+ ;; make it bold, add (), but don't make a link
+ ((or (node-list-empty? target)
+ (equal? (case-fold-down
+ (data (node-list-first
+ (select-elements
+ (node-list-first
+ (children
+ (select-elements
+ (children
+ (ancestor-member (parent) (list "refentry")))
+ "refnamediv")))
+ "refname"))))
+ function-name))
+ ($bold-seq$
+ (make sequence
+ (process-children)
+ (literal "()"))))
+
+ ;; else make a link to the function and add ()
+ (else
+ (make element gi: "A"
+ attributes: (list
+ (list "HREF" (href-to target)))
+ ($bold-seq$
+ (make sequence
+ (process-children)
+ (literal
+ )
+ (literal "()"))))))))
+
+(element command
+ (let* ((command-name (data (current-node)))
+ (linkend
+ (string-append
+ "language.function."
+ (string-replace
+ (string-replace command-name "_" ".")
+ "::" ".")))
+ (target (element-with-id linkend))
+ (parent-gi (gi (parent))))
+ (cond
+ ;; function names should be plain in FUNCDEF
+ ((equal? parent-gi "funcdef")
+ (process-children))
+
+ ;; if a valid ID for the target function is not found, or if the
+ ;; FUNCTION tag is within the definition of the same function,
+ ;; make it bold, add (), but don't make a link
+ ((or (node-list-empty? target)
+ (equal? (case-fold-down
+ (data (node-list-first
+ (select-elements
+ (node-list-first
+ (children
+ (select-elements
+ (children
+ (ancestor-member (parent) (list "refentry")))
+ "refnamediv")))
+ "refname"))))
+ command-name))
+ ($bold-seq$
+ (make sequence
+ (literal "{")
+ (process-children)
+ (literal "}"))))
+
+ ;; else make a link to the function and add ()
+ (else
+ (make element gi: "A"
+ attributes: (list
+ (list "HREF" (href-to target)))
+ ($bold-seq$
+ (make sequence
+ (literal "{")
+ (process-children)
+ (literal "}"))))))))
+
+(element classname
+ (let* ((class-name (data (current-node)))
+ (linkend
+ (string-append
+ "class."
+ (string-replace
+ (case-fold-down class-name) "_" "-")))
+ (target (element-with-id linkend))
+ (parent-gi (gi (parent))))
+ (cond
+ ;; function names should be plain in SYNOPSIS
+ ((equal? parent-gi "synopsis")
+ (process-children))
+
+ ;; if a valid ID for the target class is not found, or if the
+ ;; CLASSNAME tag is within the definition of the same class,
+ ;; make it bold, but don't make a link
+ ((or (node-list-empty? target)
+ (equal? (case-fold-down
+ (data (node-list-first
+ (select-elements
+ (node-list-first
+ (children
+ (select-elements
+ (children
+ (ancestor-member (parent) (list "refentry")))
+ "refnamediv")))
+ "refname"))))
+ class-name))
+ ($bold-seq$
+ (process-children)))
+
+ ;; else make a link to the function and add ()
+ (else
+ (make element gi: "A"
+ attributes: (list
+ (list "HREF" (href-to target)))
+ ($bold-seq$
+ (process-children)))))))
+
+
+(element constant
+ (let* ((constant-name (data (current-node)))
+ (linkend
+ (string-append "constant."
+ (case-fold-down
+ (string-replace constant-name "_" "-"))))
+ (target (element-with-id linkend))
+ (parent-gi (gi (parent))))
+ (cond
+; ;; constant names should be plain in FUNCDEF
+; ((equal? parent-gi "funcdef")
+; (process-children))
+
+ ;; if a valid ID for the target constant is not found, or if the
+ ;; CONSTANT tag is within the definition of the same constant,
+ ;; make it bold, add (), but don't make a link
+ ((or (node-list-empty? target)
+ (equal? (case-fold-down
+ (data (node-list-first
+ (select-elements
+ (node-list-first
+ (children
+ (select-elements
+ (children
+ (ancestor-member (parent) (list "refentry")))
+ "refnamediv")))
+ "refname"))))
+ constant-name))
+ ($bold-mono-seq$
+ (process-children)))
+
+ ;; else make a link to the function and add ()
+ (else
+ (make element gi: "A"
+ attributes: (list
+ (list "HREF" (href-to target)))
+ ($bold-mono-seq$
+ (process-children)))))))
+
+
+(element example
+ (make sequence
+ (make element gi: "TABLE"
+ attributes: (list
+ (list "WIDTH" "100%")
+ (list "BORDER" "0")
+ (list "CELLPADDING" "0")
+ (list "CELLSPACING" "0")
+ (list "CLASS" "EXAMPLE"))
+ (make element gi: "TR"
+ (make element gi: "TD"
+ ($formal-object$))))))
+
+
+(element (paramdef parameter)
+ (make sequence
+ font-posture: 'italic
+ (process-children-trim)
+ )
+ )
+
+(mode book-titlepage-recto-mode
+ (element authorgroup
+ (process-children))
+
+ (element author
+ (let ((author-name (author-string))
+ (author-affil (select-elements (children (current-node))
+ (normalize "affiliation"))))
+ (make sequence
+ (make element gi: "DIV"
+ attributes: (list (list "CLASS" (gi)))
+ (literal author-name))
+ (process-node-list author-affil))))
+ )
+
+(define (chunk-element-list)
+ (list (normalize "preface")
+ (normalize "chapter")
+ (normalize "appendix")
+ (normalize "article")
+ (normalize "glossary")
+ (normalize "bibliography")
+ (normalize "index")
+ (normalize "colophon")
+ (normalize "setindex")
+ (normalize "reference")
+ (normalize "refentry")
+ (normalize "part")
+ (normalize "sect1")
+ (normalize "sect2")
+ (normalize "section")
+ (normalize "book") ;; just in case nothing else matches...
+ (normalize "set") ;; sets are definitely chunks...
+ ))
+
+(define ($section-body$)
+ (make element gi: "DIV"
+ attributes: (list (list "CLASS" (gi)))
+ ($section-separator$)
+ ($section-title$)
+
+ (if (or (not (node-list-empty? (select-elements (children (current-node))
+ (normalize "sect2"))))
+ (not (node-list-empty? (select-elements (children (current-node))
+ (normalize "sect3")))))
+ (build-toc (current-node) 1)
+ (empty-sosofo))
+
+ (process-children)))
+
diff --git a/docs/fr/html.dsl b/docs/fr/html.dsl
new file mode 100644
index 00000000..e312da30
--- /dev/null
+++ b/docs/fr/html.dsl
@@ -0,0 +1,21 @@
+
+
+
+]>
+
+
+
+
+
+(define %html-ext% ".html")
+
+&html-common.dsl;
+&common.dsl;
+
+
+
+
+
+
+
diff --git a/docs/fr/manual.sgml b/docs/fr/manual.sgml
new file mode 100644
index 00000000..e05dd446
--- /dev/null
+++ b/docs/fr/manual.sgml
@@ -0,0 +1,44 @@
+
+
+
+
+
+]>
+
+
+
+ Smarty - le moteur et compilateur de template PHP
+
+
+ MonteOhrt <monte@ispi.net>
+
+
+ AndreiZmievski <andrei@php.net>
+
+
+
+
+
+ ArnaudCogoluègnes <arnaud.cogoluegnes@free.fr>
+
+
+ GéraldCroës <gcroes@aston.fr>
+
+
+
+ Version 2.0
+
+ 2001
+ 2002
+ ispi of Lincoln, Inc.
+
+
+
+ &preface;
+ &getting.started;
+ &smarty.for.designers;
+ &smarty.for.programmers;
+ &appendixes;
+
+
diff --git a/docs/fr/php.dsl b/docs/fr/php.dsl
new file mode 100644
index 00000000..82a5e5f8
--- /dev/null
+++ b/docs/fr/php.dsl
@@ -0,0 +1,21 @@
+
+
+
+]>
+
+
+
+
+
+(define %html-ext% ".php")
+
+&html-common.dsl;
+&common.dsl;
+
+
+
+
+
+
+
diff --git a/docs/fr/preface.sgml b/docs/fr/preface.sgml
new file mode 100644
index 00000000..66027b6e
--- /dev/null
+++ b/docs/fr/preface.sgml
@@ -0,0 +1,77 @@
+
+ Préface
+
+ "Comment rendre mes scripts PHP indépendants de la présentation ?".
+ Voici sans doute la question la plus posée sur la mailing list
+ PHP. Alors que PHP est étiqueté "langage de script
+ pour HTML", on se rend vite compte, après quelques projets qui mélangent
+ sans complexe HTML et PHP, que la séparation entre la forme et
+ le contenu est important. De plus, dans de nombreuses entreprises
+ les rôles du designer et du programmeur sont distincts. La solution template
+ coule donc de source.
+
+
+ Dans notre entreprise par exemple, le développement d'une application
+ se fait de la manière suivante : une fois le cahier des charges écrit,
+ le designer réalise une maquette, et donne ses interfaces
+ au programmeur. Le programmeur implémente les fonctionnalités applicatives
+ et utilise les maquettes pour faire des squelettes de templates. Le projet
+ est alors passé au designer HTML/responsable de la mise en page qui amène les
+ templates jusqu'au faîte de leur gloire. Il est possible que le projet fasse
+ une fois ou deux des allers/retours entre la programmation et la présentation.
+ En conséquence, il est important de disposer d'un bon système de template. Les
+ programmeurs ne veulent pas avoir à faire au HTML, et ne veulent pas non plus
+ que les designers HTML bidouillent le code PHP. Les designers ont besoin d'outils
+ comme des fichiers de configuration, des blocs dynamiques et d'autres solutions
+ pour répondre à des problématiques d'interface, mais ne veulent pas
+ nécessairement avoir à faire à toutes les subtilités de la programmation PHP.
+
+
+ Un rapide tour d'horizon des solutions type template aujourd'hui et
+ l'on s'aperçoit que la plupart d'entre elles n'offrent que des moyens
+ rudimentaires pour substituer des variables dans des templates, ainsi que des
+ fonctionnalités limitées de blocs dynamiques. Cependant nous avons
+ besoin d'un peu plus. Nous ne voulons pas que les programmeurs
+ s'occupent de la présentation HTML du TOUT, mais cela est pratiquement
+ inévitable. Par exemple, si un designer veut des couleurs d'arrière plan
+ différentes pour alterner entre différents blocs dynamiques, il est nécessaire
+ que ce dernier travaille avec le programmeur. Nous avons aussi besoin que les
+ designers soient capables de travailler avec leurs propres fichiers
+ de configuration pour y récupérer des variables, exploitables dans leurs
+ templates. Et la liste est longue.
+
+
+ Fin 1999, nous avons commencé à écrire une spécification pour un moteur de
+ template. Une fois la spécification terminée,
+ nous avons commencé à travailler sur un moteur de template écrit
+ en C qui pourrait, avec un peu de chance, être inclus à PHP.
+ Non seulement nous avons rencontré des problèmes techniques complexes,
+ mais nous avons participés à de nombreux débats sur ce que devait
+ et ce que ne devait pas faire un moteur de template. De cette expérience nous avons
+ décidé qu'un moteur de template se devait d'être écrit sous la forme d'une
+ classe PHP, afin que quiconque puisse l'utiliser à sa convenance. Nous
+ avons donc réalisé un moteur de template qui se contentait de faire cela,
+ et SmartTemplate a vu le jour (note : cette
+ classe n'a jamais été soumise au public). C'était une classe qui
+ faisait pratiquement tout ce que nous voulions : substitution de variables,
+ inclusion d'autres templates, intégration avec des fichiers de configuration,
+ intégration de code PHP, instruction 'if' basique et une gestion plus robuste
+ des blocks dynamiques imbriqués. Elle faisait tout cela avec des expressions
+ rationnelles et le code se révéla, comment dire, impénétrable. De plus, elle était
+ relativement lente pour les grosses applications à cause de l'analyse
+ et du travail sur les expressions rationnelles qu'elle devait faire à chaque
+ exécution. Le plus gros problème du point de vue du programmeur était
+ tout le travail nécessaire en amont, dans le script PHP, pour configurer
+ et exécuter les templates, et les blocs dynamiques. Comment rendre tout ceci
+ plus simple ?
+
+
+ Puis vint la vision de ce que devait devenir Smarty. Nous
+ savons combien le code PHP peut être rapide sans le coût
+ d'analyse des templates. Nous savons aussi combien fastidieux
+ et décourageant peut paraître le langage pour le designer moyen, et que
+ cela peut être remplacé par une syntaxe spécifique, beaucoup
+ plus simple. Et si nous combinions les deux forces ? Ainsi, Smarty
+ était né...
+
+
diff --git a/docs/fr/programmers.sgml b/docs/fr/programmers.sgml
new file mode 100644
index 00000000..92579a9c
--- /dev/null
+++ b/docs/fr/programmers.sgml
@@ -0,0 +1,3090 @@
+
+ Smarty pour les programmeurs
+
+
+
+ Constantes
+
+
+
+ SMARTY_DIR
+
+ Il doit s'agir du chemin complet du répertoire où
+ se trouvent les fichiers classes de Smarty.
+ S'il n'est pas défini, Smarty essaiera alors d'en
+ déterminer automatiquement la valeur.
+ S'il est défini, le chemin doit se terminer par un slash.
+
+
+
+ SMARTY_DIR
+
+// définit le chemin du répertoire de Smarty
+define("SMARTY_DIR","/usr/local/lib/php/Smarty/");
+
+require_once(SMARTY_DIR."Smarty.class.php");
+
+
+
+
+
+ Variables
+
+
+ $template_dir
+
+ C'est le nom par défaut du répertoire des templates.
+ Si vous ne spécifiez aucun chemin lors de l'utilisation de templates, Smarty
+ les cherchera à cet emplacement.
+ Par défaut, il s'agit de "./templates", ce qui signifie
+ qu'il va chercher le répertoire templates
+ dans le répertoire où se trouve le script PHP en cours d'exécution.
+
+
+
+ Note technique
+
+ Il n'est pas conseillé de mettre ce répertoire
+ dans l'arborescence Web.
+
+
+
+
+ $compile_dir
+
+ C'est le nom du répertoire où se trouvent les templates
+ compilés. Par défaut, il s'agit de "./templates_c",
+ ce qui signifie que Smarty va chercher ce répertoire
+ dans le même répertoire que le script PHP en cours d'exécution.
+
+
+ Note technique
+
+ Ce réglage doit être soit un chemin absolu, soit un chemin
+ relatif. include_path n'est pas utilisé pour écrire des fichiers.
+
+
+
+ Note technique
+
+ Il n'est pas conseillé de mettre ce répertoire
+ sous la racine de l'arborescence Web.
+
+
+
+
+ $config_dir
+
+ Il s'agit du répertoire utilisé pour stocker les
+ fichiers de configuration utilisés dans les templates.
+ La valeur par défaut est "./configs", ce qui signifie
+ que Smarty va chercher ce répertoire
+ dans le même répertoire que le script PHP qui s'exécute.
+
+
+ Note technique
+
+ Il n'est pas conseillé de mettre ce répertoire
+ sous la racine de l'arborescence Web.
+
+
+
+
+ $plugins_dir
+
+ Ce sont les répertoire dans lesquels Smarty ira chercher les plugins
+ dont il a besoin. La valeur par défaut est "plugins" sous le
+ répertoire SMARTY_DIR. Si vous donnez un chemin relatif, Smarty
+ regardera d'abord relativement au SMARTY_DIR, puis relativement au rtc (répertoire
+ de travail courant), puis relativement à chaque entrée de votre répertoire
+ d'inclusion PHP.
+
+
+ Note technique
+
+ Pour des raisons de performances, ne réglez pas votre plugins_dir
+ pour qu'il utilise votre include_path PHP. Utilisez un
+ chemin absolu ou un chemin relatif à SMARTY_DIR ou au rtc.
+
+
+
+
+ $debugging
+
+ Cela active la
+ console de débogage.
+ La console est une fenêtre javascript qui vous informe des templates
+ inclus et des variables assignées dans la page courante.
+
+
+
+ $debug_tpl
+
+ C'est le nom du fichier template utilisé pour la
+ console de débuggage. Par défaut debug.tpl, il se situe dans SMARTY_DIR
+
+
+
+ $debugging_ctrl
+
+ Cela permet d'avoir différents moyens pour activer
+ le débogage. URL signifie que si SMARTY_DEBUG se
+ trouve dans QUERY_STRING, le débuggage
+ est activé à l'invocation du script. Si $debugging
+ est à vrai, cette valeur est sans effet.
+
+
+
+ $global_assign
+
+ C'est une liste de variable qui sont toujours
+ implicitement assignées au moteur de templates.
+ Ceci est commode pour rendre des variables globales
+ ou des variables du serveur accessibles à tous les templates
+ plutôt que de devoir les assigner à la main. Chaque élément
+ de $global_assign doit être soit le nom de la variable
+ globale, soit une paire clef/valeur, où clef est le
+ nom du tableau global et valeur le tableau de variable
+ assignées depuis ce tableau global.
+ $SCRIPT_NAME est globalement assigné par défaut depuis
+ $HTTP_SERVER_VARS.
+
+
+ Note technique
+
+ On peut accéder aux variables du serveur avec la variable
+ $smarty, par exemple {$smarty.server.SCRIPT_NAME}.
+ Se reporter à la section sur la variable
+ $smarty.
+
+
+
+
+ $undefined
+
+ Cela règle la valeur de $undefined, null par défaut.
+ N'est actuellement utilisé que pour initialiser
+ des variables non-définies dans $global_assign à des
+ valeurs par défaut.
+
+
+
+ $autoload_filters
+
+ Si vous désirez charger des filtres à chaque invocation
+ de templates, vous pouvez le spécifier en utilisant cette
+ variable. Les types de filtres et les valeurs sont des
+ tableaux comportant le nom des filtres.
+
+
+$smarty->autoload_filters = array('pre' => array('trim', 'stamp'),
+ 'output' => array('convert'));
+
+
+
+
+
+ $compile_check
+
+ A chaque invocation de l'application PHP, Smarty fait
+ un test pour voir si le template courant a été modifié
+ (date de dernière modification différente) depuis sa
+ dernière compilation. S'il a changé, le template est recompilé.
+ Si le template n'a pas encore été compilé, il le sera
+ quelle que soit la valeur ce réglage.
+ Par défaut cette valeur est à vrai. Quand
+ une application est mise en production (les templates
+ ne changent plus), cette vérification n'est pas nécessaire.
+ Assurez-vous de mettre $compile_check à "false" pour des performances
+ maximales. Notez que si vous mettez ce paramètre à "false" et qu'un
+ template est modifié, vous ne verrez *pas* le changement
+ car le template ne sera *pas* recompilé. Si le processus de cache
+ est activé et que $compile_check l'est aussi, alors les fichiers
+ du cache seront regénérés si un template concerné ou un fichier de
+ configuration concerné est modifié. Voir aussi $force_compile ou clear_compiled_tpl.
+
+
+
+
+ $force_compile
+
+ Cela oblige Smarty à (re)compiler les templates à chaque
+ invocation. Ce réglage supplante $compile_check. Par défaut, il
+ est désactivé. Ceci est commode pour le développement et le
+ débogage mais ne devrait jamais être utilisé dans un environnment
+ de production. Si le système de cache est actif, les
+ fichiers du cache seront regénérés à chaque appel.
+
+
+
+ $caching
+
+ Ce paramètre demande à Smarty de mettre ou non en cache la sortie des
+ templates.
+ Par défaut ce réglage est à 0 (désactivé). Si vos templates
+ génèrent du contenu redondant, il est conseillé d'activer le
+ cache. Cela permettra un gain de performance conséquent.
+ Vous pouvez aussi avoir de nombreux fichiers de cache pour un même template.
+ Une valeur de 1 ou 2 active le cache. 1 indique à Smarty d'utiliser
+ la variable $cache_lifetime pour déterminer si le fichier de cache a expiré.
+ Une valeur de 2 indique à Smarty d'utiliser la valeur
+ $cache_lifetime spécifiée à la génération du cache. Ainsi vous pouvez régler
+ la durée de vie d'un fichier de cache avant de récupérer le template pour avoir
+ un certain contrôle quand ce fichier en particulier expire. Voir
+ aussi is_cached.
+
+
+ Si $compile_check est actif, le contenu du cache sera regénéré
+ si un des templates ou un des fichiers de configuration qui fait partie
+ de ce fichier de cache a été modifié. Si $force_compile est actif, le contenu
+ du cache est toujours regénéré.
+
+
+
+ $cache_dir
+
+ Il s'agit du nom du répertoire où les caches des templates
+ sont stockés. Par défaut il s'agit de "./cache", ce qui signifie
+ que Smarty va chercher ce répertoire
+ dans le même répertoire que le script PHP en cours d'exécution.
+
+
+ Note technique
+
+ Ce réglage doit être soit un chemin absolu, soit un chemin
+ relatif. include_path n'a aucune influence lors de l'écriture des fichiers.
+
+
+
+ Technical Note
+
+ Il n'est pas conseillé de mettre ce répertoire
+ dans l'arborescence Web.
+
+
+
+
+ $cache_lifetime
+
+ Il s'agit de la durée en secondes pendant laquelle un cache de template
+ est valide. Une fois cette durée dépassée, le cache est regénéré.
+ $caching doit être à "true" pour que $cache_lifetime ait une
+ quelconque utilité. Avec une valeur de -1, le cache n'expire jamais.
+ Avec une valeur de 0, le cache est toujours regénéré (utile
+ à des fins de tests seulement. Une meilleure façon de désactiver
+ le cache est de mettre $caching à "false").
+
+
+ Si $force_compile est
+ activé, les fichiers du cache seront regénérés à chaque fois,
+ désactivant ainsi le cache. Vous pouvez effacer tous les fichiers du cache
+ avec la function
+ clear_all_cache()
+ ou de façon individuelle (ou groupée)
+ avec la fonction clear_cache().
+
+
+ Note technique
+
+ Si vous souhaitez donner à certains templates leur propre durée de vie
+ en cache, vous pouvez le faire en réglant
+ $caching à 2,
+ puis $cache_lifetime à une unique valeur juste avant d'appeler
+ display ou fetch().
+
+
+
+
+ $cache_handler_func
+
+ Vous pouvez utiliser votre propre fonction de gestion du cache plutôt que
+ d'utiliser celle livrée avec Smarty.
+ Référez-vous à la section sur la fonction de gestion de cache
+ personnalisée pour plus de détails.
+
+
+
+ $cache_modified_check
+
+ Si cette variable est à vrai, Smarty respectera l'en-tête
+ If-Modified-Since envoyé par le client. Si la date de dernière
+ modification du fichier de cache n'a pas changé depuis la dernière
+ visite, alors un en-tête "304 Not Modified" sera envoyé à la place
+ du contenu. Cela ne fonctionne qu'avec du contenu mis en cache hors de la
+ balise insert.
+
+
+
+ $config_overwrite
+
+ Si cette variable est à vrai, les variables lues dans les fichiers
+ de configuration peuvent s'écraser entre elles. Sinon les variables
+ seront mises dans un tableau. Très utile si vous voulez stocker
+ des tableaux de données dans des fichiers de configuration, listez
+ simplement chaque élément plusieurs fois. Mise à faux par défaut.
+
+
+
+ $config_booleanize
+
+ Si cette variable est à vrai, les valeurs on/true/yes et off/false/no
+ dans les fichiers de configuration sont automitiquement converties
+ en booléen. De cette façon vous pouvez utiliser ces valeurs dans le
+ template de la façon suivante : {if #foobar#} ... {/if}. Si foobar
+ est à on, true ou yes, l'instruction {if} sera exécutée. vrai
+ par défaut.
+
+
+
+ $config_read_hidden
+
+ Si cette variable est à vrai, les sections cachés (dont les noms
+ commencent par un point) dans les fichiers de configuration peuvent
+ être lues depuis les templates. On laisse habituellement cela à faux, de
+ cette façon vous pouvez stocker des données sensibles dans les fichiers
+ de configuration, comme par exemple des paramètres de base de données,
+ sans vous soucier de la façon dont les templates les chargent.
+ Mise à faux par défaut.
+
+
+
+ $config_fix_newlines
+
+ Si cette variable est mise à vrai, les caractères de nouvelles lignes mac et dos
+ (\r et \r\n) sont convertis en \n quand ils sont analysés. vrai par défaut.
+
+
+
+ $default_template_handler_func
+
+ Cette fonction est appelée quand un template ne peut pas être
+ obtenu avec sa ressource.
+
+
+
+ $php_handling
+
+ Indique à Smarty comment interpréter le code PHP
+ intégré dans les templates. Il y a quatre valeurs possibles, par
+ défaut SMARTY_PHP_PASSTHRU. Notez que cela n'affecte PAS le code
+ PHP entouré des balises
+ {php}{/php}
+ dans le template.
+
+
+ SMARTY_PHP_PASSTHRU - Smarty écrit les balises
+ telles quelles.
+ SMARTY_PHP_QUOTE - Smarty transforme les balises
+ en entités HTML.
+ SMARTY_PHP_REMOVE - Smarty supprime les balises
+ des templates.
+ SMARTY_PHP_ALLOW - Smarty exécute les balises
+ comme du code PHP.
+
+
+ NOTE : Intégrer du code PHP dans les templates est vivement
+ déconseillé. Préférez les
+ fonctions utilisateurs
+ ou les modificateurs de variables.
+
+
+
+ $security
+
+ Cette variable est à faux par défaut. $security est de rigueur
+ quand vous n'êtes pas complètement sûr des personnes qui éditent les templates
+ (par ftp par exemple) et que vous voulez réduire le risque que
+ la sécurité du système soit compromise par le language de template.
+ Activer cette option de sécurité applique les règles suivantes
+ au langage de template, à moins que $security_settings ne spécifie
+ le contraire :
+
+
+ Si $php_handling est réglée à SMARTY_PHP_ALLOW,
+ cela est implicitement changé à SMARTY_PHP_PASSTHRU.
+ Les fonctions PHP ne sont pas autorisées dans les
+ instructions IF, à part celles déclarées dans
+ $security_settings.
+ Les templates ne peuvent être inclus que depuis
+ des répertoires listés dans le tableau $security_dir.
+ Les fichiers locaux ne peuvent être récupérés que depuis
+ les répertoires listés dans le tableau $security_dir en
+ utilisant {fetch}.
+ Les balises {php}{/php} ne sont pas autorisées.
+ Les fonctions PHP ne sont pas autorisées en tant
+ modificateurs, à part celles spécifiées dans $security_settings.
+
+
+
+ $secure_dir
+
+ Il s'agit d'un tableau contenant tous les répertoires locaux qui sont
+ considérés comme sécurisés. {include} et {fetch} l'utilisent quand
+ la sécurité est activée.
+
+
+
+ $security_settings
+
+ Ces réglages servent à écraser ou spécifier les paramètres de sécurité
+ quand celle-ci est activée. Les réglages possibles sont les suivants :
+
+
+ PHP_HANDLING - true/false. Si vrai, le
+ réglage $php_handling n'est pas vérifié.
+ IF_FUNCS - Le tableau des noms de fonctions
+ PHP autorisées dans les intructions IF.
+ INCLUDE_ANY - true/false. Si vrai,
+ les templates peuvent être inclus de n'importe où, quelque soit
+ le contenu de $secure_dir.
+ PHP_TAGS - true/false. Si vrai,
+ les balises {php}{/php} sont autorisées dans les templates.
+ MODIFIER_FUNCS - Le tableau des noms de fonctions
+ autorisées à être utilisées comme modificateurs de variables.
+
+
+
+ $trusted_dir
+
+ $trusted_dir n'est utilisée lorsque $security est activée. C'est un
+ tableau de tous les répertoires qui peuvent être considérés comme sûrs.
+ Les répertoires sûrs sont ceux qui contiennent des scripts PHP qui
+ sont exécutés directement depuis les templates avec
+ {include_php}.
+
+
+
+ $left_delimiter
+
+ Il s'agit du délimiteur gauche utilisé par le moteur de templates. La
+ valeur par défaut est "{".
+
+
+
+ $right_delimiter
+
+ Il s'agit du délimiteur droit utilisé par le moteur de templates.
+ La valeur par défaut est "}".
+
+
+
+ $compiler_class
+
+ Spécifie le nom de la classe du compilateur qui va être utilisée pour
+ compiler les templates. Le compilateur par défaut est
+ 'Smarty_Compiler'. Réservé aux utilisateurs avancés.
+
+
+
+ $request_vars_order
+
+ L'ordre dans lequel les variables de requêtes sont enregistrées,
+ identique à variables_order dans php.ini.
+
+
+
+ $compile_id
+
+ Identifiant persistant du compilateur. On peut passer le même compile_id
+ à chaque appel de fonction mais une alternative consiste à régler ce
+ compile_id, qui sera utilisé implicitement.
+
+
+
+ $use_sub_dirs
+
+ Régler cela à faux si votre environnement PHP n'autorise pas Smarty à créer
+ des sous-répertoires. Les sous-répertoires sont efficaces, utilisez-les quand
+ vous le pouvez.
+
+
+
+ $default_modifiers
+
+ Il s'agit d'un tableau de modificateurs utilisé pour assigner
+ une valeur par défaut à chaque variable dans un template.
+ Par exemple, pour par défaut échapper les caractères HTML de chaque variable,
+ utilisez array('escape:"htmlall"'); Pour rendre une variable indépendante
+ des modificateurs par défaut, passez-lui en paramètre le modificateur
+ "nodefaults" : {$var|nodefaults}.
+
+
+
+
+
+ Méthodes
+
+ append
+
+
+ void append
+ mixed var
+
+
+ void append
+ string varname
+ mixed var
+
+
+ void append
+ string varname
+ mixed var
+ boolean merge
+
+
+
+ Utilisée pour ajouter un élément à un tableau assigné. Si vous utilisez
+ cette fonction avec une chaîne de caractère, elle est convertie en
+ tableau auquel on ajoute ensuite l'élément. Vous pouvez explicitement passer
+ des paires nom/valeur. Si vous passez le troisième paramètre
+ (optionel) à vrai, la valeur sera fusionnée avec le tableau plutôt que
+ d'être ajoutée.
+
+
+ Note technique
+
+ Le paramètre de fusion respecte les clés des tableaux, ainsi si vous
+ fusionnez deux tableaux indexés numériquement, ils pourront s'écraser
+ l'un l'autre ou donner des clés qui ne se suivent pas. Cela diffère
+ donc de la fonction PHP array_merge() qui supprime les clés numériques
+ et les renumérote.
+
+
+
+ append
+
+// passe des paires nom/valeur
+$smarty->append("Name","Fred");
+$smarty->append("Address",$address);
+
+// passe un tableau associatif
+$smarty->append(array("city" => "Lincoln","state" => "Nebraska"));
+
+
+
+ append_by_ref
+
+
+ void append_by_ref
+ string varname
+ mixed var
+
+
+ void append_by_ref
+ string varname
+ mixed var
+ boolean merge
+
+
+
+ Utilisée pour ajouter des valeurs à un template par référence plutôt que
+ par copie. Si vous ajoutez une variable par référence puis changez sa
+ valeur, le changement est aussi répercuté sur la valeur assignée.
+ Pour les objets, append_by_ref ne fait pas de copie en mémoire de l'objet
+ assigné. Voir la documentation PHP pour plus d'informations sur les
+ références de variable.
+ Si vous passez le troisième paramètre à vrai, la valeur sera fusionnée
+ avec le tableau courant plutôt que d'être ajoutée.
+
+
+ Note technique
+
+ Le paramètre de fusion respecte les clés des tableaux, ainsi si vous fusionnez
+ deux tableaux indexés numériquement, ils pourront s’écraser l’un l’autre
+ ou donner des clés qui ne se suivent pas. Cela diffère donc de la fonction
+ PHP array_merge() qui supprime les clés numériques et les renumérote.
+
+
+
+ append_by_ref
+
+// ajoute des paires nom/valeur
+$smarty->append_by_ref("Name",$myname);
+$smarty->append_by_ref("Address",$address);
+
+
+
+ assign
+
+
+ void assign
+ mixed var
+
+
+ void assign
+ string varname
+ mixed var
+
+
+
+ Utilisée pour assigner des valeurs aux templates. Vous pouvez
+ explicitement passer des paires nom/valeur, ou des tableaux
+ associatifs contenant des paires nom/valeur.
+
+
+ assign
+
+// passe des paires nom/valeur
+$smarty->assign("Name","Fred");
+$smarty->assign("Address",$address);
+
+// passe un tableau associatif
+$smarty->assign(array("city" => "Lincoln","state" => "Nebraska"));
+
+
+
+ assign_by_ref
+
+
+ void assign_by_ref
+ string varname
+ mixed var
+
+
+
+ Utilisée pour assigner des valeurs aux templates par référence plutôt
+ que par copie. Référez-vous au manuel PHP pour une explication plus précise
+ sur les références des variables.
+
+
+ Note technique
+
+ Si vous assignez une variable par référence puis changez sa
+ valeur, le changement est aussi répercuté sur la valeur assignée.
+ Pour les objets, assign_by_ref ne fait pas de copie en mémoire de l'objet
+ assigné. Référez-vous au manuel PHP pour une explication plus précise sur
+ les références de variable.
+
+
+
+ assign_by_ref
+
+// passe des paires noms/valeurs
+$smarty->assign_by_ref("Name",$myname);
+$smarty->assign_by_ref("Address",$address);
+
+
+
+ clear_all_assign
+
+
+ void clear_all_assign
+
+
+
+
+ Utilisée pour effacer les valeurs de toutes les variables assignées.
+
+
+clear_all_assign
+
+// efface toutes les variables assignées
+$smarty->clear_all_assign();
+
+
+
+ clear_all_cache
+
+
+ void clear_all_cache
+ int expire time
+
+
+
+ Utilisée pour effacer les fichiers de cache des templates. Vous pouvez passer un
+ paramètre optionnel afin d'indiquer l'âge minimun que doivent avoir
+ les fichiers de cache pour qu'ils soient effacés.
+
+
+clear_all_cache
+
+// efface le cache
+$smarty->clear_all_cache();
+
+
+
+ clear_assign
+
+
+ void clear_assign
+ string var
+
+
+
+ Efface la valeur d'une variable assignée. Il peut s'agir
+ d'une simple valeur ou d'un tableau de valeur.
+
+
+clear_assign
+
+// efface une variable
+$smarty->clear_assign("Name");
+
+// efface plusieurs variables
+$smarty->clear_assign(array("Name","Address","Zip"));
+
+
+
+ clear_cache
+
+
+ void clear_cache
+ string template
+ string cache id
+ string compile id
+ int expire time
+
+
+
+ Utilisée pour nettoyer le(s) fichier(s) de cache d'un template en particulier.
+ Si vous avez plusieurs fichiers de cache pour ce template vous
+ pouvez en spécifier un en particulier en passant son identifiant
+ en deuxième paramètre. Vous pouvez aussi passer un identifiant
+ de compilation en troisième paramètre. Vous pouvez grouper des
+ templates ensemble afin qu'ils puissent être supprimés en groupe.
+ Référez-vous à la section sur le
+ cache
+ pour plus d'informations. Vous pouvez passer un quatrième paramètre
+ pour indiquer un âge minimum en secondes que le fichier en cache doit
+ avoir avant d'être effacé.
+
+
+clear_cache
+
+// efface le fichier de cache de ce template
+$smarty->clear_cache("index.tpl");
+
+// efface un fichier de cache grâce à son identifiant de cache
+$smarty->clear_cache("index.tpl","CACHEID");
+
+
+
+ clear_compiled_tpl
+
+
+ void clear_compiled_tpl
+ string tpl_file
+
+
+
+ Utilisée pour effacer la version compilée du template spécifié ou
+ de tous les templates si aucun n'est spécifié. Cette fonction
+ est destinée à un usage avancé et n'est pas habituellement utilisée.
+
+
+clear_compiled_tpl
+
+// efface la version compilée du template spécifié
+$smarty->clear_compiled_tpl("index.tpl");
+
+// efface tout le contenu du répertoire des templates compilés
+$smarty->clear_compiled_tpl();
+
+
+
+ clear_config
+
+
+ void clear_config
+ string var
+
+
+
+ Utilisée pour effacer toutes les variables de configuration s'étant
+ vues assigner une valeur. Si une variable est spécifiée, seule cette
+ variable est effacée.
+
+
+clear_config
+
+// efface toutes les variables de configuration assignées
+$smarty->clear_config();
+
+// efface une seule variable
+$smarty->clear_config('foobar');
+
+
+
+ config_load
+
+
+ void config_load
+ string file
+ string section
+
+
+
+ Utilisée pour charger des données d'un fichier de config et les
+ assigner à un template. Cette fonction fonctionne exactement comme
+ la fonction de template config_load.
+
+
+ Note technique
+
+ Comme pour Smarty 2.4.0, les variables de templates assignées
+ sont conservées entre chaque appel à fetch et display.
+ Les variables de configuration chargées avec config_load sont
+ globales. Les fichiers de config sont aussi compilés pour une
+ exécution plus rapide et respecte les réglages de force_compile et de compile_check.
+
+
+
+config_load
+
+// charge les variables de configuration et les assigne
+$smarty->config_load('my.conf');
+
+// charge une section
+$smarty->config_load('my.conf','foobar');
+
+
+
+ display
+
+
+ void display
+ string template
+ string cache_id
+ string compile_id
+
+
+
+ Utilisée pour afficher un template. Il faut fournir un type et un
+ chemin de ressource template
+ valides. Vous pouvez passer en second paramètre un identifiant
+ de fichier de cache. Reportez-vous à la section
+ cache pour plus de renseignements.
+
+
+ Le troisième paramètre optionnel est un identifiant de compilation.
+ Cela s'avère utile quand vous voulez compiler différentes versions
+ d'un même template, pour par exemple avoir des templates
+ compilés séparés pour différents langages. Une autre utilité de ce
+ paramètre est le cas où vous utilisez plus d'un $template_dir mais un seul
+ $compile_dir, car certains templates avec le même nom s'écraseraient
+ entre eux. Vous pouvez aussi régler la variable $compile_id une seule
+ fois au lieu de la passer à chaque appel.
+
+
+affichage
+
+include("Smarty.class.php");
+$smarty = new Smarty;
+$smarty->caching = true;
+
+// ne fait un appel à la base de données que si le fichier
+// de cache n'existe pas
+if(!$smarty->is_cached("index.tpl"))
+{
+
+ // quelques données
+ $address = "245 N 50th";
+ $db_data = array(
+ "City" => "Lincoln",
+ "State" => "Nebraska",
+ "Zip" = > "68502"
+ );
+
+ $smarty->assign("Name","Fred");
+ $smarty->assign("Address",$address);
+ $smarty->assign($db_data);
+
+}
+
+// display the output
+$smarty->display("index.tpl");
+
+
+ Utilisez la syntaxe des ressources templates
+ pour afficher des fichiers en-dehors du répertoire
+ $template_dir
+
+
+
+exemples de fonction d'affichage de ressources templates
+
+// chemin absolu
+$smarty->display("/usr/local/include/templates/header.tpl");
+
+// chemin absolu (pareil)
+$smarty->display("file:/usr/local/include/templates/header.tpl");
+
+// chemin absolu Windows (on DOIT utiliser le préfixe "file:")
+$smarty->display("file:C:/www/pub/templates/header.tpl");
+
+// inclue à partir de la ressource template "db"
+$smarty->display("db:header.tpl");
+
+
+
+
+ fetch
+
+
+ string fetch
+ string template
+ string cache_id
+ string compile_id
+
+
+
+ Utilisée pour renvoyer le résultat du template plutôt que de l'afficher.
+ Il faut passer un type et un chemin de ressource template
+ valides. Vous pouvez passer un identifiant de cache en deuxième
+ paramètre. Reportez-vous à la section cache
+ pour plus de renseignements.
+
+
+ Un troisième paramètre optionnel est un identifiant de compilation.
+ Cela s'avère utile quand vous voulez compiler différentes versions
+ d'un même template, pour par exemple avoir des templates
+ compilés séparés pour différents langages. Une autre utilité de ce
+ paramètre est le cas où vous utilisez plus d'un $template_dir
+ mais un seul $compile_dir, car certains templates avec le même nom
+ s'écraseraient entre eux. Vous pouvez aussi régler la variable $compile_id une seule
+ fois plutôt que de la passer à chaque appel.
+
+
+fetch
+
+include("Smarty.class.php");
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+// ne fait un appel à la base de données que si le fichier
+// de cache n'existe pas
+if(!$smarty->is_cached("index.tpl"))
+{
+
+ // quelques données
+ $address = "245 N 50th";
+ $db_data = array(
+ "City" => "Lincoln",
+ "State" => "Nebraska",
+ "Zip" = > "68502"
+ );
+
+ $smarty->assign("Name","Fred");
+ $smarty->assign("Address",$address);
+ $smarty->assign($db_data);
+
+}
+
+// récupère le résultat
+$output = $smarty->fetch("index.tpl");
+
+// fait quelque chose avec $output
+
+echo $output;
+
+
+
+ get_config_vars
+
+
+ array get_config_vars
+ string varname
+
+
+
+ Retourne la valeur de la variable de configuration passée en paramètre.
+ Si aucun paramètre n'est donné, un tableau de toutes les variables de
+ configuration chargées est renvoyé.
+
+
+get_config_vars
+
+// récupère la variable de configuration chargée 'foo'
+$foo = $smarty->get_config_vars('foo');
+
+// récupère toutes les variables de configuration chargées
+$config_vars = $smarty->get_config_vars();
+
+// les affiche à l'écran
+print_r($config_vars);
+
+
+
+ get_registered_object
+
+
+ array get_registered_object
+ string object_name
+
+
+
+ Retourne la référence d'un objet enregistré. Utile quand vous
+ voulez accéder directement à un objet enregistré avec une
+ fonction utilisateur.
+
+
+get_registered_object
+
+function smarty_block_foo($params, &$smarty) {
+ if (isset[$params['object']]) {
+ // récupère la référence de l'objet enregistré
+ $obj_ref =& $smarty->get_registered_object($params['object']);
+ // $obj_ref est maintenant une référence vers l'objet
+ }
+}
+
+
+
+ get_template_vars
+
+
+ array get_template_vars
+ string varname
+
+
+
+ Retourne la valeur assignée passée en paramètre. Si aucun paramètre
+ n'est donné, un tableau de toutes les variables assignées est
+ renvoyé.
+
+
+get_template_vars
+
+// récupère la variable 'foo' assignée au template
+// get assigned template var 'foo'
+$foo = $smarty->get_template_vars('foo');
+
+// récupère toutes les variables assignées à ce template
+$tpl_vars = $smarty->get_template_vars();
+
+// les affiche à l'écran
+print_r($tpl_vars);
+
+
+
+ is_cached
+
+
+ void is_cached
+ string template
+ [string cache_id]
+
+
+
+ Retourne vrai s'il y a un fichier de cache valide pour ce template.
+ Cela fonctionne seulement si caching est à vrai.
+
+
+is_cached
+
+$smarty->caching = true;
+
+if(!$smarty->is_cached("index.tpl")) {
+ // faire des requêtes base de données et assigner
+ // des variables ici.
+}
+
+$smarty->display("index.tpl");
+
+
+ Vous pouvez aussi passer en second paramètre un identifiant
+ de cache au cas où vous voudriez plusieurs fichiers de cache
+ pour ce template.
+
+
+is_cached with multiple-cache template
+
+$smarty->caching = true;
+
+if(!$smarty->is_cached("index.tpl","FrontPage")) {
+ // faire des requêtes base de données et assigner
+ // des variables ici.
+}
+
+$smarty->display("index.tpl","FrontPage");
+
+
+
+ load_filter
+
+
+ void load_filter
+ string type
+ string name
+
+
+
+ Cette fonction peut être utilisée pour charger un plugin
+ de filtrage. Le premier argument spécifie le type du filtre
+ et peut prendre l'une des valeurs suivantes : 'pre', 'post'
+ ou 'output'. Le second argument spécifie le nom du plugin
+ de filtrage, par exemple 'trim'.
+
+
+Chargement de plugins de filtrage
+
+$smarty->load_filter('pre', 'trim'); // charge le filtre 'trim' de type 'pre'
+$smarty->load_filter('pre', 'datefooter'); // charge un autre filtre de type 'pre' appelé 'datefooter'
+$smarty->load_filter('output', 'compress'); // charge le filtre 'compress' de type 'output'
+
+
+
+ register_block
+
+
+ void register_block
+ string name
+ string impl
+
+
+
+ Utilisée pour déclarrer dynamiquement des plugins de fonction
+ de blocs. Il faut passer en paramètre le nom de la fonction
+ de blocs, suivi du nom de la fonction PHP qui l'implémente.
+
+
+register_block
+
+/* PHP */
+$smarty->register_block("translate", "do_translation");
+
+function do_translation ($params, $content, &$smarty) {
+ if ($content) {
+ $lang = $params['lang'];
+ // fait de la traduction avec la variable $content
+ echo $translation;
+ }
+}
+
+{* template *}
+{translate lang="br"}
+ Hello, world!
+{/translate}
+
+
+
+ register_compiler_function
+
+
+ void register_compiler_function
+ string name
+ string impl
+
+
+
+ Utilisée pour déclarer dynamiquement un plugin de fonction
+ de compilation. Il faut passer en paramètres le nom de la fonction
+ de compilation, suivi par la fonction PHP qui
+ l'implémente.
+
+
+
+ register_function
+
+
+ void register_function
+ string name
+ string impl
+
+
+
+ Utilisée pour déclarer dynamiquement des plugins de fonction
+ de templates. Il faut passer en paramètres le nom de la fonction
+ de templates, suivi par le nom de la fonction PHP qui l'implémente.
+
+
+register_function
+
+$smarty->register_function("date_now", "print_current_date");
+
+function print_current_date ($params) {
+ extract($params);
+ if(empty($format))
+ $format="%b %e, %Y";
+ echo strftime($format,time());
+}
+
+// vous pouvez maintenant utiliser ceci dans Smarty pour afficher
+// la date actuelle : {date_now} ou {date_now format="%Y/%m/%d"}
+// pour la formater
+
+
+
+ register_modifier
+
+
+ void register_modifier
+ string name
+ string impl
+
+
+
+ Utilisée pour déclarer dynamiquement un plugin de modificateur.
+ Il faut passer en paramètre le nom du modificateur de variables,
+ suivi de la fonction PHP qui l'implémente.
+
+
+register_modifier
+
+// associons la fonction PHP stripslashes à un modificateur Smarty.
+
+$smarty->register_modifier("sslash","stripslashes");
+
+// vous pouvez maintenant utiliser {$var|sslash} pour supprimer les slash des variables
+
+
+
+ register_object
+
+
+ void register_object
+ string object_name
+ object $object
+ array allowed methods/properties
+ boolean format
+
+
+
+ Utilisée pour enregistrer un objet à utiliser dans un template.
+ Reportez-vous à la section
+ objet de
+ ce manuel pour des exemples.
+
+
+
+ register_outputfilter
+
+
+ void register_outputfilter
+ string function_name
+
+
+
+ Utilisée pour déclarer dynamiquement des filtres de sortie, pour
+ agir sur la sortie d'un template avant qu'elle ne soit affichée.
+ Reportez-vous à la section
+ filtres de sortie pour plus d'information sur le sujet.
+
+
+
+ register_postfilter
+
+
+ void register_postfilter
+ string function_name
+
+
+
+ Utilisée pour déclarer dynamiquement des filtres de post-compilation pour y faire
+ passer des templates une fois qu'ils ont été compilés. Reportez-vous
+ à la section
+ filtres de post-compilation de templates
+ pour avoir plus de renseignements sur la façon de paramétrer les fonctions
+ de post-compilation.
+
+
+
+ register_prefilter
+
+
+ void register_prefilter
+ string function_name
+
+
+
+ Utilisée pour déclarer dynamiquement des filtres de pré-compilation pour y faire
+ passer des templates avant qu'ils ne soient compilés. Reportez-vous
+ à la section
+ filtres de pré-compilation de templates
+ pour avoir plus de renseignements sur la façon de paramétrer les fonctions
+ de pré-compilation.
+
+
+
+ register_resource
+
+
+ void register_resource
+ string name
+ array resource_funcs
+
+
+
+ Utilisée pour déclarer dynamiquement une ressource plugin
+ dans Smarty. Il faut passer en paramètre le nom de la ressource
+ et le tableau des fonctions PHP qui l'implémentent. Reportez-vous
+ à la section ressources templates
+ pour avoir plus d'informations sur la façon de paramétrer une fonction
+ récupérant des templates.
+
+
+register_resource
+
+$smarty->register_resource("db", array("db_get_template",
+ "db_get_timestamp",
+ "db_get_secure",
+ "db_get_trusted"));
+
+
+
+ trigger_error
+
+
+ void trigger_error
+ string error_msg
+ [int level]
+
+
+
+ Cette fonction peut-être utilisée pour afficher un message d'erreur
+ en utilisant Smarty. Le paramètre level
+ peut prendre l'une des valeures utilisées par la fonction PHP
+ trigger_error, i.e. E_USER_NOTICE, E_USER_WARNING, etc. Par défaut
+ il s'agit de E_USER_WARNING.
+
+
+
+
+ template_exists
+
+
+ bool template_exists
+ string template
+
+
+
+ Cette fonction vérifie si le template spécifié existe. Elle accepte
+ soit un chemin vers le template, soit une ressource de type
+ chaîne de caractères précisant le nom du template.
+
+
+
+ unregister_block
+
+
+ void unregister_block
+ string name
+
+
+
+ Utilisée pour désallouer dynamiquement un plugin de fonction
+ de blocs. Passez en paramètre le nom du bloc.
+
+
+
+ unregister_compiler_function
+
+
+ void unregister_compiler_function
+ string name
+
+
+
+ Utilisée pour désallouer dynamiquement un fonction de compilation.
+ Passez en paramètre le nom de la fonction de compilation.
+
+
+
+ unregister_function
+
+
+ void unregister_function
+ string name
+
+
+
+ Utilisée pour désallouer dynamiquement un plugin de fonction
+ de templates. Passez en paramètres le nom de la fonction de templates.
+
+
+unregister_function
+
+// nous ne voulons pas que les designers de templates aient accès
+// au système de fichiers.
+
+$smarty->unregister_function("fetch");
+
+
+
+ unregister_modifier
+
+
+ void unregister_modifier
+ string name
+
+
+
+ Utilisée pour désallouer dynamiquement un plugin modificateur de variable.
+ Passez en paramètre le nom du modificateur de templates.
+
+
+unregister_modifier
+
+// nous ne voulons pas que les designers de templates
+// suppriment les balises des élements
+
+$smarty->unregister_modifier("strip_tags");
+
+
+
+ unregister_object
+
+
+ void unregister_object
+ string object_name
+
+
+
+ Utilisée pour désallouer un objet.
+
+
+
+ unregister_outputfilter
+
+
+ void unregister_outputfilter
+ string function_name
+
+
+
+ Utilisée pour désallouer dynamiquement un filtre de sortie.
+
+
+
+ unregister_postfilter
+
+
+ void unregister_postfilter
+ string function_name
+
+
+
+ Utilisée pour désallouer dynamiquement un filtre de post-compilation.
+
+
+
+ unregister_prefilter
+
+
+ void unregister_prefilter
+ string function_name
+
+
+
+ Utilisée pour désallouer dynamiquement un filtre de pré-compilation.
+
+
+
+ unregister_resource
+
+
+ void unregister_resource
+ string name
+
+
+
+ Utilisée pour désallouer dynamiquement un plugin ressource.
+ Passez en paramètre le nom de la ressource.
+
+
+unregister_resource
+
+$smarty->unregister_resource("db");
+
+
+
+
+
+ Cache
+
+ Le cache est utilisée pour accélérer l'appel de display() ou de fetch() en sauvegardant leur résultat
+ dans un fichier. Si un fichier de cache est disponible lors d'un appel,
+ il sera affiché sans qu'il ne soit nécessaire de regénérer le résultat.
+ Le système de cache
+ peut accélérer les traitements de façon impressionnante, en particulier les
+ templates dont la compilation est très longue. Comme le résultat de
+ display() ou de fetch() est dans le cache, un fichier de cache peut
+ être composé de plusieurs fichiers de templates, plusieurs fichiers
+ de configuration, etc.
+
+
+ Comme les templates sont dynamiques, il est important de faire attention
+ à la façon dont les fichiers de cache sont générés, et pour combien de temps.
+ Si par exemple vous affichez la page d'accueil de votre site Web dont le
+ contenu ne change pas souvent, il peut être intéressant de mettre cette page
+ dans le cache pour une heure ou plus. A l'inverse, si vous affichez une page
+ de météo mises à jour toutes les minutes, mettre cette page en cache
+ n'a aucun sens.
+
+
+ Paramétrer le cache
+
+ La première chose à faire est d'activer le cache. Cela est fait en
+ mettant $caching = true
+ (ou 1).
+
+
+ activation du cache
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+$smarty->display('index.tpl');
+
+
+ Avec le cache activé, la fonction display('index.tpl') va afficher
+ le template mais sauvegardera par la même occasion une copie du résultat
+ dans un fichier (de cache) du répertoire
+ $cache_dir. Au prochain appel de
+ display('index.tpl'), le fichier de cache sera préféré à la réutilisation
+ du template.
+
+
+ Note technique
+
+ Les fichiers situés dans $cache_dir sont nommés de la même façon que les templates.
+ Bien qu'ils aient une extension ".php", ils ne sont pas vraiment exécutable.
+ N'éditez surtout pas ces fichiers !
+
+
+
+ Tout fichier de cache à une durée de vie limitée déterminée par $cache_lifetime. La valeur par
+ défaut est 3600 secondes, i.e. 1 heure. Une fois que cette durée est
+ dépassée, le cache est regénéré. Il est possible de donner
+ une durée d'expiration propre à chaque fichier de cache en réglant
+ $caching = 2.
+ Se reporter à la documentation de $cache_lifetime pour plus de
+ détails.
+
+
+ réglage individuel de cache_lifetime
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = 2; // régler la durée de vie individuellement
+
+// régle la durée de vie du cache à 15 minutes pour index.tpl
+$smarty->cache_lifetime = 300;
+$smarty->display('index.tpl');
+
+// régle la durée de vie du cache à 1 heure pour home.tpl
+$smarty->cache_lifetime = 3600;
+$smarty->display('home.tpl');
+
+// NOTE : le réglage suivant ne fonctionne pas quand $caching = 2. La durée de vie
+// du fichier de cache de home.tpl a déjà été réglée à 1 heure et ne respectera
+// plus la valeur de $cache_lifetime. Le cache de home.tpl expirera toujours
+// dans 1 heure.
+$smarty->cache_lifetime = 30; // 30 secondes
+$smarty->display('home.tpl');
+
+
+ Si $compile_check est actif,
+ chaque fichier de template et de configuration qui a un rapport
+ avec le fichier de cache sera vérifié pour détecter une éventuelle
+ modification. Si l'un de ces fichiers a été modifié depuis que le fichier de cache a été
+ généré, le cache est immédiatement regénéré. Ce processus est coûteux, donc,
+ pour des raisons de performances, mettez ce paramètre à false pour une application
+ en production.
+
+
+ activation de $compile_check
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+$smarty->compile_check = true;
+
+$smarty->display('index.tpl');
+
+
+ Si $force_compile est actif,
+ les fichiers de cache sont toujours regénérés. Ceci revient finalement à
+ désactiver le cache. $force_compile est utilisé à des fins de débogage,
+ un moyen plus efficace de désactiver le cache est de régler
+ $caching = false (ou 0).
+
+
+ La fonction is_cached() permet
+ de tester si un template a ou non un fichier de cache valide.
+ Si vous disposez d'un template en cache qui requiert une requête
+ à une base de données, vous pouvez utiliser cette méthode plutôt
+ que $compile_check.
+
+
+ utilisation de is_cached()
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+if(!$smarty->is_cached('index.tpl')) {
+ // pas de cache disponible, on assigne
+ $contents = get_database_contents();
+ $smarty->assign($contents);
+}
+
+$smarty->display('index.tpl');
+
+
+ Vous pouvez rendre dynamiques seulement certaines parties d'une
+ page avec la fonction de templates insert.
+ Imaginons que toute une page doit être mise en cache à part
+ une bannière en bas à droite. En utilisant une fonction insert pour la
+ bannière, vous pouvez garder cet élément dynamique dans le contenu qui
+ est en cache. Reportez-vous à la documentation
+ insert pour plus de détails
+ et des exemples.
+
+
+ Vous pouvez effacer tous les fichiers du cache avec la fonction clear_all_cache(), ou de façon
+ individuelle (ou par groupe) avec la fonction clear_cache().
+
+
+ nettoyage du cache
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+// efface tous les fichiers du cache
+$smarty->clear_all_cache();
+
+// efface le fichier de cache du template 'index.tpl'
+$smarty->clear_cache('index.tpl');
+
+$smarty->display('index.tpl');
+
+
+
+ Caches multiples pour une seule page
+
+ Vous pouvez avoir plusieurs fichiers de caches pour un même appel
+ aux fonctions display() ou fetch(). Imaginons qu'un appel à display('index.tpl')
+ puisse avoir plusieurs résultats, en fonction de certaines conditions, et que
+ vous vouliez des fichiers de cache séparés pour chacun d'eux. Vous
+ pouvez faire cela en passant un identifiant de cache (cache_id) en
+ deuxième paramètre à l'appel de fonction.
+
+
+ Passage d'un cache_id à display()
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+$my_cache_id = $_GET['article_id'];
+
+$smarty->display('index.tpl',$my_cache_id);
+
+
+ Nous passons ci-dessus la variable $my_cache_id à display() comme
+ identifiant de cache. Pour chaque valeur distincte de $my_cache_id,
+ un fichier de cache distinct va être créé. Dans cet exemple,
+ "article_id" a été passé dans l'URL et est utilisé en tant qu'identifiant
+ de cache.
+
+
+ Note technique
+
+ Soyez prudent en passant des valeurs depuis un client (navigateur Web)
+ vers Smarty (ou vers n'importe quelle application PHP). Bien que l'exemple
+ ci-dessus consistant à utiliser article_id depuis l'URL puisse paraître
+ commode, le résultat peut s'avérer mauvais. L'identifiant
+ de cache est utilisé pour créer un répertoire sur le système de fichiers,
+ donc si l'utilisateur décide de donner une très grande valeur à article_id
+ ou d'écrire un script qui envoie des article_id de façon aléatoire,
+ cela pourra causer des problèmes coté serveur. Assurez-vous de bien
+ tester toute donnée passée en paramètre avant de l'utiliser. Dans cet
+ exemple, peut-être savez-vous que article_id a une longueur de 10
+ caractères, est exclusivement composé de caractères alph-numériques et
+ doit avoir une valeur contenue dans la base de données. Vérifiez-le bien !
+
+
+
+ Assurez-vous de bien passer le même identifiant aux fonctions
+ is_cached() et
+ clear_cache().
+
+
+ passer un cache_id à is_cached()
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+$my_cache_id = $_GET['article_id'];
+
+if(!$smarty->is_cached('index.tpl',$my_cache_id)) {
+ // pas de fichier de cache dispo, on assigne donc les variables
+ $contents = get_database_contents();
+ $smarty->assign($contents);
+}
+
+$smarty->display('index.tpl',$my_cache_id);
+
+
+ Vous pouvez effacer tous les fichiers de cache pour un identifiant
+ de cache particulier en passant null en tant que premier paramètre
+ à clear_cache().
+
+
+ effacement de tous les fichiers de cache pour un identifiant de cache particulier
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+// efface tous les fichiers de cache avec "sports" comme identifiant
+$smarty->clear_cache(null,"sports");
+
+$smarty->display('index.tpl',"sports");
+
+
+ De cette manière vous pouvez "grouper" vos fichiers de cache en leur
+ donnant le même identifiant.
+
+
+
+ groupes de fichiers de cache
+
+ Vous pouvez faire des groupements plus élaborés en paramétrant les
+ groupes d'identifiant de cache. Il suffit de séparer chaque sous-groupes
+ avec une barre verticale "|" dans la valeur de l'identifiant de cache.
+ Vous pouvez faire autant de sous-groupes que vous le désirez.
+
+
+ groupes d'identifiants de cache
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+// efface tous les fichiers de cache avec "sports|basketball" comme premiers
+// groupes d'identifiants de cache
+$smarty->clear_cache(null,"sports|basketball");
+
+// efface tous les fichiers de cache "sports" comme premier groupe d'identifiants.
+// Inclue donc "sports|basketball" ou "sports|nimportequoi|nimportequoi|..."
+$smarty->clear_cache(null,"sports");
+
+$smarty->display('index.tpl',"sports|basketball");
+
+
+ Note technique
+
+ Le système de cache n'utilise PAS le chemin vers le template en quoi
+ que ce soit pour l'identifiant de cache. Si par exemple vous
+ faites display('themes/blue/index.tpl'), vous ne pouvez pas effacer tous
+ les fichiers de cache dans le répertoire "theme/blue". Si vous voulez
+ faire cela, vous devez les grouper avec un même identifiant de cache,
+ display('themes/blue/index.tpl','themes|blue'). Vous pouvez ensuite effacer les
+ fichiers de cache pour blue et theme avec clear_cache(null,'theme|blue').
+
+
+
+
+
+
+ Fonctionnalités avancées
+
+ Objets
+
+ Smarty donne l'accès aux objets PHP à travers les templates. Il y
+ a 2 moyens d'y avoir accès. Le premier consiste à allouer les objets
+ au template puis de les utiliser avec une syntaxe similaire à celles
+ des fonctions personnalisées. Le deuxième moyen consiste à allouer
+ des objets aux templates et de les utiliser comme n'importe quelle
+ variable. La première méthode a une syntaxe beaucoup plus sympathique.
+ Elle est aussi plus sécurisée, puisqu'un objet alloué ne peut avoir accès
+ qu'à certaines méthodes et propriétés. Néanmoins, un objet alloué
+ ne peut pas avoir de lien sur lui-même ou être mis dans un tableau
+ d'objet, etc. Vous devez choisir la méthode qui correspond à vos
+ besoins, mais tâchez d'utiliser la première méthode autant que possible
+ afin de réduire la syntaxe des templates au minimum.
+
+
+ Si l'option de sécurité est activée, aucune méthode ou fonctions privées
+ n'est accessible (commençant par "_"). S'il existe une méthode et une
+ propriété du même nom, c'est la méthode qui sera utilisée.
+
+
+ Vous pouvez restreindre l'accès aux méthodes et aux propriétés en
+ les listant dans un tableau en tant que troisième paramètre
+ d'allocation.
+
+
+ Par défaut, les paramètres passés aux objets depuis le templates le sont de la
+ même façon que les fonctions utilisateurs les récupèrent.
+ Le premier paramètre correspond à un tableau associatif, le second à l'objet
+ Smarty. Si vous souhaitez que les paramètres soient passées un à un, comme
+ dans un appel traditionnel, définissez registration, quatrième paramètre optionnel,
+ à false.
+
+
+ utilisation d'un objet alloué ou assigné
+
+<?php
+// la classe
+
+class My_Object() {
+ function meth1($params, &$smarty_obj) {
+ return "this is my meth1";
+ }
+}
+
+$myobj = new My_Object;
+// enregistre l'objet
+$smarty->register_object("foobar",$myobj);
+// on restreint l'accès à certaines méthodes et propriétés en les listant
+$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1'));
+// pour utiliser le format habituel de paramètre objet, passez le booléen = false
+$smarty->register_object("foobar",$myobj,null,false);
+
+// on peut aussi assigner des objets. Assignez par référence quand c'est possible
+$smarty->assign_by_ref("myobj", $myobj);
+
+$smarty->display("index.tpl");
+?>
+
+TEMPLATE:
+
+{* accès à notre objet enregistré *}
+{foobar->meth1 p1="foo" p2=$bar}
+
+{* on peut aussi assigner la sortie *}
+{foobar->meth1 p1="foo" p2=$bar assign="output"}
+the output was {$output)
+
+{* access our assigned object *}
+{$myobj->meth1("foo",$bar)}
+
+
+
+ Filtres de pré-compilation
+
+ Les filtres de pré-compilation sont des fonctions PHP que vos templates
+ exécutent avant qu'ils ne soient compilés. Cela peut être utile
+ pour pré-traiter vos templates afin d'enlever les commentaires
+ inutiles, garder un oeil sur ce que les gens mettent dans leurs templates, etc.
+ Les filtre de pré-compilations peuvent être soit
+ déclarés soit chargés
+ à partir des répertoires de plugins en utilisant la fonction
+ load_filter() ou en réglant
+ la variable
+ $autoload_filters.
+ Smarty passera à la fonction le code source en tant que premier argument,
+ et attendra en retour le code modifié.
+
+
+ Utilisation un filtre de pré-compilation de template
+
+<?php
+// mettre ceci dans votre application
+function remove_dw_comments($tpl_source, &$smarty)
+{
+ return preg_replace("/<!--#.*-->/U","",$tpl_source);
+}
+
+// enregistrer le filtre de pré-compilation
+$smarty->register_prefilter("remove_dw_comments");
+$smarty->display("index.tpl");
+?>
+
+{* template Smarty index.tpl *}
+<!--# cette ligne va être supprimée par le filtre de pré-compilation -->
+
+
+
+
+ Filtres de post-compilation
+
+ Les filtres de post-compilation sont des fonctions PHP que vos templates
+ exécutent après avoir été compilés. Les filtres de post-compilation peuvent
+ être soit déclarés soit chargés
+ depuis les répertoires des plugins en utilisant la fonction
+ load_filter() ou en réglant
+ la variable $autoload_filters.
+ Smarty passera le template compilé en tant que premier paramètre et attendra
+ de la fonction qu'elle retourne le résultat de l'exécution.
+
+
+ utilisation d'un filtre de post-compilation de templates
+
+<?php
+// mettez cela dans votre application
+function add_header_comment($tpl_source, &$smarty)
+{
+ return "<?php echo \"<!-- Created by Smarty! -->\n\" ?>\n".$tpl_source;
+}
+
+// enregistre le filtre de post-compilation
+$smarty->register_postfilter("add_header_comment");
+$smarty->display("index.tpl");
+?>
+
+{* template Smarty compilé index.tpl *}
+<!-- Created by Smarty! -->
+{* reste du contenu du template... *}
+
+
+
+
+ Filtres de sortie
+
+ Quand le template est appelé via les fonctions display() ou fetch(),
+ sa sortie est envoyée à travers un ou plusieurs filtres de sorties.
+ Ils diffèrent des filtres de post-compilation dans le sens ou ils agissent
+ sur la sortie des templates, une fois exécutés, et non sur les sources
+ des templates.
+
+
+ Les filtres de sortie peuvent être soit
+ déclarés soit
+ chargés depuis les répertoires des plugins en utilisant la fonction
+ load_filter()
+ ou en réglant la variable
+ $autoload_filters.
+ Smarty passera la sortie du template en premier argument et attendra
+ de la fonction qu'elle retourne le résultat de l'exécution.
+
+
+ utilisation d'un filtre de sortie
+
+<?php
+// mettez ceci dans votre application
+function protect_email($tpl_output, &$smarty)
+{
+ $tpl_output =
+ preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
+ '$1%40$2', $tpl_output);
+ return $tpl_output;
+}
+
+// enregistre le filtre de sortie
+$smarty->register_outputfilter("protect_email");
+$smarty->display("index.tpl");
+
+// dorénavant toute occurence d'un adresse email dans le résultat du template
+// aura un protection simple contre les robots spammers
+?>
+
+
+
+
+ Fonction de gestion du cache
+
+ Une alternative au mécanisme de cache par défaut (basé sur des fichiers
+ de cache) consiste à spécifier une fonction de gestion de cache utilisateur
+ qui sera utilisée pour lire, écrire et effacer les fichiers de cache.
+
+
+ Il suffit de créer dans votre application une fonction que Smarty
+ utilisera pour la gestion du cache et d'assigner le nom de cette
+ fonction à la variable de classe
+ $cache_handler_func.
+ Smarty utilisera alors cette fonction pour gérer les données du cache.
+ Le premier argument est l'action, qui sera 'read', 'write' ou 'clear'.
+ Le second paramètre est l'objet Smarty. Le troisième est le contenu
+ du cache. Pour écrire, Smarty passe le contenu du cache dans ces paramètres.
+ Pour lire, Smarty s'attend à ce que votre fonction accepte ce paramètre
+ par référence et que vous le remplissiez avec les données du cache. Pour effacer,
+ il suffit de passer une variable fictive car cette dernière n'est pas utilisée.
+ Le quatrième paramètre est le nom du fichier de template (utile pour
+ lire/écrire), le cinquième paramètre est l'identifiant de cache (optionnel)
+ et le sixième est l'identifiant de compilation.
+
+
+ exemple d'utilisation de MySQL pour la source du cache
+
+<?php
+/*
+
+exemple d'usage :
+
+include('Smarty.class.php');
+include('mysql_cache_handler.php');
+
+$smarty = new Smarty;
+$smarty->cache_handler_func = 'mysql_cache_handler';
+
+$smarty->display('index.tpl');
+
+
+la base mysql est attendu dans ce format :
+
+create database SMARTY_CACHE;
+
+create table CACHE_PAGES(
+CacheID char(32) PRIMARY KEY,
+CacheContents MEDIUMTEXT NOT NULL
+);
+
+*/
+
+function mysql_cache_handler($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null)
+{
+ // l'hôte de la bd, l'utilisateur, et le mot de passe
+ $db_host = 'localhost';
+ $db_user = 'myuser';
+ $db_pass = 'mypass';
+ $db_name = 'SMARTY_CACHE';
+ $use_gzip = false;
+
+ // crée un identifiant de cache unique
+ $CacheID = md5($tpl_file.$cache_id.$compile_id);
+
+ if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) {
+ $smarty_obj->_trigger_error_msg("cache_handler: could not connect to database");
+ return false;
+ }
+ mysql_select_db($db_name);
+
+ switch ($action) {
+ case 'read':
+ // récupère le cache dans la base de données
+ $results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$CacheID'");
+ if(!$results) {
+ $smarty_obj->_trigger_error_msg("cache_handler: query failed.");
+ }
+ $row = mysql_fetch_array($results,MYSQL_ASSOC);
+
+ if($use_gzip && function_exists("gzuncompress")) {
+ $cache_contents = gzuncompress($row["CacheContents"]);
+ } else {
+ $cache_contents = $row["CacheContents"];
+ }
+ $return = $results;
+ break;
+ case 'write':
+ // sauvegarde le cache dans la base de données
+
+ if($use_gzip && function_exists("gzcompress")) {
+ // compresse le contenu pour gagner de la place
+ $contents = gzcompress($cache_content);
+ } else {
+ $contents = $cache_content;
+ }
+ $results = mysql_query("replace into CACHE_PAGES values(
+ '$CacheID',
+ '".addslashes($contents)."')
+ ");
+ if(!$results) {
+ $smarty_obj->_trigger_error_msg("cache_handler: query failed.");
+ }
+ $return = $results;
+ break;
+ case 'clear':
+ // efface les données du cache
+ if(empty($cache_id) && empty($compile_id) && empty($tpl_file)) {
+ // les efface toutes
+ $results = mysql_query("delete from CACHE_PAGES");
+ } else {
+ $results = mysql_query("delete from CACHE_PAGES where CacheID='$CacheID'");
+ }
+ if(!$results) {
+ $smarty_obj->_trigger_error_msg("cache_handler: query failed.");
+ }
+ $return = $results;
+ break;
+ default:
+ // erreur, action inconnue
+ $smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\"");
+ $return = false;
+ break;
+ }
+ mysql_close($link);
+ return $return;
+
+}
+
+?>
+
+
+
+
+ Ressources
+
+ Les templates peuvent provenir d'une grande variété de ressources. Quand vous
+ affichez ou récupérez un template, ou quand vous incluez un template
+ dans un autre template, vous fournissez un type de ressource, suivi
+ par le chemin approprié et le nom du template.
+
+
+ Templates depuis $template_dir
+
+ Les templates du répertoire $template_dir n'ont pas
+ besoin d'une ressource template, bien que vous puissiez utiliser
+ la ressource "file" pour être cohérent. Vous n'avez qu'à fournir
+ le chemin vers le template que vous voulez utiliser, relatif
+ au répertoire racine $template_dir.
+
+
+ Utilisation de templates depuis $template_dir
+
+// le script PHP
+$smarty->display("index.tpl");
+$smarty->display("admin/menu.tpl");
+$smarty->display("file:admin/menu.tpl"); // le même que celui ci-dessus
+
+{* le template Smarty *}
+{include file="index.tpl"}
+{include file="file:index.tpl"} {* le même que celui ci-dessus *}
+
+
+
+ Templates à partir de n'importe quel répertoire
+
+ Les templates en-dehors du répertoire $template_dir nécessitent
+ le type de ressource template, suivi du chemin absolu et du nom du
+ template.
+
+
+ utilisation d'un template depuis n'importe quel répertoire
+
+// le script PHP
+$smarty->display("file:/export/templates/index.tpl");
+$smarty->display("file:/path/to/my/templates/menu.tpl");
+
+{* le template Smarty *}
+{include file="file:/usr/local/share/templates/navigation.tpl"}
+
+
+
+ Chemin de fichiers Windows
+
+ Si vous utilisez Windows, les chemins de fichiers sont la plupart
+ du temps sur un disque identifié par une lettre (c:) au début du chemin.
+ Assurez-vous de bien mettre "file:" dans le chemin pour éviter des
+ conflits d'espace de nommage et obtenir les résultats escomptés.
+
+
+ utilisation de templates avec des chemins de fichiers Windows
+
+// le script PHP
+$smarty->display("file:C:/export/templates/index.tpl");
+$smarty->display("file:F:/path/to/my/templates/menu.tpl");
+
+{* le template Smarty *}
+{include file="file:D:/usr/local/share/templates/navigation.tpl"}
+
+
+
+
+
+ Templates depuis d'autres sources
+
+ Vous pouvez récupérer les templates à partir n'importe quelle
+ source à laquelle vous avez accès avec PHP : base de données,
+ sockets, LDAP et ainsi de suite. Il suffit d'écrire les fonctions
+ de ressource plugins et de les enregistrer auprès de Smarty.
+
+
+ Reportez-vous à la section ressource plugins
+ pour plus d'informations sur les fonctions que vous êtes censé fournir.
+
+
+
+ Notez que vous ne pouvez pas écraser la ressource file native,
+ toutefois, vous pouvez fournir une ressource qui récupère un template depuis
+ le système de fichier par un autre moyen en l'enregistrant sous un autre
+ nom de ressource.
+
+
+
+ utilisation de ressources utilisateurs
+
+// le script PHP
+
+// mettez ces fonctions quelque part dans votre application
+function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
+{
+ // requête BD pour récupérer le template
+ // et remplir $tpl_source
+ $sql = new SQL;
+ $sql->query("select tpl_source
+ from my_table
+ where tpl_name='$tpl_name'");
+ if ($sql->num_rows) {
+ $tpl_source = $sql->record['tpl_source'];
+ return true;
+ } else {
+ return false;
+ }
+}
+
+function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
+{
+ // requête BD pour remplir $tpl_timestamp
+ $sql = new SQL;
+ $sql->query("select tpl_timestamp
+ from my_table
+ where tpl_name='$tpl_name'");
+ if ($sql->num_rows) {
+ $tpl_timestamp = $sql->record['tpl_timestamp'];
+ return true;
+ } else {
+ return false;
+ }
+}
+
+function db_get_secure($tpl_name, &$smarty_obj)
+{
+ // on suppose que tous les templates sont sûrs
+ return true;
+}
+
+function db_get_trusted($tpl_name, &$smarty_obj)
+{
+ // pas utilisée pour les templates dans notre cas
+}
+
+// enregistre le nom de ressource "db"
+$smarty->register_resource("db", array("db_get_template",
+ "db_get_timestamp",
+ "db_get_secure",
+ "db_get_trusted"));
+
+// utilise la ressource depuis le script PHP
+$smarty->display("db:index.tpl");
+
+{* utilise la ressource depuis le template Smarty *}
+{include file="db:/extras/navigation.tpl"}
+
+
+
+
+ Fonction de gestion de template par défaut
+
+ Vous pouvez spécifier une fonction qui sera utilisée pour
+ récupérer le contenu d'un template dans le cas où le template
+ ne peut pas être récupéré depuis sa ressource. Une utilisation possible est
+ la création de templates à la volée.
+
+
+ utilisation de la fonction de gestion de template par défaut
+
+<?php
+// mettez cette fonction quelque part dans votre application
+
+function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp, &$smarty_obj)
+{
+ if( $resource_type == 'file' ) {
+ if ( ! is_readable ( $resource_name )) {
+ // crée le fichier de template et renvoie le contenu
+ $template_source = "This is a new template.";
+ $template_timestamp = time();
+ $smarty_obj->_write_file($resource_name,$template_source);
+ return true;
+ }
+ } else {
+ // pas un fichier
+ return false;
+ }
+}
+
+// régle la fonction par défaut
+$smarty->default_template_handler_func = 'make_template';
+?>
+
+
+
+
+
+
+ Etendre Smarty avec des plugins
+
+ La version 2.0 a introduit l'architecture de plugin qui est
+ utilisée pour pratiquement toute les fonctionnalités
+ personnalisables de Smarty. Ceci comprend :
+
+ les fonctions
+ les modificateurs
+ les fonctions de blocs
+ les fonctions de compilation
+ les filtres de pré-compilation
+ les filtres de post-compilation
+ les filtres de sorties
+ les ressources
+ les insertions
+
+ A part pour les ressources, la compatibilité avec les anciennes
+ façons d'enregistrer les fonctions de gestion avec l'API register_
+ est conservée. Si vous n'avez pas utilisé cette API et que vous avez
+ à la place directement modifié les variables de classes
+ $custom_funcs, $custom_mods et
+ d'autres, vous devez alors modifier vos scripts pour utiliser
+ l'API ou convertir vos fonctionnalités personnalisées en plugins.
+
+
+
+ Comment fonctionnent les plugins
+
+ Les plugins sont toujours chargés à la demande. Seuls les modificateurs
+ de variables, les ressources, etc invoqués dans les scripts de templates
+ seront chargés. De plus, chaque plugin n'est chargé qu'une fois, et ce
+ même si vous avez plusieurs instances de Smarty qui tournent dans
+ la même requête.
+
+
+ Les filtres de post/pré-compilation et les filtres de sortie sont des cas
+ un peu spéciaux.
+ Comme ils ne sont pas mentionnés dans les templates, ils doivent être déclarés
+ ou chargés explicitement via les fonctions de l'API avant que le template
+ ne soit exécuté. L'ordre dans lequel les filtres multiples d'un même type
+ sont exécutés dépend de l'ordre dans lequel ils sont enregistrés ou chargés.
+
+
+ Il n'existe qu'un seul répertoire de plugin (pour des raisons de performances).
+ Pour installer un plugin, copiez-le simplement dans le répertoire et Smarty
+ l'utilisera automatiquement.
+
+
+
+
+ Conventions de nommage
+
+ Les fichiers et les fonctions de plugins doivent suivre une convention
+ de nommage très spécifique pour être localisés par Smarty.
+
+
+ Les fichiers de plugins doivent être nommés de la façon suivante :
+
+
+
+ type.nom.php
+
+
+
+
+
+ Où type est l'une des valeurs suivantes :
+
+ function
+ modifier
+ block
+ compiler
+ prefilter
+ postfilter
+ outputfilter
+ resource
+ insert
+
+
+
+ Et nom doit être un identifiant valide (lettres, nombres
+ et underscore seulement).
+
+
+ Quelques exemples : function.html_select_date.php,
+ resource.db.php,
+ modifier.spacify.php.
+
+
+ Les fonctions de plugins dans les fichiers de plugins doivent être
+ nommées de la façon suivante :
+
+
+ smarty_type_nom
+
+
+
+
+ Les significations de type et de nom sont les mêmes
+ que précédemment.
+
+
+ Smarty donnera des messages d'erreur approprié si le fichier de plugin
+ n'est pas trouvé, ou si le fichier ou la fonction de plugin ne sont
+ pas nommés correctement.
+
+
+
+
+ Ecrire des plugins
+
+ Les plugins peuvent être soit chargés automatiquement par Smarty
+ depuis le système de fichier, soit être déclarés
+ pendant l'exécution via une fonction register_* de l'API. Ils peuvent
+ aussi être désalloués en utilisant une fonction unregister_* de
+ l'API.
+
+
+ Pour les plugins qui ne sont pas enregistrés pendant l'exécution, le nom
+ des fonctions n'ont pas à suivre la convention de nommage.
+
+
+ Si certaines fonctionnalités d'un plugin dépendent d'un autre plugin
+ (comme c'est le cas de certains plugins accompagnant Smarty), alors la manière appropriée
+ de charger le plugin est la suivante :
+
+
+
+require_once SMARTY_DIR . 'plugins/function.html_options.php';
+
+ Une règle générale est que chaque objet Smarty est toujours passé au plugin
+ en tant que dernier paramètre (à part pour les modificateurs).
+
+
+
+ Les fonctions de templates
+
+
+ void smarty_function_name
+ array $params
+ object &$smarty
+
+
+
+ Tous les attributs passés aux fonctions de template à partir du template
+ sont contenus dans le tableau associatif $params.
+ Vous pouvez accéder à ces valeurs soit directement, par exemple
+ $params['start'], soit en utilisant
+ extract($params) pour les importer dans la table
+ des symboles.
+
+
+ Le retour de la fonction sera substituée à la balise de fonction
+ du template (fonction fetch par exemple). Sinon,
+ la fonction peut simplement accomplir une autre tâche sans sortie
+ (la fonction assign par exemple)
+
+
+ Si la fonction a besoin d'assigner des variables aux templates ou d'utiliser
+ d'autres fonctionnalités fournies par Smarty, elle peut recevoir un
+ objet $smarty pour cela.
+
+
+ Référez-vous aussi à :
+ register_function(),
+ unregister_function().
+
+
+
+ fonction de plugin avec sortie
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * Fichier : function.eightball.php
+ * Type : fonction
+ * Nom : eightball
+ * Rôle : renvoie une phrase magique au hasard
+ * -------------------------------------------------------------
+ */
+function smarty_function_eightball($params, &$smarty)
+{
+ $answers = array('Yes',
+ 'No',
+ 'No way',
+ 'Outlook not so good',
+ 'Ask again soon',
+ 'Maybe in your reality');
+
+ $result = array_rand($answers);
+ return $answers[$result];
+}
+?>
+
+
+
+ peut être utilisée dans le template de la façon suivante :
+
+
+Question: Will we ever have time travel?
+Answer: {eightball}.
+
+
+ fonction de plugin sans sortie
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * Fichier : function.assign.php
+ * Type : fonction
+ * Nom : assign
+ * Purpose : assigne une valeur à une variable de template
+ * -------------------------------------------------------------
+ */
+function smarty_function_assign($params, &$smarty)
+{
+ extract($params);
+
+ if (empty($var)) {
+ $smarty->trigger_error("assign: missing 'var' parameter");
+ return;
+ }
+
+ if (!in_array('value', array_keys($params))) {
+ $smarty->trigger_error("assign: missing 'value' parameter");
+ return;
+ }
+
+ $smarty->assign($var, $value);
+}
+?>
+
+
+
+
+ Modificateurs
+
+ Les modificateurs sont des petites fonctions appliquées à une variable
+ de template avant qu'elle ne soit affichée ou utilisée dans un autre contexte.
+ Les modificateurs peuvent être chaînés entre eux.
+
+
+
+ mixed smarty_modifier_name
+ mixed $value
+ [mixed $param1, ...]
+
+
+
+ Le premier paramètre passé au modificateur est la valeur
+ sur laquelle le modificateur est supposé opérer. Les autres paramètres
+ peuvent être optionnels, dépendant de quel genre d'opération doit être
+ effectué.
+
+
+ Le modificateur doit retourner le résultat de son exécution.
+
+
+ Regardez aussi
+ register_modifier(),
+ unregister_modifier().
+
+
+ plugin modificateur simple
+
+ Ce plugin est un alias d'une fonction PHP. Il n'a aucun paramètre
+ supplémentaires.
+
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * Fichier : modifier.capitalize.php
+ * Type : modificateur
+ * Name : capitalize
+ * Rôle : met une majuscule aux mots d'une phrase
+ * -------------------------------------------------------------
+ */
+function smarty_modifier_capitalize($string)
+{
+ return ucwords($string);
+}
+?>
+
+
+
+ un plugin modificateur un peu plus complexe
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * Fichier : modifier.truncate.php
+ * Type : modificateur
+ * Name : truncate
+ * Rôle : Tronque une chaîne à une certaine longueur si
+ * nécessaire, la coupe optionnellement au milieu
+ * d'un mot et ajoute la chaîne $etc
+ * -------------------------------------------------------------
+ */
+function smarty_modifier_truncate($string, $length = 80, $etc = '...',
+ $break_words = false)
+{
+ if ($length == 0)
+ return '';
+
+ if (strlen($string) > $length) {
+ $length -= strlen($etc);
+ $fragment = substr($string, 0, $length+1);
+ if ($break_words)
+ $fragment = substr($fragment, 0, -1);
+ else
+ $fragment = preg_replace('/\s+(\S+)?$/', '', $fragment);
+ return $fragment.$etc;
+ } else
+ return $string;
+}
+?>
+
+
+
+ Fonctions de blocs
+
+
+ void smarty_block_name
+ array $params
+ mixed $content
+ object &$smarty
+
+
+
+ Les fonctions de blocs sont des fonctions de la forme {func} .. {/func}.
+ En d'autres mots, elles englobent des blocs de template et opèrent sur les
+ contenus de ces blocs. Les fonctions de blocs ont la priorité sur les
+ fonctions utilisateurs de même nom, ce qui signifie que vous ne
+ pouvez avoir une fonction utilisateur {func} et une fonction de bloc
+ {func} .. {/func}.
+
+
+ L'implémentation de votre fonction est appelée deux fois par Smarty :
+ une fois pour la balise ouvrante et une autre fois pour la balise
+ fermante.
+
+
+ Seule la balise ouvrante d'une fonction de bloc peut avoir des attributs.
+ Tous les attributs passés par le template aux fonctions de templates sont
+ contenues dans le tableau associatif $params.
+ Vous pouvez accéder à ces valeurs soit directement, par exemple
+ $params['start'], soit en utilisant
+ extract($params) pour les importer dans la table
+ des symboles. Votre fonction a aussi accès aux attributs de la balise
+ ouvrante quand c'est la balise fermante qui est exécutée.
+
+
+ La valeur de la variable $content est différente
+ selon si votre fonction est appelée pour la balise ouvrante ou la
+ balise fermante. Si c'est pour la balise ouvrante, elle sera à
+ null et si c'est la balise fermante elle sera
+ égale au contenu du bloc de template. Notez que le bloc de template
+ aura déjà été exécuté par Smarty, vous recevrez donc la sortie du
+ template et non sa source.
+
+
+ Si vous imbriqué des fonctions de bloc, il est possible de connaître
+ la fonction de bloc parente grâce à la variable $smarty->_tag_stack.
+ Faites un var_dump() dessus et la structure devrait apparaître.
+
+
+ Regardez aussi :
+ register_block(),
+ unregister_block().
+
+
+ fonction de bloc
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * Fichier : block.translate.php
+ * Type : bloc
+ * Nom : translate
+ * Rôle : traduire un bloc de texte
+ * -------------------------------------------------------------
+ */
+function smarty_block_translate($params, $content, &$smarty)
+{
+ if ($content) {
+ $lang = $params['lang'];
+ // fait une traduction de $content
+ echo $translation;
+ }
+}
+
+
+
+ Fonctions de compilation
+
+ Les fonctions de compilation sont appelées durant la compilation du template.
+ Elles sont utiles pour injecter du code PHP ou du contenu "statique variant
+ avec le temps" (bandeau de pub par ex.). Si une fonction de compilation et
+ une fonction personnalisée ont le même
+ nom, la fonction de compilation a priorité.
+
+
+
+ mixed smarty_compiler_name
+ string $tag_arg
+ object &$smarty
+
+
+
+ Les fonctions de compilation ont deux paramètres : une chaîne contenant
+ la balise - en gros, tout, depuis le nom de la fonction jusqu'au délimiteur de fin - et
+ l'objet Smarty. Elles sont censées retourner le code PHP qui doit être
+ injecté dans le template compilé.
+
+
+ Regardez aussi
+ register_compiler_function(),
+ unregister_compiler_function().
+
+
+ fonction de compilation simple
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * Fichier : compiler.tplheader.php
+ * Type : compilation
+ * Nom : tplheader
+ * Rôle : Renvoie l'en-tête contenant le nom du fichier
+ * source et le temps de compilation.
+ * -------------------------------------------------------------
+ */
+function smarty_compiler_tplheader($tag_arg, &$smarty)
+{
+ return "\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';";
+}
+?>
+
+ Cette fonction peut-être appelé depuis le template comme suivant :
+
+
+{* cette fonction n'est executée que lors de la compilation *}
+{tplheader}
+
+ Le code PHP résultant dans les templates compilés ressemblerait à ça :
+
+
+<php
+echo 'index.tpl compiled at 2002-02-20 20:02';
+?>
+
+
+
+
+ filtres de pré-compilation/filtres de post-compilation
+
+ Les filtres de pré-compilation et les filtres de post-compilation ont des concepts très
+ proches. Ils différent dans leur exécution, plus précisément dans le
+ moment où ils sont exécutés.
+
+
+
+ string smarty_prefilter_name
+ string $source
+ object &$smarty
+
+
+
+ Les filtres de pré-compilation sont utilisés pour transformer la source d'un template
+ juste avant la compilation. Le premier paramètre passé à la fonction
+ de filtre de pré-compilation est la source du template, éventuellement modifiée par
+ d'autres filtre de pré-compilations. Le plugin est supposé retourner la source modifiée.
+ Notez que cette source n'est sauvegardée nulle part, elle est seulement
+ utilisé pour la compilation.
+
+
+
+ string smarty_postfilter_name
+ string $compiled
+ object &$smarty
+
+
+
+ Les filtres de post-compilation sont utilisés pour modifier la sortie du template
+ (le code PHP) juste après que la compilation a été faite mais juste
+ avant que le template ne soit sauvegardé sur le système de fichiers.
+ Le premier paramètre passé à la fonction de filtre de post-compilation est le code
+ du template compilé, éventuellement déjà modifié par d'autres filtre de post-compilations.
+ Le plugin est censé retourner la version modifié du code.
+
+
+ plugin de filtre de post-compilation
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * Fichier : prefilter.pre01.php
+ * Type : filtre de pré-compilation
+ * Nom : pre01
+ * Rôle : Passe les balises HTML en minuscules.
+ * -------------------------------------------------------------
+ */
+ function smarty_prefilter_pre01($source, &$smarty)
+ {
+ return preg_replace('!<(\w+)[^>]+>!e', 'strtolower("$1")', $source);
+ }
+?>
+
+
+
+ plugin de filtre de post-compilation
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * Fichier : postfilter.post01.php
+ * Type: filtre de post-compilation
+ * Nom : post01
+ * Rôle : Renvoie du code qui liste toutes les variables
+ * du template.
+ * -------------------------------------------------------------
+ */
+ function smarty_postfilter_post01($compiled, &$smarty)
+ {
+ $compiled = "<pre>\n<?php print_r(\$this->get_template_vars()); ?>\n</pre>" . $compiled;
+ return $compiled;
+ }
+?>
+
+
+
+ Filtres de sortie
+
+ Les plugins de filtres de sortie opèrent sur la sortie du template,
+ après que le template a été chargé et exécuté, mais avant que
+ la sortie ne soit affichée.
+
+
+
+ string smarty_outputfilter_name
+ string $template_output
+ object &$smarty
+
+
+
+ Le premier paramètre passé à la fonction du filtre de sortie est la
+ sortie du template qui doit être modifiée et le second paramètre
+ est l'instance de Smarty appelant le plugin. Le plugin est supposé
+ faire un traitement et en retourner le résultat.
+
+
+ plugin de filtre de sortie
+
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * Fichier : outputfilter.protect_email.php
+ * Type : filtre de sortie
+ * Nom : protect_email
+ * Rôle: Convertie les @ en %40 pour protéger des
+ * robots spammers.
+ * -------------------------------------------------------------
+ */
+ function smarty_outputfilter_protect_email($output, &$smarty)
+ {
+ return preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
+ '$1%40$2', $output);
+ }
+
+
+
+
+ Ressources
+
+ Les plugins ressources sont un moyen générique de fournir des sources
+ de templates ou des composants de scripts PHP à Smarty. Quelques exemples
+ de ressources : bases de données, LDAP, mémoire partagée, sockets, et ainsi
+ de suite.
+
+
+ Il y au total 4 fonctions qui ont besoin d'être enregistrées pour
+ chaque type de ressource. Chaque fonction reçoit le nom de la ressource demandée
+ comme premier paramètre et l'objet Smarty comme dernier paramètre.
+ Les autres paramètres dépendent de la fonction.
+
+
+
+ bool smarty_resource_name_source
+ string $rsrc_name
+ string &$source
+ object &$smarty
+
+
+ bool smarty_resource_name_timestamp
+ string $rsrc_name
+ int &$timestamp
+ object &$smarty
+
+
+ bool smarty_resource_name_secure
+ string $rsrc_name
+ object &$smarty
+
+
+ bool smarty_resource_name_trusted
+ string $rsrc_name
+ object &$smarty
+
+
+
+
+ La première fonction est supposée récupérer la ressource. Son second
+ paramètre est une variable passée par référence où le résultat doit être
+ stocké. La fonction est supposée retourner true si
+ elle réussi à récupérer la ressource et false sinon.
+
+
+
+ La seconde fonction est supposée récupérer la date de dernière modification
+ de la ressource demandée (comme un timestamp UNIX). Le second paramètre
+ est une variable passée par référence dans laquelle la date doit
+ être stockée. La fonction est supposée renvoyer true si elle
+ a réussi à récupérer la date et false sinon.
+
+
+
+ La troisième fonction est supposée retourner true
+ ou false selon si la ressource demandée est sûre
+ ou non. La fonction est utilisée seulement pour les ressources templates
+ mais doit tout de même être définie.
+
+
+
+ La quatrième fonction est supposée retourner true
+ ou false selon si on peut faire confiance ou
+ non à la ressource demandée. Cette fonction est utilisée seulement
+ pour les composants de scripts PHP demandés par les balises
+ include_php ou insert
+ ayant un attribut src. Quoiqu'il en soit,
+ elle doit être définie pour les ressources templates.
+
+
+
+ Regardez aussi
+ register_resource(),
+ unregister_resource().
+
+
+ resource plugin
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * Fichier : resource.db.php
+ * Type : ressource
+ * Nom : db
+ * Rôle : Récupère des templates depuis une base de données
+ * -------------------------------------------------------------
+ */
+function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty)
+{
+ // fait des requêtes BD pour récupérer votre template
+ // et remplir $tpl_source
+ $sql = new SQL;
+ $sql->query("select tpl_source
+ from my_table
+ where tpl_name='$tpl_name'");
+ if ($sql->num_rows) {
+ $tpl_source = $sql->record['tpl_source'];
+ return true;
+ } else {
+ return false;
+ }
+}
+
+function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty)
+{
+ // fait des requêtes BD pour remplir $tpl_timestamp
+ $sql = new SQL;
+ $sql->query("select tpl_timestamp
+ from my_table
+ where tpl_name='$tpl_name'");
+ if ($sql->num_rows) {
+ $tpl_timestamp = $sql->record['tpl_timestamp'];
+ return true;
+ } else {
+ return false;
+ }
+}
+
+function smarty_resource_db_secure($tpl_name, &$smarty)
+{
+ // suppose que tous les templates sont sûrs
+ return true;
+}
+
+function smarty_resource_db_trusted($tpl_name, &$smarty)
+{
+ // inutilisée pour les templates
+}
+?>
+
+
+
+ Insertions
+
+ Les plugins d'insertion sont utilisés pour implémenter les fonctions
+ qui sont appelées par les balises
+ insert
+ dans les templates.
+
+
+
+ string smarty_insert_name
+ array $params
+ object &$smarty
+
+
+
+ Le premier paramètre passé à la fonction est une tableau associatif
+ d'attributs. Vous pouvez accéder à ces valeurs soit directement, par exemple
+ $params['start'], soit en utilisant
+ extract($params) pour les importer dans la table
+ des symboles.
+
+
+ La fonction d'insertion est supposée retourner le résultat qui sera
+ substitué à la balise insert dans le template.
+
+
+ plugin d'insertion
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * Fichier : insert.time.php
+ * Type : temps
+ * Nom : time
+ * Rôle : Insert la date/heure courante conformément
+ * au format
+ * -------------------------------------------------------------
+ */
+function smarty_insert_time($params, &$smarty)
+{
+ if (empty($params['format'])) {
+ $smarty->trigger_error("insert time: missing 'format' parameter");
+ return;
+ }
+
+ $datetime = strftime($params['format']);
+ return $datetime;
+}
+?>
+
+
+
+