2003-04-30 18:48:44 +00:00
|
|
|
|
<part id="smarty.for.programmers">
|
|
|
|
|
<title>Smarty pour les programmeurs</title>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<chapter id="smarty.constants">
|
|
|
|
|
<title>Constantes</title>
|
|
|
|
|
<para></para>
|
|
|
|
|
|
|
|
|
|
<sect1 id="constant.smarty.dir">
|
|
|
|
|
<title>SMARTY_DIR</title>
|
|
|
|
|
<para>
|
|
|
|
|
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.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<example>
|
|
|
|
|
<title>SMARTY_DIR</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// d<>finit le chemin du r<>pertoire de Smarty
|
|
|
|
|
define("SMARTY_DIR","/usr/local/lib/php/Smarty/");
|
|
|
|
|
|
|
|
|
|
require_once(SMARTY_DIR."Smarty.class.php");</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
</chapter>
|
|
|
|
|
|
|
|
|
|
<chapter id="api.variables">
|
|
|
|
|
<title>Variables</title>
|
|
|
|
|
|
|
|
|
|
<sect1 id="variable.template.dir">
|
|
|
|
|
<title>$template_dir</title>
|
|
|
|
|
<para>
|
|
|
|
|
C'est le nom par d<>faut du r<>pertoire des templates.
|
|
|
|
|
Si vous ne sp<73>cifiez aucun chemin lors de l'utilisation de templates, Smarty
|
|
|
|
|
les cherchera <20> 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<65>cution.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
|
|
|
|
Il n'est pas conseill<6C> de mettre ce r<>pertoire
|
|
|
|
|
dans l'arborescence Web.
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.compile.dir">
|
|
|
|
|
<title>$compile_dir</title>
|
|
|
|
|
<para>
|
|
|
|
|
C'est le nom du r<>pertoire o<> se trouvent les templates
|
|
|
|
|
compil<69>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<65>cution.
|
|
|
|
|
</para>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
|
|
|
|
Ce r<>glage doit <20>tre soit un chemin absolu, soit un chemin
|
|
|
|
|
relatif. include_path n'est pas utilis<69> pour <20>crire des fichiers.
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
|
|
|
|
Il n'est pas conseill<6C> de mettre ce r<>pertoire
|
|
|
|
|
sous la racine de l'arborescence Web.
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.config.dir">
|
|
|
|
|
<title>$config_dir</title>
|
|
|
|
|
<para>
|
|
|
|
|
Il s'agit du r<>pertoire utilis<69> pour stocker les
|
|
|
|
|
fichiers de configuration utilis<69>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<65>cute.
|
|
|
|
|
</para>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
|
|
|
|
Il n'est pas conseill<6C> de mettre ce r<>pertoire
|
|
|
|
|
sous la racine de l'arborescence Web.
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.plugins.dir">
|
|
|
|
|
<title>$plugins_dir</title>
|
|
|
|
|
<para>
|
|
|
|
|
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 <20> chaque entr<74>e de votre r<>pertoire
|
|
|
|
|
d'inclusion PHP.
|
|
|
|
|
</para>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
|
|
|
|
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 <20> SMARTY_DIR ou au rtc.
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.debugging">
|
|
|
|
|
<title>$debugging</title>
|
|
|
|
|
<para>
|
|
|
|
|
Cela active la
|
|
|
|
|
<link
|
|
|
|
|
linkend="chapter.debugging.console">console de d<>bogage</link>.
|
|
|
|
|
La console est une fen<65>tre javascript qui vous informe des templates
|
|
|
|
|
inclus et des variables assign<67>es dans la page courante.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.debug.tpl">
|
|
|
|
|
<title>$debug_tpl</title>
|
|
|
|
|
<para>
|
|
|
|
|
C'est le nom du fichier template utilis<69> pour la
|
|
|
|
|
console de d<>buggage. Par d<>faut debug.tpl, il se situe dans <link
|
|
|
|
|
linkend="constant.smarty.dir">SMARTY_DIR</link>
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.debugging.ctrl">
|
|
|
|
|
<title>$debugging_ctrl</title>
|
|
|
|
|
<para>
|
|
|
|
|
Cela permet d'avoir diff<66>rents moyens pour activer
|
|
|
|
|
le d<>bogage. URL signifie que si SMARTY_DEBUG se
|
|
|
|
|
trouve dans QUERY_STRING, le d<>buggage
|
|
|
|
|
est activ<69> <20> l'invocation du script. Si $debugging
|
|
|
|
|
est <20> vrai, cette valeur est sans effet.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.global.assign">
|
|
|
|
|
<title>$global_assign</title>
|
|
|
|
|
<para>
|
|
|
|
|
C'est une liste de variable qui sont toujours
|
|
|
|
|
implicitement assign<67>es au moteur de templates.
|
|
|
|
|
Ceci est commode pour rendre des variables globales
|
|
|
|
|
ou des variables du serveur accessibles <20> tous les templates
|
|
|
|
|
plut<75>t que de devoir les assigner <20> la main. Chaque <20>l<EFBFBD>ment
|
|
|
|
|
de $global_assign doit <20>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<67>es depuis ce tableau global.
|
|
|
|
|
$SCRIPT_NAME est globalement assign<67> par d<>faut depuis
|
|
|
|
|
$HTTP_SERVER_VARS.
|
|
|
|
|
</para>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
|
|
|
|
On peut acc<63>der aux variables du serveur avec la variable
|
|
|
|
|
$smarty, par exemple {$smarty.server.SCRIPT_NAME}.
|
|
|
|
|
Se reporter <20> la section sur la variable
|
|
|
|
|
<link linkend="language.variables.smarty">$smarty</link>.
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.undefined">
|
|
|
|
|
<title>$undefined</title>
|
|
|
|
|
<para>
|
|
|
|
|
Cela r<>gle la valeur de $undefined, null par d<>faut.
|
|
|
|
|
N'est actuellement utilis<69> que pour initialiser
|
|
|
|
|
des variables non-d<>finies dans $global_assign <20> des
|
|
|
|
|
valeurs par d<>faut.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.autoload.filters">
|
|
|
|
|
<title>$autoload_filters</title>
|
|
|
|
|
<para>
|
|
|
|
|
Si vous d<>sirez charger des filtres <20> chaque invocation
|
|
|
|
|
de templates, vous pouvez le sp<73>cifier en utilisant cette
|
|
|
|
|
variable. Les types de filtres et les valeurs sont des
|
|
|
|
|
tableaux comportant le nom des filtres.
|
|
|
|
|
<informalexample>
|
|
|
|
|
<programlisting>
|
|
|
|
|
$smarty->autoload_filters = array('pre' => array('trim', 'stamp'),
|
|
|
|
|
'output' => array('convert'));
|
|
|
|
|
</programlisting>
|
|
|
|
|
</informalexample>
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.compile.check">
|
|
|
|
|
<title>$compile_check</title>
|
|
|
|
|
<para>
|
|
|
|
|
A chaque invocation de l'application PHP, Smarty fait
|
|
|
|
|
un test pour voir si le template courant a <20>t<EFBFBD> modifi<66>
|
|
|
|
|
(date de derni<6E>re modification diff<66>rente) depuis sa
|
|
|
|
|
derni<6E>re compilation. S'il a chang<6E>, le template est recompil<69>.
|
|
|
|
|
Si le template n'a pas encore <20>t<EFBFBD> compil<69>, il le sera
|
|
|
|
|
quelle que soit la valeur ce r<>glage.
|
|
|
|
|
Par d<>faut cette valeur est <20> 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 <20> "false" pour des performances
|
|
|
|
|
maximales. Notez que si vous mettez ce param<61>tre <20> "false" et qu'un
|
|
|
|
|
template est modifi<66>, vous ne verrez *pas* le changement
|
|
|
|
|
car le template ne sera *pas* recompil<69>. Si le processus de cache
|
|
|
|
|
est activ<69> et que $compile_check l'est aussi, alors les fichiers
|
|
|
|
|
du cache seront reg<65>n<EFBFBD>r<EFBFBD>s si un template concern<72> ou un fichier de
|
|
|
|
|
configuration concern<72> est modifi<66>. Voir aussi <link
|
|
|
|
|
linkend="variable.force.compile">$force_compile</link> ou <link
|
|
|
|
|
linkend="api.clear.compiled.tpl">clear_compiled_tpl</link>.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.force.compile">
|
|
|
|
|
<title>$force_compile</title>
|
|
|
|
|
<para>
|
|
|
|
|
Cela oblige Smarty <20> (re)compiler les templates <20> chaque
|
|
|
|
|
invocation. Ce r<>glage supplante $compile_check. Par d<>faut, il
|
|
|
|
|
est d<>sactiv<69>. Ceci est commode pour le d<>veloppement et le
|
|
|
|
|
d<>bogage mais ne devrait jamais <20>tre utilis<69> dans un environnment
|
|
|
|
|
de production. Si le syst<73>me de cache est actif, les
|
|
|
|
|
fichiers du cache seront reg<65>n<EFBFBD>r<EFBFBD>s <20> chaque appel.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.caching">
|
|
|
|
|
<title>$caching</title>
|
|
|
|
|
<para>
|
|
|
|
|
Ce param<61>tre demande <20> Smarty de mettre ou non en cache la sortie des
|
|
|
|
|
templates.
|
|
|
|
|
Par d<>faut ce r<>glage est <20> 0 (d<>sactiv<69>). Si vos templates
|
|
|
|
|
g<>n<EFBFBD>rent du contenu redondant, il est conseill<6C> d'activer le
|
|
|
|
|
cache. Cela permettra un gain de performance cons<6E>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 <20> Smarty d'utiliser
|
|
|
|
|
la variable $cache_lifetime pour d<>terminer si le fichier de cache a expir<69>.
|
|
|
|
|
Une valeur de 2 indique <20> Smarty d'utiliser la valeur
|
|
|
|
|
$cache_lifetime sp<73>cifi<66>e <20> la g<>n<EFBFBD>ration du cache. Ainsi vous pouvez r<>gler
|
|
|
|
|
la dur<75>e de vie d'un fichier de cache avant de r<>cup<75>rer le template pour avoir
|
|
|
|
|
un certain contr<74>le quand ce fichier en particulier expire. Voir
|
|
|
|
|
aussi <link linkend="api.is.cached">is_cached</link>.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Si $compile_check est actif, le contenu du cache sera reg<65>n<EFBFBD>r<EFBFBD>
|
|
|
|
|
si un des templates ou un des fichiers de configuration qui fait partie
|
|
|
|
|
de ce fichier de cache a <20>t<EFBFBD> modifi<66>. Si $force_compile est actif, le contenu
|
|
|
|
|
du cache est toujours reg<65>n<EFBFBD>r<EFBFBD>.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.cache.dir">
|
|
|
|
|
<title>$cache_dir</title>
|
|
|
|
|
<para>
|
|
|
|
|
Il s'agit du nom du r<>pertoire o<> les caches des templates
|
|
|
|
|
sont stock<63>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<65>cution.
|
|
|
|
|
</para>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
|
|
|
|
Ce r<>glage doit <20>tre soit un chemin absolu, soit un chemin
|
|
|
|
|
relatif. include_path n'a aucune influence lors de l'<27>criture des fichiers.
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Technical Note</title>
|
|
|
|
|
<para>
|
|
|
|
|
Il n'est pas conseill<6C> de mettre ce r<>pertoire
|
|
|
|
|
dans l'arborescence Web.
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.cache.lifetime">
|
|
|
|
|
<title>$cache_lifetime</title>
|
|
|
|
|
<para>
|
|
|
|
|
Il s'agit de la dur<75>e en secondes pendant laquelle un cache de template
|
|
|
|
|
est valide. Une fois cette dur<75>e d<>pass<73>e, le cache est reg<65>n<EFBFBD>r<EFBFBD>.
|
|
|
|
|
$caching doit <20>tre <20> "true" pour que $cache_lifetime ait une
|
|
|
|
|
quelconque utilit<69>. Avec une valeur de -1, le cache n'expire jamais.
|
|
|
|
|
Avec une valeur de 0, le cache est toujours reg<65>n<EFBFBD>r<EFBFBD> (utile
|
|
|
|
|
<20> des fins de tests seulement. Une meilleure fa<66>on de d<>sactiver
|
|
|
|
|
le cache est de mettre <link
|
|
|
|
|
linkend="variable.caching">$caching</link> <20> "false").
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Si <link linkend="variable.force.compile">$force_compile</link> est
|
|
|
|
|
activ<69>, les fichiers du cache seront reg<65>n<EFBFBD>r<EFBFBD>s <20> chaque fois,
|
|
|
|
|
d<>sactivant ainsi le cache. Vous pouvez effacer tous les fichiers du cache
|
|
|
|
|
avec la function
|
|
|
|
|
<link linkend="api.clear.all.cache">clear_all_cache()</link>
|
|
|
|
|
ou de fa<66>on individuelle (ou group<75>e)
|
|
|
|
|
avec la fonction <link
|
|
|
|
|
linkend="api.clear.cache">clear_cache()</link>.
|
|
|
|
|
</para>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
|
|
|
|
Si vous souhaitez donner <20> certains templates leur propre dur<75>e de vie
|
|
|
|
|
en cache, vous pouvez le faire en r<>glant
|
|
|
|
|
<link linkend="variable.caching">$caching</link> <20> 2,
|
|
|
|
|
puis $cache_lifetime <20> une unique valeur juste avant d'appeler
|
|
|
|
|
display ou fetch().
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.cache.handler.func">
|
|
|
|
|
<title>$cache_handler_func</title>
|
|
|
|
|
<para>
|
|
|
|
|
Vous pouvez utiliser votre propre fonction de gestion du cache plut<75>t que
|
|
|
|
|
d'utiliser celle livr<76>e avec Smarty.
|
|
|
|
|
R<>f<EFBFBD>rez-vous <20> la section sur la fonction de gestion de cache
|
|
|
|
|
personnalis<69>e pour plus de d<>tails.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.cache.modified.check">
|
|
|
|
|
<title>$cache_modified_check</title>
|
|
|
|
|
<para>
|
|
|
|
|
Si cette variable est <20> vrai, Smarty respectera l'en-t<>te
|
|
|
|
|
If-Modified-Since envoy<6F> par le client. Si la date de derni<6E>re
|
|
|
|
|
modification du fichier de cache n'a pas chang<6E> depuis la derni<6E>re
|
|
|
|
|
visite, alors un en-t<>te "304 Not Modified" sera envoy<6F> <20> la place
|
|
|
|
|
du contenu. Cela ne fonctionne qu'avec du contenu mis en cache hors de la
|
|
|
|
|
balise <command>insert</command>.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.config.overwrite">
|
|
|
|
|
<title>$config_overwrite</title>
|
|
|
|
|
<para>
|
|
|
|
|
Si cette variable est <20> vrai, les variables lues dans les fichiers
|
|
|
|
|
de configuration peuvent s'<27>craser entre elles. Sinon les variables
|
|
|
|
|
seront mises dans un tableau. Tr<54>s utile si vous voulez stocker
|
|
|
|
|
des tableaux de donn<6E>es dans des fichiers de configuration, listez
|
|
|
|
|
simplement chaque <20>l<EFBFBD>ment plusieurs fois. Mise <20> faux par d<>faut.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.config.booleanize">
|
|
|
|
|
<title>$config_booleanize</title>
|
|
|
|
|
<para>
|
|
|
|
|
Si cette variable est <20> vrai, les valeurs on/true/yes et off/false/no
|
|
|
|
|
dans les fichiers de configuration sont automitiquement converties
|
|
|
|
|
en bool<6F>en. De cette fa<66>on vous pouvez utiliser ces valeurs dans le
|
|
|
|
|
template de la fa<66>on suivante : {if #foobar#} ... {/if}. Si foobar
|
|
|
|
|
est <20> on, true ou yes, l'instruction {if} sera ex<65>cut<75>e. vrai
|
|
|
|
|
par d<>faut.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.config.read.hidden">
|
|
|
|
|
<title>$config_read_hidden</title>
|
|
|
|
|
<para>
|
|
|
|
|
Si cette variable est <20> vrai, les sections cach<63>s (dont les noms
|
|
|
|
|
commencent par un point) dans les fichiers de configuration peuvent
|
|
|
|
|
<20>tre lues depuis les templates. On laisse habituellement cela <20> faux, de
|
|
|
|
|
cette fa<66>on vous pouvez stocker des donn<6E>es sensibles dans les fichiers
|
|
|
|
|
de configuration, comme par exemple des param<61>tres de base de donn<6E>es,
|
|
|
|
|
sans vous soucier de la fa<66>on dont les templates les chargent.
|
|
|
|
|
Mise <20> faux par d<>faut.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.config.fix.newlines">
|
|
|
|
|
<title>$config_fix_newlines</title>
|
|
|
|
|
<para>
|
|
|
|
|
Si cette variable est mise <20> vrai, les caract<63>res de nouvelles lignes mac et dos
|
|
|
|
|
(\r et \r\n) sont convertis en \n quand ils sont analys<79>s. vrai par d<>faut.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.default.template.handler.func">
|
|
|
|
|
<title>$default_template_handler_func</title>
|
|
|
|
|
<para>
|
|
|
|
|
Cette fonction est appel<65>e quand un template ne peut pas <20>tre
|
|
|
|
|
obtenu avec sa ressource.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.php.handling">
|
|
|
|
|
<title>$php_handling</title>
|
|
|
|
|
<para>
|
|
|
|
|
Indique <20> Smarty comment interpr<70>ter le code PHP
|
|
|
|
|
int<6E>gr<67> 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<75> des balises
|
|
|
|
|
<link linkend="language.function.php">{php}{/php}</link>
|
|
|
|
|
dans le template.
|
|
|
|
|
</para>
|
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem><para>SMARTY_PHP_PASSTHRU - Smarty <20>crit les balises
|
|
|
|
|
telles quelles.</para></listitem>
|
|
|
|
|
<listitem><para>SMARTY_PHP_QUOTE - Smarty transforme les balises
|
|
|
|
|
en entit<69>s HTML.</para></listitem>
|
|
|
|
|
<listitem><para>SMARTY_PHP_REMOVE - Smarty supprime les balises
|
|
|
|
|
des templates.</para></listitem>
|
|
|
|
|
<listitem><para>SMARTY_PHP_ALLOW - Smarty ex<65>cute les balises
|
|
|
|
|
comme du code PHP.</para></listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
<para>
|
|
|
|
|
NOTE : Int<6E>grer du code PHP dans les templates est vivement
|
|
|
|
|
d<>conseill<6C>. Pr<50>f<EFBFBD>rez les
|
|
|
|
|
<link linkend="language.custom.functions">fonctions utilisateurs</link>
|
|
|
|
|
ou les <link linkend="language.modifiers">modificateurs de variables</link>.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.security">
|
|
|
|
|
<title>$security</title>
|
|
|
|
|
<para>
|
|
|
|
|
Cette variable est <20> faux par d<>faut. $security est de rigueur
|
|
|
|
|
quand vous n'<27>tes pas compl<70>tement s<>r des personnes qui <20>ditent les templates
|
|
|
|
|
(par ftp par exemple) et que vous voulez r<>duire le risque que
|
|
|
|
|
la s<>curit<69> du syst<73>me soit compromise par le language de template.
|
|
|
|
|
Activer cette option de s<>curit<69> applique les r<>gles suivantes
|
|
|
|
|
au langage de template, <20> moins que $security_settings ne sp<73>cifie
|
|
|
|
|
le contraire :
|
|
|
|
|
</para>
|
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem><para>Si $php_handling est r<>gl<67>e <20> SMARTY_PHP_ALLOW,
|
|
|
|
|
cela est implicitement chang<6E> <20> SMARTY_PHP_PASSTHRU.</para></listitem>
|
|
|
|
|
<listitem><para>Les fonctions PHP ne sont pas autoris<69>es dans les
|
|
|
|
|
instructions IF, <20> part celles d<>clar<61>es dans
|
|
|
|
|
$security_settings.</para></listitem>
|
|
|
|
|
<listitem><para>Les templates ne peuvent <20>tre inclus que depuis
|
|
|
|
|
des r<>pertoires list<73>s dans le tableau $security_dir.</para></listitem>
|
|
|
|
|
<listitem><para>Les fichiers locaux ne peuvent <20>tre r<>cup<75>r<EFBFBD>s que depuis
|
|
|
|
|
les r<>pertoires list<73>s dans le tableau $security_dir en
|
|
|
|
|
utilisant {fetch}.</para></listitem>
|
|
|
|
|
<listitem><para>Les balises {php}{/php} ne sont pas autoris<69>es.</para></listitem>
|
|
|
|
|
<listitem><para>Les fonctions PHP ne sont pas autoris<69>es en tant
|
|
|
|
|
modificateurs, <20> part celles sp<73>cifi<66>es dans $security_settings.</para></listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.secure.dir">
|
|
|
|
|
<title>$secure_dir</title>
|
|
|
|
|
<para>
|
|
|
|
|
Il s'agit d'un tableau contenant tous les r<>pertoires locaux qui sont
|
|
|
|
|
consid<69>r<EFBFBD>s comme s<>curis<69>s. {include} et {fetch} l'utilisent quand
|
|
|
|
|
la s<>curit<69> est activ<69>e.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.security.settings">
|
|
|
|
|
<title>$security_settings</title>
|
|
|
|
|
<para>
|
|
|
|
|
Ces r<>glages servent <20> <20>craser ou sp<73>cifier les param<61>tres de s<>curit<69>
|
|
|
|
|
quand celle-ci est activ<69>e. Les r<>glages possibles sont les suivants :
|
|
|
|
|
</para>
|
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem><para>PHP_HANDLING - true/false. Si vrai, le
|
|
|
|
|
r<>glage $php_handling n'est pas v<>rifi<66>.</para></listitem>
|
|
|
|
|
<listitem><para>IF_FUNCS - Le tableau des noms de fonctions
|
|
|
|
|
PHP autoris<69>es dans les intructions IF.</para></listitem>
|
|
|
|
|
<listitem><para>INCLUDE_ANY - true/false. Si vrai,
|
|
|
|
|
les templates peuvent <20>tre inclus de n'importe o<>, quelque soit
|
|
|
|
|
le contenu de $secure_dir.</para></listitem>
|
|
|
|
|
<listitem><para>PHP_TAGS - true/false. Si vrai,
|
|
|
|
|
les balises {php}{/php} sont autoris<69>es dans les templates.</para></listitem>
|
|
|
|
|
<listitem><para>MODIFIER_FUNCS - Le tableau des noms de fonctions
|
|
|
|
|
autoris<69>es <20> <20>tre utilis<69>es comme modificateurs de variables.</para></listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.trusted.dir">
|
|
|
|
|
<title>$trusted_dir</title>
|
|
|
|
|
<para>
|
|
|
|
|
$trusted_dir n'est utilis<69>e lorsque $security est activ<69>e. C'est un
|
|
|
|
|
tableau de tous les r<>pertoires qui peuvent <20>tre consid<69>r<EFBFBD>s comme s<>rs.
|
|
|
|
|
Les r<>pertoires s<>rs sont ceux qui contiennent des scripts PHP qui
|
|
|
|
|
sont ex<65>cut<75>s directement depuis les templates avec
|
|
|
|
|
<link linkend="language.function.include.php">{include_php}</link>.
|
2003-05-22 16:36:06 +00:00
|
|
|
|
</para>
|
2003-04-30 18:48:44 +00:00
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.left.delimiter">
|
|
|
|
|
<title>$left_delimiter</title>
|
|
|
|
|
<para>
|
|
|
|
|
Il s'agit du d<>limiteur gauche utilis<69> par le moteur de templates. La
|
|
|
|
|
valeur par d<>faut est "{".
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.right.delimiter">
|
|
|
|
|
<title>$right_delimiter</title>
|
|
|
|
|
<para>
|
|
|
|
|
Il s'agit du d<>limiteur droit utilis<69> par le moteur de templates.
|
|
|
|
|
La valeur par d<>faut est "}".
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.compiler.class">
|
|
|
|
|
<title>$compiler_class</title>
|
|
|
|
|
<para>
|
|
|
|
|
Sp<53>cifie le nom de la classe du compilateur qui va <20>tre utilis<69>e pour
|
|
|
|
|
compiler les templates. Le compilateur par d<>faut est
|
|
|
|
|
'Smarty_Compiler'. R<>serv<72> aux utilisateurs avanc<6E>s.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.request.vars.order">
|
|
|
|
|
<title>$request_vars_order</title>
|
|
|
|
|
<para>
|
|
|
|
|
L'ordre dans lequel les variables de requ<71>tes sont enregistr<74>es,
|
|
|
|
|
identique <20> variables_order dans php.ini.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.compile.id">
|
|
|
|
|
<title>$compile_id</title>
|
|
|
|
|
<para>
|
|
|
|
|
Identifiant persistant du compilateur. On peut passer le m<>me compile_id
|
|
|
|
|
<20> chaque appel de fonction mais une alternative consiste <20> r<>gler ce
|
|
|
|
|
compile_id, qui sera utilis<69> implicitement.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.use.sub.dirs">
|
|
|
|
|
<title>$use_sub_dirs</title>
|
|
|
|
|
<para>
|
|
|
|
|
R<>gler cela <20> faux si votre environnement PHP n'autorise pas Smarty <20> cr<63>er
|
|
|
|
|
des sous-r<>pertoires. Les sous-r<>pertoires sont efficaces, utilisez-les quand
|
|
|
|
|
vous le pouvez.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="variable.default.modifiers">
|
|
|
|
|
<title>$default_modifiers</title>
|
|
|
|
|
<para>
|
|
|
|
|
Il s'agit d'un tableau de modificateurs utilis<69> pour assigner
|
|
|
|
|
une valeur par d<>faut <20> chaque variable dans un template.
|
|
|
|
|
Par exemple, pour par d<>faut <20>chapper les caract<63>res HTML de chaque variable,
|
|
|
|
|
utilisez array('escape:"htmlall"'); Pour rendre une variable ind<6E>pendante
|
|
|
|
|
des modificateurs par d<>faut, passez-lui en param<61>tre le modificateur
|
|
|
|
|
"nodefaults" : {$var|nodefaults}.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
</chapter>
|
|
|
|
|
|
|
|
|
|
<chapter id="api.functions">
|
|
|
|
|
<title>M<>thodes</title>
|
|
|
|
|
<sect1 id="api.append">
|
|
|
|
|
<title>append</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>append</function></funcdef>
|
|
|
|
|
<paramdef>mixed <parameter>var</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>append</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>varname</parameter></paramdef>
|
|
|
|
|
<paramdef>mixed <parameter>var</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>append</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>varname</parameter></paramdef>
|
|
|
|
|
<paramdef>mixed <parameter>var</parameter></paramdef>
|
|
|
|
|
<paramdef>boolean <parameter>merge</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour ajouter un <20>l<EFBFBD>ment <20> un tableau assign<67>. Si vous utilisez
|
|
|
|
|
cette fonction avec une cha<68>ne de caract<63>re, elle est convertie en
|
|
|
|
|
tableau auquel on ajoute ensuite l'<27>l<EFBFBD>ment. Vous pouvez explicitement passer
|
|
|
|
|
des paires nom/valeur. Si vous passez le troisi<73>me param<61>tre
|
|
|
|
|
(optionel) <20> vrai, la valeur sera fusionn<6E>e avec le tableau plut<75>t que
|
|
|
|
|
d'<27>tre ajout<75>e.
|
|
|
|
|
</para>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
|
|
|
|
Le param<61>tre de fusion respecte les cl<63>s des tableaux, ainsi si vous
|
|
|
|
|
fusionnez deux tableaux index<65>s num<75>riquement, ils pourront s'<27>craser
|
|
|
|
|
l'un l'autre ou donner des cl<63>s qui ne se suivent pas. Cela diff<66>re
|
|
|
|
|
donc de la fonction PHP array_merge() qui supprime les cl<63>s num<75>riques
|
|
|
|
|
et les renum<75>rote.
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
<example>
|
|
|
|
|
<title>append</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// passe des paires nom/valeur
|
|
|
|
|
$smarty->append("Name","Fred");
|
|
|
|
|
$smarty->append("Address",$address);
|
|
|
|
|
|
|
|
|
|
// passe un tableau associatif
|
|
|
|
|
$smarty->append(array("city" => "Lincoln","state" => "Nebraska"));</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.append.by.ref">
|
|
|
|
|
<title>append_by_ref</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>append_by_ref</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>varname</parameter></paramdef>
|
|
|
|
|
<paramdef>mixed <parameter>var</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>append_by_ref</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>varname</parameter></paramdef>
|
|
|
|
|
<paramdef>mixed <parameter>var</parameter></paramdef>
|
|
|
|
|
<paramdef>boolean <parameter>merge</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour ajouter des valeurs <20> un template par r<>f<EFBFBD>rence plut<75>t que
|
|
|
|
|
par copie. Si vous ajoutez une variable par r<>f<EFBFBD>rence puis changez sa
|
|
|
|
|
valeur, le changement est aussi r<>percut<75> sur la valeur assign<67>e.
|
|
|
|
|
Pour les objets, append_by_ref ne fait pas de copie en m<>moire de l'objet
|
|
|
|
|
assign<67>. Voir la documentation PHP pour plus d'informations sur les
|
|
|
|
|
r<>f<EFBFBD>rences de variable.
|
|
|
|
|
Si vous passez le troisi<73>me param<61>tre <20> vrai, la valeur sera fusionn<6E>e
|
|
|
|
|
avec le tableau courant plut<75>t que d'<27>tre ajout<75>e.
|
|
|
|
|
</para>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
2003-05-22 16:36:06 +00:00
|
|
|
|
Le param<61>tre de fusion respecte les cl<63>s des tableaux, ainsi si vous
|
|
|
|
|
fusionnez deux tableaux index<65>s num<75>riquement, ils pourront s'<27>craser
|
|
|
|
|
l'un l'autre ou donner des cl<63>s qui ne se suivent pas. Cela diff<66>re
|
|
|
|
|
donc de la fonction PHP array_merge() qui supprime les cl<63>s num<75>riques
|
|
|
|
|
et les renum<75>rote.
|
2003-04-30 18:48:44 +00:00
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
<example>
|
|
|
|
|
<title>append_by_ref</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// ajoute des paires nom/valeur
|
|
|
|
|
$smarty->append_by_ref("Name",$myname);
|
|
|
|
|
$smarty->append_by_ref("Address",$address);</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.assign">
|
|
|
|
|
<title>assign</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>assign</function></funcdef>
|
|
|
|
|
<paramdef>mixed <parameter>var</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>assign</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>varname</parameter></paramdef>
|
|
|
|
|
<paramdef>mixed <parameter>var</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour assigner des valeurs aux templates. Vous pouvez
|
|
|
|
|
explicitement passer des paires nom/valeur, ou des tableaux
|
|
|
|
|
associatifs contenant des paires nom/valeur.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>assign</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// passe des paires nom/valeur
|
|
|
|
|
$smarty->assign("Name","Fred");
|
|
|
|
|
$smarty->assign("Address",$address);
|
|
|
|
|
|
|
|
|
|
// passe un tableau associatif
|
|
|
|
|
$smarty->assign(array("city" => "Lincoln","state" => "Nebraska"));</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.assign.by.ref">
|
|
|
|
|
<title>assign_by_ref</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>assign_by_ref</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>varname</parameter></paramdef>
|
|
|
|
|
<paramdef>mixed <parameter>var</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour assigner des valeurs aux templates par r<>f<EFBFBD>rence plut<75>t
|
|
|
|
|
que par copie. R<>f<EFBFBD>rez-vous au manuel PHP pour une explication plus pr<70>cise
|
|
|
|
|
sur les r<>f<EFBFBD>rences des variables.
|
|
|
|
|
</para>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
|
|
|
|
Si vous assignez une variable par r<>f<EFBFBD>rence puis changez sa
|
|
|
|
|
valeur, le changement est aussi r<>percut<75> sur la valeur assign<67>e.
|
|
|
|
|
Pour les objets, assign_by_ref ne fait pas de copie en m<>moire de l'objet
|
|
|
|
|
assign<67>. R<>f<EFBFBD>rez-vous au manuel PHP pour une explication plus pr<70>cise sur
|
|
|
|
|
les r<>f<EFBFBD>rences de variable.
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
<example>
|
|
|
|
|
<title>assign_by_ref</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// passe des paires noms/valeurs
|
|
|
|
|
$smarty->assign_by_ref("Name",$myname);
|
|
|
|
|
$smarty->assign_by_ref("Address",$address);</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.clear.all.assign">
|
|
|
|
|
<title>clear_all_assign</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>clear_all_assign</function></funcdef>
|
|
|
|
|
<paramdef><parameter></parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour effacer les valeurs de toutes les variables assign<67>es.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>clear_all_assign</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// efface toutes les variables assign<67>es
|
|
|
|
|
$smarty->clear_all_assign();</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.clear.all.cache">
|
|
|
|
|
<title>clear_all_cache</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>clear_all_cache</function></funcdef>
|
|
|
|
|
<paramdef>int <parameter>expire time</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour effacer les fichiers de cache des templates. Vous pouvez passer un
|
|
|
|
|
param<61>tre optionnel afin d'indiquer l'<27>ge minimun que doivent avoir
|
|
|
|
|
les fichiers de cache pour qu'ils soient effac<61>s.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>clear_all_cache</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// efface le cache
|
|
|
|
|
$smarty->clear_all_cache();</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.clear.assign">
|
|
|
|
|
<title>clear_assign</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>clear_assign</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>var</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Efface la valeur d'une variable assign<67>e. Il peut s'agir
|
|
|
|
|
d'une simple valeur ou d'un tableau de valeur.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>clear_assign</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// efface une variable
|
|
|
|
|
$smarty->clear_assign("Name");
|
|
|
|
|
|
|
|
|
|
// efface plusieurs variables
|
|
|
|
|
$smarty->clear_assign(array("Name","Address","Zip"));</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.clear.cache">
|
|
|
|
|
<title>clear_cache</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>clear_cache</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>template</parameter></paramdef>
|
|
|
|
|
<paramdef>string <parameter><optional>cache id</optional></parameter></paramdef>
|
|
|
|
|
<paramdef>string <parameter><optional>compile id</optional></parameter></paramdef>
|
|
|
|
|
<paramdef>int <parameter><optional>expire time</optional></parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>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<73>cifier un en particulier en passant son identifiant
|
|
|
|
|
en deuxi<78>me param<61>tre. Vous pouvez aussi passer un identifiant
|
|
|
|
|
de compilation en troisi<73>me param<61>tre. Vous pouvez grouper des
|
|
|
|
|
templates ensemble afin qu'ils puissent <20>tre supprim<69>s en groupe.
|
|
|
|
|
R<>f<EFBFBD>rez-vous <20> la section sur le
|
|
|
|
|
<link linkend="caching">cache</link>
|
|
|
|
|
pour plus d'informations. Vous pouvez passer un quatri<72>me param<61>tre
|
|
|
|
|
pour indiquer un <20>ge minimum en secondes que le fichier en cache doit
|
|
|
|
|
avoir avant d'<27>tre effac<61>.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>clear_cache</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// efface le fichier de cache de ce template
|
|
|
|
|
$smarty->clear_cache("index.tpl");
|
|
|
|
|
|
|
|
|
|
// efface un fichier de cache gr<67>ce <20> son identifiant de cache
|
|
|
|
|
$smarty->clear_cache("index.tpl","CACHEID");</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.clear.compiled.tpl">
|
|
|
|
|
<title>clear_compiled_tpl</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>clear_compiled_tpl</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>tpl_file</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour effacer la version compil<69>e du template sp<73>cifi<66> ou
|
|
|
|
|
de tous les templates si aucun n'est sp<73>cifi<66>. Cette fonction
|
|
|
|
|
est destin<69>e <20> un usage avanc<6E> et n'est pas habituellement utilis<69>e.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>clear_compiled_tpl</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// efface la version compil<69>e du template sp<73>cifi<66>
|
|
|
|
|
$smarty->clear_compiled_tpl("index.tpl");
|
|
|
|
|
|
|
|
|
|
// efface tout le contenu du r<>pertoire des templates compil<69>s
|
|
|
|
|
$smarty->clear_compiled_tpl();</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.clear.config">
|
|
|
|
|
<title>clear_config</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>clear_config</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter><optional>var</optional></parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour effacer toutes les variables de configuration s'<27>tant
|
|
|
|
|
vues assigner une valeur. Si une variable est sp<73>cifi<66>e, seule cette
|
|
|
|
|
variable est effac<61>e.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>clear_config</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// efface toutes les variables de configuration assign<67>es
|
|
|
|
|
$smarty->clear_config();
|
|
|
|
|
|
|
|
|
|
// efface une seule variable
|
|
|
|
|
$smarty->clear_config('foobar');</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.config.load">
|
|
|
|
|
<title>config_load</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>config_load</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>file</parameter></paramdef>
|
|
|
|
|
<paramdef>string <parameter><optional>section</optional></parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour charger des donn<6E>es d'un fichier de config et les
|
|
|
|
|
assigner <20> un template. Cette fonction fonctionne exactement comme
|
|
|
|
|
la fonction de template <link
|
|
|
|
|
linkend="language.function.config.load">config_load</link>.
|
|
|
|
|
</para>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
|
|
|
|
Comme pour Smarty 2.4.0, les variables de templates assign<67>es
|
|
|
|
|
sont conserv<72>es entre chaque appel <20> fetch et display.
|
|
|
|
|
Les variables de configuration charg<72>es avec config_load sont
|
|
|
|
|
globales. Les fichiers de config sont aussi compil<69>s pour une
|
|
|
|
|
ex<65>cution plus rapide et respecte les r<>glages de <link
|
|
|
|
|
linkend="variable.force.compile">force_compile</link> et de <link
|
|
|
|
|
linkend="variable.compile.check">compile_check</link>.
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
<example>
|
|
|
|
|
<title>config_load</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// charge les variables de configuration et les assigne
|
|
|
|
|
$smarty->config_load('my.conf');
|
|
|
|
|
|
|
|
|
|
// charge une section
|
|
|
|
|
$smarty->config_load('my.conf','foobar');</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.display">
|
|
|
|
|
<title>display</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>display</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>template</parameter></paramdef>
|
|
|
|
|
<paramdef>string <parameter><optional>cache_id</optional></parameter></paramdef>
|
|
|
|
|
<paramdef>string <parameter><optional>compile_id</optional></parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour afficher un template. Il faut fournir un type et un
|
|
|
|
|
chemin de <link
|
|
|
|
|
linkend="template.resources">ressource template</link>
|
|
|
|
|
valides. Vous pouvez passer en second param<61>tre un identifiant
|
|
|
|
|
de fichier de cache. Reportez-vous <20> la section
|
|
|
|
|
<link linkend="caching">cache</link> pour plus de renseignements.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Le troisi<73>me param<61>tre optionnel est un identifiant de compilation.
|
|
|
|
|
Cela s'av<61>re utile quand vous voulez compiler diff<66>rentes versions
|
|
|
|
|
d'un m<>me template, pour par exemple avoir des templates
|
|
|
|
|
compil<69>s s<>par<61>s pour diff<66>rents langages. Une autre utilit<69> de ce
|
|
|
|
|
param<61>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'<27>craseraient
|
|
|
|
|
entre eux. Vous pouvez aussi r<>gler la variable <link
|
|
|
|
|
linkend="variable.compile.id">$compile_id</link> une seule
|
|
|
|
|
fois au lieu de la passer <20> chaque appel.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>affichage</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
include("Smarty.class.php");
|
|
|
|
|
$smarty = new Smarty;
|
|
|
|
|
$smarty->caching = true;
|
|
|
|
|
|
|
|
|
|
// ne fait un appel <20> la base de donn<6E>es que si le fichier
|
|
|
|
|
// de cache n'existe pas
|
|
|
|
|
if(!$smarty->is_cached("index.tpl"))
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
// quelques donn<6E>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");</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
<para>
|
|
|
|
|
Utilisez la syntaxe des <link
|
|
|
|
|
linkend="template.resources">ressources templates</link>
|
|
|
|
|
pour afficher des fichiers en-dehors du r<>pertoire
|
|
|
|
|
$template_dir
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<example>
|
|
|
|
|
<title>exemples de fonction d'affichage de ressources templates</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// 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<70>fixe "file:")
|
|
|
|
|
$smarty->display("file:C:/www/pub/templates/header.tpl");
|
|
|
|
|
|
|
|
|
|
// inclue <20> partir de la ressource template "db"
|
|
|
|
|
$smarty->display("db:header.tpl");</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.fetch">
|
|
|
|
|
<title>fetch</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>string <function>fetch</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>template</parameter></paramdef>
|
|
|
|
|
<paramdef>string <parameter><optional>cache_id</optional></parameter></paramdef>
|
|
|
|
|
<paramdef>string <parameter><optional>compile_id</optional></parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour renvoyer le r<>sultat du template plut<75>t que de l'afficher.
|
|
|
|
|
Il faut passer un type et un chemin de <link
|
|
|
|
|
linkend="template.resources">ressource template</link>
|
|
|
|
|
valides. Vous pouvez passer un identifiant de cache en deuxi<78>me
|
|
|
|
|
param<61>tre. Reportez-vous <20> la section <link linkend="caching">cache
|
|
|
|
|
</link> pour plus de renseignements.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Un troisi<73>me param<61>tre optionnel est un identifiant de compilation.
|
|
|
|
|
Cela s'av<61>re utile quand vous voulez compiler diff<66>rentes versions
|
|
|
|
|
d'un m<>me template, pour par exemple avoir des templates
|
|
|
|
|
compil<69>s s<>par<61>s pour diff<66>rents langages. Une autre utilit<69> de ce
|
|
|
|
|
param<61>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'<27>craseraient entre eux. Vous pouvez aussi r<>gler la variable <link
|
|
|
|
|
linkend="variable.compile.id">$compile_id</link> une seule
|
|
|
|
|
fois plut<75>t que de la passer <20> chaque appel.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>fetch</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
include("Smarty.class.php");
|
|
|
|
|
$smarty = new Smarty;
|
|
|
|
|
|
|
|
|
|
$smarty->caching = true;
|
|
|
|
|
|
|
|
|
|
// ne fait un appel <20> la base de donn<6E>es que si le fichier
|
|
|
|
|
// de cache n'existe pas
|
|
|
|
|
if(!$smarty->is_cached("index.tpl"))
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
// quelques donn<6E>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<75>re le r<>sultat
|
|
|
|
|
$output = $smarty->fetch("index.tpl");
|
|
|
|
|
|
|
|
|
|
// fait quelque chose avec $output
|
|
|
|
|
|
|
|
|
|
echo $output;</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.get.config.vars">
|
|
|
|
|
<title>get_config_vars</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>array <function>get_config_vars</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter><optional>varname</optional></parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Retourne la valeur de la variable de configuration pass<73>e en param<61>tre.
|
|
|
|
|
Si aucun param<61>tre n'est donn<6E>, un tableau de toutes les variables de
|
|
|
|
|
configuration charg<72>es est renvoy<6F>.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>get_config_vars</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// r<>cup<75>re la variable de configuration charg<72>e 'foo'
|
|
|
|
|
$foo = $smarty->get_config_vars('foo');
|
|
|
|
|
|
|
|
|
|
// r<>cup<75>re toutes les variables de configuration charg<72>es
|
|
|
|
|
$config_vars = $smarty->get_config_vars();
|
|
|
|
|
|
|
|
|
|
// les affiche <20> l'<27>cran
|
|
|
|
|
print_r($config_vars);</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.get.registered.object">
|
|
|
|
|
<title>get_registered_object</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>array <function>get_registered_object</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>object_name</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Retourne la r<>f<EFBFBD>rence d'un objet enregistr<74>. Utile quand vous
|
|
|
|
|
voulez acc<63>der directement <20> un objet enregistr<74> avec une
|
|
|
|
|
fonction utilisateur.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>get_registered_object</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
function smarty_block_foo($params, &$smarty) {
|
|
|
|
|
if (isset[$params['object']]) {
|
|
|
|
|
// r<>cup<75>re la r<>f<EFBFBD>rence de l'objet enregistr<74>
|
|
|
|
|
$obj_ref =& $smarty->get_registered_object($params['object']);
|
|
|
|
|
// $obj_ref est maintenant une r<>f<EFBFBD>rence vers l'objet
|
|
|
|
|
}
|
|
|
|
|
}</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.get.template.vars">
|
|
|
|
|
<title>get_template_vars</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>array <function>get_template_vars</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter><optional>varname</optional></parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Retourne la valeur assign<67>e pass<73>e en param<61>tre. Si aucun param<61>tre
|
|
|
|
|
n'est donn<6E>, un tableau de toutes les variables assign<67>es est
|
|
|
|
|
renvoy<6F>.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>get_template_vars</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// r<>cup<75>re la variable 'foo' assign<67>e au template
|
|
|
|
|
// get assigned template var 'foo'
|
|
|
|
|
$foo = $smarty->get_template_vars('foo');
|
|
|
|
|
|
|
|
|
|
// r<>cup<75>re toutes les variables assign<67>es <20> ce template
|
|
|
|
|
$tpl_vars = $smarty->get_template_vars();
|
|
|
|
|
|
|
|
|
|
// les affiche <20> l'<27>cran
|
|
|
|
|
print_r($tpl_vars);</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.is.cached">
|
|
|
|
|
<title>is_cached</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>is_cached</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>template</parameter></paramdef>
|
|
|
|
|
<paramdef>[string <parameter>cache_id</parameter>]</paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Retourne vrai s'il y a un fichier de cache valide pour ce template.
|
|
|
|
|
Cela fonctionne seulement si <link
|
|
|
|
|
linkend="variable.caching">caching</link> est <20> vrai.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>is_cached</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
$smarty->caching = true;
|
|
|
|
|
|
|
|
|
|
if(!$smarty->is_cached("index.tpl")) {
|
|
|
|
|
// faire des requ<71>tes base de donn<6E>es et assigner
|
|
|
|
|
// des variables ici.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$smarty->display("index.tpl");</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
<para>
|
|
|
|
|
Vous pouvez aussi passer en second param<61>tre un identifiant
|
|
|
|
|
de cache au cas o<> vous voudriez plusieurs fichiers de cache
|
|
|
|
|
pour ce template.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>is_cached with multiple-cache template</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
$smarty->caching = true;
|
|
|
|
|
|
|
|
|
|
if(!$smarty->is_cached("index.tpl","FrontPage")) {
|
|
|
|
|
// faire des requ<71>tes base de donn<6E>es et assigner
|
|
|
|
|
// des variables ici.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$smarty->display("index.tpl","FrontPage");</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.load.filter">
|
|
|
|
|
<title>load_filter</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>load_filter</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>type</parameter></paramdef>
|
|
|
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Cette fonction peut <20>tre utilis<69>e pour charger un plugin
|
|
|
|
|
de filtrage. Le premier argument sp<73>cifie le type du filtre
|
|
|
|
|
et peut prendre l'une des valeurs suivantes : 'pre', 'post'
|
|
|
|
|
ou 'output'. Le second argument sp<73>cifie le nom du plugin
|
|
|
|
|
de filtrage, par exemple 'trim'.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>Chargement de plugins de filtrage</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
$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<65> 'datefooter'
|
|
|
|
|
$smarty->load_filter('output', 'compress'); // charge le filtre 'compress' de type 'output'</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.register.block">
|
|
|
|
|
<title>register_block</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>register_block</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
|
|
|
<paramdef>string <parameter>impl</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>clarrer dynamiquement des plugins de fonction
|
|
|
|
|
de blocs. Il faut passer en param<61>tre le nom de la fonction
|
|
|
|
|
de blocs, suivi du nom de la fonction PHP qui l'impl<70>mente.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>register_block</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
/* 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}</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.register.compiler.function">
|
|
|
|
|
<title>register_compiler_function</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>register_compiler_function</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
|
|
|
<paramdef>string <parameter>impl</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>clarer dynamiquement un plugin de fonction
|
|
|
|
|
de compilation. Il faut passer en param<61>tres le nom de la fonction
|
|
|
|
|
de compilation, suivi par la fonction PHP qui
|
|
|
|
|
l'impl<70>mente.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.register.function">
|
|
|
|
|
<title>register_function</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>register_function</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
|
|
|
<paramdef>string <parameter>impl</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>clarer dynamiquement des plugins de fonction
|
|
|
|
|
de templates. Il faut passer en param<61>tres le nom de la fonction
|
|
|
|
|
de templates, suivi par le nom de la fonction PHP qui l'impl<70>mente.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>register_function</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
$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</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.register.modifier">
|
|
|
|
|
<title>register_modifier</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>register_modifier</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
|
|
|
<paramdef>string <parameter>impl</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>clarer dynamiquement un plugin de modificateur.
|
|
|
|
|
Il faut passer en param<61>tre le nom du modificateur de variables,
|
|
|
|
|
suivi de la fonction PHP qui l'impl<70>mente.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>register_modifier</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// associons la fonction PHP stripslashes <20> un modificateur Smarty.
|
|
|
|
|
|
|
|
|
|
$smarty->register_modifier("sslash","stripslashes");
|
|
|
|
|
|
|
|
|
|
// vous pouvez maintenant utiliser {$var|sslash} pour supprimer les slash des variables</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.register.object">
|
|
|
|
|
<title>register_object</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>register_object</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>object_name</parameter></paramdef>
|
|
|
|
|
<paramdef>object <parameter>$object</parameter></paramdef>
|
|
|
|
|
<paramdef>array <parameter>allowed methods/properties</parameter></paramdef>
|
|
|
|
|
<paramdef>boolean <parameter>format</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour enregistrer un objet <20> utiliser dans un template.
|
|
|
|
|
Reportez-vous <20> la section
|
|
|
|
|
<link linkend="advanced.features.objects">objet</link> de
|
|
|
|
|
ce manuel pour des exemples.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.register.outputfilter">
|
|
|
|
|
<title>register_outputfilter</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>register_outputfilter</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>function_name</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>clarer dynamiquement des filtres de sortie, pour
|
|
|
|
|
agir sur la sortie d'un template avant qu'elle ne soit affich<63>e.
|
|
|
|
|
Reportez-vous <20> la section <link linkend="advanced.features.outputfilters">
|
|
|
|
|
filtres de sortie</link> pour plus d'information sur le sujet.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.register.postfilter">
|
|
|
|
|
<title>register_postfilter</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>register_postfilter</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>function_name</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>clarer dynamiquement des filtres de post-compilation pour y faire
|
|
|
|
|
passer des templates une fois qu'ils ont <20>t<EFBFBD> compil<69>s. Reportez-vous
|
|
|
|
|
<20> la section
|
|
|
|
|
<link linkend="advanced.features.postfilters">filtres de post-compilation de templates</link>
|
|
|
|
|
pour avoir plus de renseignements sur la fa<66>on de param<61>trer les fonctions
|
|
|
|
|
de post-compilation.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.register.prefilter">
|
|
|
|
|
<title>register_prefilter</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>register_prefilter</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>function_name</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>clarer dynamiquement des filtres de pr<70>-compilation pour y faire
|
|
|
|
|
passer des templates avant qu'ils ne soient compil<69>s. Reportez-vous
|
|
|
|
|
<20> la section
|
|
|
|
|
<link linkend="advanced.features.postfilters">filtres de pr<70>-compilation de templates</link>
|
|
|
|
|
pour avoir plus de renseignements sur la fa<66>on de param<61>trer les fonctions
|
|
|
|
|
de pr<70>-compilation.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.register.resource">
|
|
|
|
|
<title>register_resource</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>register_resource</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
|
|
|
<paramdef>array <parameter>resource_funcs</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>clarer dynamiquement une ressource plugin
|
|
|
|
|
dans Smarty. Il faut passer en param<61>tre le nom de la ressource
|
|
|
|
|
et le tableau des fonctions PHP qui l'impl<70>mentent. Reportez-vous
|
|
|
|
|
<20> la section <link linkend="template.resources">ressources templates</link>
|
|
|
|
|
pour avoir plus d'informations sur la fa<66>on de param<61>trer une fonction
|
|
|
|
|
r<>cup<75>rant des templates.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>register_resource</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
$smarty->register_resource("db", array("db_get_template",
|
|
|
|
|
"db_get_timestamp",
|
|
|
|
|
"db_get_secure",
|
|
|
|
|
"db_get_trusted"));</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.trigger.error">
|
|
|
|
|
<title>trigger_error</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>trigger_error</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>error_msg</parameter></paramdef>
|
|
|
|
|
<paramdef>[int <parameter>level</parameter>]</paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Cette fonction peut-<2D>tre utilis<69>e pour afficher un message d'erreur
|
|
|
|
|
en utilisant Smarty. Le param<61>tre <parameter>level</parameter>
|
|
|
|
|
peut prendre l'une des valeures utilis<69>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.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="api.template.exists">
|
|
|
|
|
<title>template_exists</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>bool <function>template_exists</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>template</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Cette fonction v<>rifie si le template sp<73>cifi<66> existe. Elle accepte
|
|
|
|
|
soit un chemin vers le template, soit une ressource de type
|
|
|
|
|
cha<68>ne de caract<63>res pr<70>cisant le nom du template.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.unregister.block">
|
|
|
|
|
<title>unregister_block</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>unregister_block</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>sallouer dynamiquement un plugin de fonction
|
|
|
|
|
de blocs. Passez en param<61>tre le nom du bloc.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.unregister.compiler.function">
|
|
|
|
|
<title>unregister_compiler_function</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>unregister_compiler_function</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>sallouer dynamiquement un fonction de compilation.
|
|
|
|
|
Passez en param<61>tre le nom de la fonction de compilation.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.unregister.function">
|
|
|
|
|
<title>unregister_function</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>unregister_function</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>sallouer dynamiquement un plugin de fonction
|
|
|
|
|
de templates. Passez en param<61>tres le nom de la fonction de templates.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>unregister_function</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// nous ne voulons pas que les designers de templates aient acc<63>s
|
|
|
|
|
// au syst<73>me de fichiers.
|
|
|
|
|
|
|
|
|
|
$smarty->unregister_function("fetch");</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.unregister.modifier">
|
|
|
|
|
<title>unregister_modifier</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>unregister_modifier</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>sallouer dynamiquement un plugin modificateur de variable.
|
|
|
|
|
Passez en param<61>tre le nom du modificateur de templates.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>unregister_modifier</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// nous ne voulons pas que les designers de templates
|
|
|
|
|
// suppriment les balises des <20>lements
|
|
|
|
|
|
|
|
|
|
$smarty->unregister_modifier("strip_tags");</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.unregister.object">
|
|
|
|
|
<title>unregister_object</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>unregister_object</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>object_name</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>sallouer un objet.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.unregister.outputfilter">
|
|
|
|
|
<title>unregister_outputfilter</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>unregister_outputfilter</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>function_name</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>sallouer dynamiquement un filtre de sortie.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.unregister.postfilter">
|
|
|
|
|
<title>unregister_postfilter</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>unregister_postfilter</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>function_name</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>sallouer dynamiquement un filtre de post-compilation.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.unregister.prefilter">
|
|
|
|
|
<title>unregister_prefilter</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>unregister_prefilter</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>function_name</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>sallouer dynamiquement un filtre de pr<70>-compilation.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="api.unregister.resource">
|
|
|
|
|
<title>unregister_resource</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>unregister_resource</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Utilis<69>e pour d<>sallouer dynamiquement un plugin ressource.
|
|
|
|
|
Passez en param<61>tre le nom de la ressource.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>unregister_resource</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
$smarty->unregister_resource("db");</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
</chapter>
|
|
|
|
|
|
|
|
|
|
<chapter id="caching">
|
|
|
|
|
<title>Cache</title>
|
|
|
|
|
<para>
|
|
|
|
|
Le cache est utilis<69>e pour acc<63>l<EFBFBD>rer l'appel de <link
|
|
|
|
|
linkend="api.display">display()</link> ou de <link
|
|
|
|
|
linkend="api.fetch">fetch()</link> en sauvegardant leur r<>sultat
|
|
|
|
|
dans un fichier. Si un fichier de cache est disponible lors d'un appel,
|
|
|
|
|
il sera affich<63> sans qu'il ne soit n<>cessaire de reg<65>n<EFBFBD>rer le r<>sultat.
|
|
|
|
|
Le syst<73>me de cache
|
|
|
|
|
peut acc<63>l<EFBFBD>rer les traitements de fa<66>on impressionnante, en particulier les
|
|
|
|
|
templates dont la compilation est tr<74>s longue. Comme le r<>sultat de
|
|
|
|
|
display() ou de fetch() est dans le cache, un fichier de cache peut
|
|
|
|
|
<20>tre compos<6F> de plusieurs fichiers de templates, plusieurs fichiers
|
|
|
|
|
de configuration, etc.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Comme les templates sont dynamiques, il est important de faire attention
|
|
|
|
|
<20> la fa<66>on dont les fichiers de cache sont g<>n<EFBFBD>r<EFBFBD>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 <20>tre int<6E>ressant de mettre cette page
|
|
|
|
|
dans le cache pour une heure ou plus. A l'inverse, si vous affichez une page
|
|
|
|
|
de m<>t<EFBFBD>o mises <20> jour toutes les minutes, mettre cette page en cache
|
|
|
|
|
n'a aucun sens.
|
|
|
|
|
</para>
|
|
|
|
|
<sect1 id="caching.setting.up">
|
|
|
|
|
<title>Param<61>trer le cache</title>
|
|
|
|
|
<para>
|
|
|
|
|
La premi<6D>re chose <20> faire est d'activer le cache. Cela est fait en
|
|
|
|
|
mettant <link linkend="variable.caching">$caching</link> = true
|
|
|
|
|
(ou 1).
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>activation du cache</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
require('Smarty.class.php');
|
|
|
|
|
$smarty = new Smarty;
|
|
|
|
|
|
|
|
|
|
$smarty->caching = true;
|
|
|
|
|
|
|
|
|
|
$smarty->display('index.tpl');</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
<para>
|
|
|
|
|
Avec le cache activ<69>, 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
|
|
|
|
|
<link linkend="variable.cache.dir">$cache_dir</link>. Au prochain appel de
|
|
|
|
|
display('index.tpl'), le fichier de cache sera pr<70>f<EFBFBD>r<EFBFBD> <20> la r<>utilisation
|
|
|
|
|
du template.
|
|
|
|
|
</para>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
|
|
|
|
Les fichiers situ<74>s dans $cache_dir sont nomm<6D>s de la m<>me fa<66>on que les templates.
|
|
|
|
|
Bien qu'ils aient une extension ".php", ils ne sont pas vraiment ex<65>cutable.
|
|
|
|
|
N'<27>ditez surtout pas ces fichiers !
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
<para>
|
|
|
|
|
Tout fichier de cache <20> une dur<75>e de vie limit<69>e d<>termin<69>e par <link
|
|
|
|
|
linkend="variable.cache.lifetime">$cache_lifetime</link>. La valeur par
|
|
|
|
|
d<>faut est 3600 secondes, i.e. 1 heure. Une fois que cette dur<75>e est
|
|
|
|
|
d<>pass<73>e, le cache est reg<65>n<EFBFBD>r<EFBFBD>. Il est possible de donner
|
|
|
|
|
une dur<75>e d'expiration propre <20> chaque fichier de cache en r<>glant
|
|
|
|
|
$caching = 2.
|
|
|
|
|
Se reporter <20> la documentation de <link
|
|
|
|
|
linkend="variable.cache.lifetime">$cache_lifetime</link> pour plus de
|
|
|
|
|
d<>tails.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>r<>glage individuel de cache_lifetime</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
require('Smarty.class.php');
|
|
|
|
|
$smarty = new Smarty;
|
|
|
|
|
|
|
|
|
|
$smarty->caching = 2; // r<>gler la dur<75>e de vie individuellement
|
|
|
|
|
|
|
|
|
|
// r<>gle la dur<75>e de vie du cache <20> 15 minutes pour index.tpl
|
|
|
|
|
$smarty->cache_lifetime = 300;
|
|
|
|
|
$smarty->display('index.tpl');
|
|
|
|
|
|
|
|
|
|
// r<>gle la dur<75>e de vie du cache <20> 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<75>e de vie
|
|
|
|
|
// du fichier de cache de home.tpl a d<>j<EFBFBD> <20>t<EFBFBD> r<>gl<67>e <20> 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');</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
<para>
|
|
|
|
|
Si <link linkend="variable.compile.check">$compile_check</link> est actif,
|
|
|
|
|
chaque fichier de template et de configuration qui a un rapport
|
|
|
|
|
avec le fichier de cache sera v<>rifi<66> pour d<>tecter une <20>ventuelle
|
|
|
|
|
modification. Si l'un de ces fichiers a <20>t<EFBFBD> modifi<66> depuis que le fichier de cache a <20>t<EFBFBD>
|
|
|
|
|
g<>n<EFBFBD>r<EFBFBD>, le cache est imm<6D>diatement reg<65>n<EFBFBD>r<EFBFBD>. Ce processus est co<63>teux, donc,
|
|
|
|
|
pour des raisons de performances, mettez ce param<61>tre <20> false pour une application
|
|
|
|
|
en production.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>activation de $compile_check</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
require('Smarty.class.php');
|
|
|
|
|
$smarty = new Smarty;
|
|
|
|
|
|
|
|
|
|
$smarty->caching = true;
|
|
|
|
|
$smarty->compile_check = true;
|
|
|
|
|
|
|
|
|
|
$smarty->display('index.tpl');</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
<para>
|
|
|
|
|
Si <link linkend="variable.force.compile">$force_compile</link> est actif,
|
|
|
|
|
les fichiers de cache sont toujours reg<65>n<EFBFBD>r<EFBFBD>s. Ceci revient finalement <20>
|
|
|
|
|
d<>sactiver le cache. $force_compile est utilis<69> <20> des fins de d<>bogage,
|
|
|
|
|
un moyen plus efficace de d<>sactiver le cache est de r<>gler
|
|
|
|
|
<link linkend="variable.caching">$caching</link> = false (ou 0).
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
La fonction <link linkend="api.is.cached">is_cached()</link> 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<71>te
|
|
|
|
|
<20> une base de donn<6E>es, vous pouvez utiliser cette m<>thode plut<75>t
|
|
|
|
|
que $compile_check.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>utilisation de is_cached()</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
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');</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
<para>
|
|
|
|
|
Vous pouvez rendre dynamiques seulement certaines parties d'une
|
|
|
|
|
page avec la fonction de templates <link
|
|
|
|
|
linkend="language.function.insert">insert</link>.
|
|
|
|
|
Imaginons que toute une page doit <20>tre mise en cache <20> part
|
|
|
|
|
une banni<6E>re en bas <20> droite. En utilisant une fonction insert pour la
|
|
|
|
|
banni<6E>re, vous pouvez garder cet <20>l<EFBFBD>ment dynamique dans le contenu qui
|
|
|
|
|
est en cache. Reportez-vous <20> la documentation
|
|
|
|
|
<link linkend="language.function.insert">insert</link> pour plus de d<>tails
|
|
|
|
|
et des exemples.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Vous pouvez effacer tous les fichiers du cache avec la fonction <link
|
|
|
|
|
linkend="api.clear.all.cache">clear_all_cache(),</link> ou de fa<66>on
|
|
|
|
|
individuelle (ou par groupe) avec la fonction <link
|
|
|
|
|
linkend="api.clear.cache">clear_cache()</link>.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>nettoyage du cache</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
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');</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="caching.multiple.caches">
|
|
|
|
|
<title>Caches multiples pour une seule page</title>
|
|
|
|
|
<para>
|
|
|
|
|
Vous pouvez avoir plusieurs fichiers de caches pour un m<>me appel
|
|
|
|
|
aux fonctions display() ou fetch(). Imaginons qu'un appel <20> display('index.tpl')
|
|
|
|
|
puisse avoir plusieurs r<>sultats, en fonction de certaines conditions, et que
|
|
|
|
|
vous vouliez des fichiers de cache s<>par<61>s pour chacun d'eux. Vous
|
|
|
|
|
pouvez faire cela en passant un identifiant de cache (cache_id) en
|
|
|
|
|
deuxi<78>me param<61>tre <20> l'appel de fonction.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>Passage d'un cache_id <20> display()</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
require('Smarty.class.php');
|
|
|
|
|
$smarty = new Smarty;
|
|
|
|
|
|
|
|
|
|
$smarty->caching = true;
|
|
|
|
|
|
|
|
|
|
$my_cache_id = $_GET['article_id'];
|
|
|
|
|
|
|
|
|
|
$smarty->display('index.tpl',$my_cache_id);</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
<para>
|
|
|
|
|
Nous passons ci-dessus la variable $my_cache_id <20> display() comme
|
|
|
|
|
identifiant de cache. Pour chaque valeur distincte de $my_cache_id,
|
|
|
|
|
un fichier de cache distinct va <20>tre cr<63><72>. Dans cet exemple,
|
|
|
|
|
"article_id" a <20>t<EFBFBD> pass<73> dans l'URL et est utilis<69> en tant qu'identifiant
|
|
|
|
|
de cache.
|
|
|
|
|
</para>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
|
|
|
|
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 <20> utiliser article_id depuis l'URL puisse para<72>tre
|
|
|
|
|
commode, le r<>sultat peut s'av<61>rer mauvais. L'identifiant
|
|
|
|
|
de cache est utilis<69> pour cr<63>er un r<>pertoire sur le syst<73>me de fichiers,
|
|
|
|
|
donc si l'utilisateur d<>cide de donner une tr<74>s grande valeur <20> article_id
|
|
|
|
|
ou d'<27>crire un script qui envoie des article_id de fa<66>on al<61>atoire,
|
|
|
|
|
cela pourra causer des probl<62>mes cot<6F> serveur. Assurez-vous de bien
|
|
|
|
|
tester toute donn<6E>e pass<73>e en param<61>tre avant de l'utiliser. Dans cet
|
|
|
|
|
exemple, peut-<2D>tre savez-vous que article_id a une longueur de 10
|
|
|
|
|
caract<63>res, est exclusivement compos<6F> de caract<63>res alph-num<75>riques et
|
|
|
|
|
doit avoir une valeur contenue dans la base de donn<6E>es. V<>rifiez-le bien !
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
<para>
|
|
|
|
|
Assurez-vous de bien passer le m<>me identifiant aux fonctions
|
|
|
|
|
<link linkend="api.is.cached">is_cached()</link> et
|
|
|
|
|
<link linkend="api.clear.cache">clear_cache()</link>.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>passer un cache_id <20> is_cached()</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
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);</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
<para>
|
|
|
|
|
Vous pouvez effacer tous les fichiers de cache pour un identifiant
|
|
|
|
|
de cache particulier en passant null en tant que premier param<61>tre
|
|
|
|
|
<20> clear_cache().
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>effacement de tous les fichiers de cache pour un identifiant de cache particulier</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
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");</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
<para>
|
|
|
|
|
De cette mani<6E>re vous pouvez "grouper" vos fichiers de cache en leur
|
|
|
|
|
donnant le m<>me identifiant.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="caching.groups">
|
|
|
|
|
<title>groupes de fichiers de cache</title>
|
|
|
|
|
<para>
|
|
|
|
|
Vous pouvez faire des groupements plus <20>labor<6F>s en param<61>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.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>groupes d'identifiants de cache</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
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");</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
<note>
|
|
|
|
|
<title>Note technique</title>
|
|
|
|
|
<para>
|
|
|
|
|
Le syst<73>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').
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
</sect1>
|
|
|
|
|
</chapter>
|
|
|
|
|
|
|
|
|
|
<chapter id="advanced.features">
|
|
|
|
|
<title>Fonctionnalit<69>s avanc<6E>es</title>
|
|
|
|
|
<sect1 id="advanced.features.objects">
|
|
|
|
|
<title>Objets</title>
|
|
|
|
|
<para>
|
|
|
|
|
Smarty donne l'acc<63>s aux objets PHP <20> travers les templates. Il y
|
|
|
|
|
a 2 moyens d'y avoir acc<63>s. Le premier consiste <20> allouer les objets
|
|
|
|
|
au template puis de les utiliser avec une syntaxe similaire <20> celles
|
|
|
|
|
des fonctions personnalis<69>es. Le deuxi<78>me moyen consiste <20> allouer
|
|
|
|
|
des objets aux templates et de les utiliser comme n'importe quelle
|
|
|
|
|
variable. La premi<6D>re m<>thode a une syntaxe beaucoup plus sympathique.
|
|
|
|
|
Elle est aussi plus s<>curis<69>e, puisqu'un objet allou<6F> ne peut avoir acc<63>s
|
|
|
|
|
qu'<27> certaines m<>thodes et propri<72>t<EFBFBD>s. N<>anmoins, un objet allou<6F>
|
|
|
|
|
ne peut pas avoir de lien sur lui-m<>me ou <20>tre mis dans un tableau
|
|
|
|
|
d'objet, etc. Vous devez choisir la m<>thode qui correspond <20> vos
|
|
|
|
|
besoins, mais t<>chez d'utiliser la premi<6D>re m<>thode autant que possible
|
|
|
|
|
afin de r<>duire la syntaxe des templates au minimum.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Si l'option de s<>curit<69> est activ<69>e, aucune m<>thode ou fonctions priv<69>es
|
|
|
|
|
n'est accessible (commen<65>ant par "_"). S'il existe une m<>thode et une
|
|
|
|
|
propri<72>t<EFBFBD> du m<>me nom, c'est la m<>thode qui sera utilis<69>e.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Vous pouvez restreindre l'acc<63>s aux m<>thodes et aux propri<72>t<EFBFBD>s en
|
|
|
|
|
les listant dans un tableau en tant que troisi<73>me param<61>tre
|
|
|
|
|
d'allocation.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Par d<>faut, les param<61>tres pass<73>s aux objets depuis le templates le sont de la
|
|
|
|
|
m<>me fa<66>on que les fonctions utilisateurs les r<>cup<75>rent.
|
|
|
|
|
Le premier param<61>tre correspond <20> un tableau associatif, le second <20> l'objet
|
|
|
|
|
Smarty. Si vous souhaitez que les param<61>tres soient pass<73>es un <20> un, comme
|
|
|
|
|
dans un appel traditionnel, d<>finissez registration, quatri<72>me param<61>tre optionnel,
|
|
|
|
|
<20> false.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>utilisation d'un objet allou<6F> ou assign<67></title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?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<63>s <20> certaines m<>thodes et propri<72>t<EFBFBD>s en les listant
|
|
|
|
|
$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1'));
|
|
|
|
|
// pour utiliser le format habituel de param<61>tre objet, passez le bool<6F>en = false
|
|
|
|
|
$smarty->register_object("foobar",$myobj,null,false);
|
|
|
|
|
|
|
|
|
|
// on peut aussi assigner des objets. Assignez par r<>f<EFBFBD>rence quand c'est possible
|
|
|
|
|
$smarty->assign_by_ref("myobj", $myobj);
|
|
|
|
|
|
|
|
|
|
$smarty->display("index.tpl");
|
|
|
|
|
?>
|
|
|
|
|
|
|
|
|
|
TEMPLATE:
|
|
|
|
|
|
|
|
|
|
{* acc<63>s <20> notre objet enregistr<74> *}
|
|
|
|
|
{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)}</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
<sect1 id="advanced.features.prefilters">
|
|
|
|
|
<title>Filtres de pr<70>-compilation</title>
|
|
|
|
|
<para>
|
|
|
|
|
Les filtres de pr<70>-compilation sont des fonctions PHP que vos templates
|
|
|
|
|
ex<65>cutent avant qu'ils ne soient compil<69>s. Cela peut <20>tre utile
|
|
|
|
|
pour pr<70>-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<70>-compilations peuvent <20>tre soit
|
|
|
|
|
<link linkend="api.register.prefilter">d<>clar<61>s</link> soit charg<72>s
|
|
|
|
|
<20> partir des r<>pertoires de plugins en utilisant la fonction
|
|
|
|
|
<link linkend="api.load.filter">load_filter()</link> ou en r<>glant
|
|
|
|
|
la variable
|
|
|
|
|
<link linkend="variable.autoload.filters">$autoload_filters</link>.
|
|
|
|
|
Smarty passera <20> la fonction le code source en tant que premier argument,
|
|
|
|
|
et attendra en retour le code modifi<66>.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>Utilisation un filtre de pr<70>-compilation de template</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?php
|
|
|
|
|
// mettre ceci dans votre application
|
|
|
|
|
function remove_dw_comments($tpl_source, &$smarty)
|
|
|
|
|
{
|
|
|
|
|
return preg_replace("/<!--#.*-->/U","",$tpl_source);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// enregistrer le filtre de pr<70>-compilation
|
|
|
|
|
$smarty->register_prefilter("remove_dw_comments");
|
|
|
|
|
$smarty->display("index.tpl");
|
|
|
|
|
?>
|
|
|
|
|
|
|
|
|
|
{* template Smarty index.tpl *}
|
|
|
|
|
<!--# cette ligne va <20>tre supprim<69>e par le filtre de pr<70>-compilation --></programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="advanced.features.postfilters">
|
|
|
|
|
<title>Filtres de post-compilation</title>
|
|
|
|
|
<para>
|
|
|
|
|
Les filtres de post-compilation sont des fonctions PHP que vos templates
|
|
|
|
|
ex<65>cutent apr<70>s avoir <20>t<EFBFBD> compil<69>s. Les filtres de post-compilation peuvent
|
|
|
|
|
<20>tre soit <link linkend="api.register.postfilter">d<>clar<61>s</link> soit charg<72>s
|
|
|
|
|
depuis les r<>pertoires des plugins en utilisant la fonction
|
|
|
|
|
<link linkend="api.load.filter">load_filter()</link> ou en r<>glant
|
|
|
|
|
la variable <link linkend="variable.autoload.filters">$autoload_filters</link>.
|
|
|
|
|
Smarty passera le template compil<69> en tant que premier param<61>tre et attendra
|
|
|
|
|
de la fonction qu'elle retourne le r<>sultat de l'ex<65>cution.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>utilisation d'un filtre de post-compilation de templates</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?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<69> index.tpl *}
|
|
|
|
|
<!-- Created by Smarty! -->
|
|
|
|
|
{* reste du contenu du template... *}</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="advanced.features.outputfilters">
|
|
|
|
|
<title>Filtres de sortie</title>
|
|
|
|
|
<para>
|
|
|
|
|
Quand le template est appel<65> via les fonctions display() ou fetch(),
|
|
|
|
|
sa sortie est envoy<6F>e <20> travers un ou plusieurs filtres de sorties.
|
|
|
|
|
Ils diff<66>rent des filtres de post-compilation dans le sens ou ils agissent
|
|
|
|
|
sur la sortie des templates, une fois ex<65>cut<75>s, et non sur les sources
|
|
|
|
|
des templates.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Les filtres de sortie peuvent <20>tre soit
|
|
|
|
|
<link linkend="api.register.outputfilter">d<>clar<61>s</link> soit
|
|
|
|
|
charg<72>s depuis les r<>pertoires des plugins en utilisant la fonction
|
|
|
|
|
<link linkend="api.load.filter">load_filter()</link>
|
|
|
|
|
ou en r<>glant la variable
|
|
|
|
|
<link linkend="variable.autoload.filters">$autoload_filters</link>.
|
|
|
|
|
Smarty passera la sortie du template en premier argument et attendra
|
|
|
|
|
de la fonction qu'elle retourne le r<>sultat de l'ex<65>cution.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>utilisation d'un filtre de sortie</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?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<6F>navant toute occurence d'un adresse email dans le r<>sultat du template
|
|
|
|
|
// aura un protection simple contre les robots spammers
|
|
|
|
|
?></programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="section.template.cache.handler.func">
|
|
|
|
|
<title>Fonction de gestion du cache</title>
|
|
|
|
|
<para>
|
|
|
|
|
Une alternative au m<>canisme de cache par d<>faut (bas<61> sur des fichiers
|
|
|
|
|
de cache) consiste <20> sp<73>cifier une fonction de gestion de cache utilisateur
|
|
|
|
|
qui sera utilis<69>e pour lire, <20>crire et effacer les fichiers de cache.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Il suffit de cr<63>er dans votre application une fonction que Smarty
|
|
|
|
|
utilisera pour la gestion du cache et d'assigner le nom de cette
|
|
|
|
|
fonction <20> la variable de classe
|
|
|
|
|
<link linkend="variable.cache.handler.func">$cache_handler_func</link>.
|
|
|
|
|
Smarty utilisera alors cette fonction pour g<>rer les donn<6E>es du cache.
|
|
|
|
|
Le premier argument est l'action, qui sera 'read', 'write' ou 'clear'.
|
|
|
|
|
Le second param<61>tre est l'objet Smarty. Le troisi<73>me est le contenu
|
|
|
|
|
du cache. Pour <20>crire, Smarty passe le contenu du cache dans ces param<61>tres.
|
|
|
|
|
Pour lire, Smarty s'attend <20> ce que votre fonction accepte ce param<61>tre
|
|
|
|
|
par r<>f<EFBFBD>rence et que vous le remplissiez avec les donn<6E>es du cache. Pour effacer,
|
|
|
|
|
il suffit de passer une variable fictive car cette derni<6E>re n'est pas utilis<69>e.
|
|
|
|
|
Le quatri<72>me param<61>tre est le nom du fichier de template (utile pour
|
|
|
|
|
lire/<2F>crire), le cinqui<75>me param<61>tre est l'identifiant de cache (optionnel)
|
|
|
|
|
et le sixi<78>me est l'identifiant de compilation.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>exemple d'utilisation de MySQL pour la source du cache</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?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<63>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<75>re le cache dans la base de donn<6E>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<6E>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<6E>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;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
?></programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="template.resources">
|
|
|
|
|
<title>Ressources</title>
|
|
|
|
|
<para>
|
|
|
|
|
Les templates peuvent provenir d'une grande vari<72>t<EFBFBD> de ressources. Quand vous
|
|
|
|
|
affichez ou r<>cup<75>rez un template, ou quand vous incluez un template
|
|
|
|
|
dans un autre template, vous fournissez un type de ressource, suivi
|
|
|
|
|
par le chemin appropri<72> et le nom du template.
|
|
|
|
|
</para>
|
|
|
|
|
<sect2 id="templates.from.template.dir">
|
|
|
|
|
<title>Templates depuis $template_dir</title>
|
|
|
|
|
<para>
|
|
|
|
|
Les templates du r<>pertoire $template_dir n'ont pas
|
|
|
|
|
besoin d'une ressource template, bien que vous puissiez utiliser
|
|
|
|
|
la ressource "file" pour <20>tre coh<6F>rent. Vous n'avez qu'<27> fournir
|
|
|
|
|
le chemin vers le template que vous voulez utiliser, relatif
|
|
|
|
|
au r<>pertoire racine $template_dir.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>Utilisation de templates depuis $template_dir</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// 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 *}</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect2>
|
|
|
|
|
<sect2 id="templates.from.any.dir">
|
|
|
|
|
<title>Templates <20> partir de n'importe quel r<>pertoire</title>
|
|
|
|
|
<para>
|
|
|
|
|
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.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>utilisation d'un template depuis n'importe quel r<>pertoire</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// 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"}</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
|
|
|
|
|
<sect3>
|
|
|
|
|
<title>Chemin de fichiers Windows</title>
|
|
|
|
|
<para>
|
|
|
|
|
Si vous utilisez Windows, les chemins de fichiers sont la plupart
|
|
|
|
|
du temps sur un disque identifi<66> par une lettre (c:) au d<>but du chemin.
|
|
|
|
|
Assurez-vous de bien mettre "file:" dans le chemin pour <20>viter des
|
|
|
|
|
conflits d'espace de nommage et obtenir les r<>sultats escompt<70>s.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>utilisation de templates avec des chemins de fichiers Windows</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// 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"}</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect3>
|
|
|
|
|
</sect2>
|
|
|
|
|
|
|
|
|
|
<sect2 id="templates.from.elsewhere">
|
|
|
|
|
<title>Templates depuis d'autres sources</title>
|
|
|
|
|
<para>
|
|
|
|
|
Vous pouvez r<>cup<75>rer les templates <20> partir n'importe quelle
|
|
|
|
|
source <20> laquelle vous avez acc<63>s avec PHP : base de donn<6E>es,
|
|
|
|
|
sockets, LDAP et ainsi de suite. Il suffit d'<27>crire les fonctions
|
|
|
|
|
de ressource plugins et de les enregistrer aupr<70>s de Smarty.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Reportez-vous <20> la section <link linkend="plugins.resources">ressource plugins</link>
|
|
|
|
|
pour plus d'informations sur les fonctions que vous <20>tes cens<6E> fournir.
|
|
|
|
|
</para>
|
|
|
|
|
<note>
|
|
|
|
|
<para>
|
|
|
|
|
Notez que vous ne pouvez pas <20>craser la ressource <literal>file</literal> native,
|
|
|
|
|
toutefois, vous pouvez fournir une ressource qui r<>cup<75>re un template depuis
|
|
|
|
|
le syst<73>me de fichier par un autre moyen en l'enregistrant sous un autre
|
|
|
|
|
nom de ressource.
|
|
|
|
|
</para>
|
|
|
|
|
</note>
|
|
|
|
|
<example>
|
|
|
|
|
<title>utilisation de ressources utilisateurs</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
// le script PHP
|
|
|
|
|
|
|
|
|
|
// mettez ces fonctions quelque part dans votre application
|
|
|
|
|
function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
|
|
|
|
|
{
|
|
|
|
|
// requ<71>te BD pour r<>cup<75>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<71>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<69>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"}</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect2>
|
|
|
|
|
|
|
|
|
|
<sect2 id="default.template.handler.function">
|
|
|
|
|
<title>Fonction de gestion de template par d<>faut</title>
|
|
|
|
|
<para>
|
|
|
|
|
Vous pouvez sp<73>cifier une fonction qui sera utilis<69>e pour
|
|
|
|
|
r<>cup<75>rer le contenu d'un template dans le cas o<> le template
|
|
|
|
|
ne peut pas <20>tre r<>cup<75>r<EFBFBD> depuis sa ressource. Une utilisation possible est
|
|
|
|
|
la cr<63>ation de templates <20> la vol<6F>e.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>utilisation de la fonction de gestion de template par d<>faut</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?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<63>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';
|
|
|
|
|
?></programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect2>
|
|
|
|
|
</sect1>
|
|
|
|
|
</chapter>
|
|
|
|
|
|
|
|
|
|
<chapter id="plugins">
|
|
|
|
|
<title>Etendre Smarty avec des plugins</title>
|
|
|
|
|
<para>
|
|
|
|
|
La version 2.0 a introduit l'architecture de plugin qui est
|
|
|
|
|
utilis<69>e pour pratiquement toute les fonctionnalit<69>s
|
|
|
|
|
personnalisables de Smarty. Ceci comprend :
|
|
|
|
|
<itemizedlist spacing=compact>
|
|
|
|
|
<listitem><simpara>les fonctions</simpara></listitem>
|
|
|
|
|
<listitem><simpara>les modificateurs</simpara></listitem>
|
|
|
|
|
<listitem><simpara>les fonctions de blocs</simpara></listitem>
|
|
|
|
|
<listitem><simpara>les fonctions de compilation</simpara></listitem>
|
|
|
|
|
<listitem><simpara>les filtres de pr<70>-compilation</simpara></listitem>
|
|
|
|
|
<listitem><simpara>les filtres de post-compilation</simpara></listitem>
|
|
|
|
|
<listitem><simpara>les filtres de sorties</simpara></listitem>
|
|
|
|
|
<listitem><simpara>les ressources</simpara></listitem>
|
|
|
|
|
<listitem><simpara>les insertions</simpara></listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
A part pour les ressources, la compatibilit<69> avec les anciennes
|
|
|
|
|
fa<66>ons d'enregistrer les fonctions de gestion avec l'API register_
|
|
|
|
|
est conserv<72>e. Si vous n'avez pas utilis<69> cette API et que vous avez
|
|
|
|
|
<20> la place directement modifi<66> les variables de classes
|
|
|
|
|
<literal>$custom_funcs</literal>, <literal>$custom_mods</literal> et
|
|
|
|
|
d'autres, vous devez alors modifier vos scripts pour utiliser
|
|
|
|
|
l'API ou convertir vos fonctionnalit<69>s personnalis<69>es en plugins.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<sect1>
|
|
|
|
|
<title>Comment fonctionnent les plugins</title>
|
|
|
|
|
<para>
|
|
|
|
|
Les plugins sont toujours charg<72>s <20> la demande. Seuls les modificateurs
|
|
|
|
|
de variables, les ressources, etc invoqu<71>s dans les scripts de templates
|
|
|
|
|
seront charg<72>s. De plus, chaque plugin n'est charg<72> qu'une fois, et ce
|
|
|
|
|
m<>me si vous avez plusieurs instances de Smarty qui tournent dans
|
|
|
|
|
la m<>me requ<71>te.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Les filtres de post/pr<70>-compilation et les filtres de sortie sont des cas
|
|
|
|
|
un peu sp<73>ciaux.
|
|
|
|
|
Comme ils ne sont pas mentionn<6E>s dans les templates, ils doivent <20>tre d<>clar<61>s
|
|
|
|
|
ou charg<72>s explicitement via les fonctions de l'API avant que le template
|
|
|
|
|
ne soit ex<65>cut<75>. L'ordre dans lequel les filtres multiples d'un m<>me type
|
|
|
|
|
sont ex<65>cut<75>s d<>pend de l'ordre dans lequel ils sont enregistr<74>s ou charg<72>s.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
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.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="plugins.naming.conventions">
|
|
|
|
|
<title>Conventions de nommage</title>
|
|
|
|
|
<para>
|
|
|
|
|
Les fichiers et les fonctions de plugins doivent suivre une convention
|
|
|
|
|
de nommage tr<74>s sp<73>cifique pour <20>tre localis<69>s par Smarty.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Les fichiers de plugins doivent <20>tre nomm<6D>s de la fa<66>on suivante :
|
|
|
|
|
<blockquote>
|
|
|
|
|
<para>
|
|
|
|
|
<filename>
|
|
|
|
|
<replaceable>type</replaceable>.<replaceable>nom</replaceable>.php
|
|
|
|
|
</filename>
|
|
|
|
|
</para>
|
|
|
|
|
</blockquote>
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
O<> <literal>type</literal> est l'une des valeurs suivantes :
|
|
|
|
|
<itemizedlist spacing=compact>
|
|
|
|
|
<listitem><simpara>function</simpara></listitem>
|
|
|
|
|
<listitem><simpara>modifier</simpara></listitem>
|
|
|
|
|
<listitem><simpara>block</simpara></listitem>
|
|
|
|
|
<listitem><simpara>compiler</simpara></listitem>
|
|
|
|
|
<listitem><simpara>prefilter</simpara></listitem>
|
|
|
|
|
<listitem><simpara>postfilter</simpara></listitem>
|
|
|
|
|
<listitem><simpara>outputfilter</simpara></listitem>
|
|
|
|
|
<listitem><simpara>resource</simpara></listitem>
|
|
|
|
|
<listitem><simpara>insert</simpara></listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Et <literal>nom</literal> doit <20>tre un identifiant valide (lettres, nombres
|
|
|
|
|
et underscore seulement).
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Quelques exemples : <literal>function.html_select_date.php</literal>,
|
|
|
|
|
<literal>resource.db.php</literal>,
|
|
|
|
|
<literal>modifier.spacify.php</literal>.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Les fonctions de plugins dans les fichiers de plugins doivent <20>tre
|
|
|
|
|
nomm<6D>es de la fa<66>on suivante :
|
|
|
|
|
<blockquote>
|
|
|
|
|
<para>
|
|
|
|
|
<function>smarty_<replaceable>type</replaceable>_<replaceable>nom</replaceable></function>
|
|
|
|
|
</para>
|
|
|
|
|
</blockquote>
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Les significations de <literal>type</literal> et de <literal>nom</literal> sont les m<>mes
|
|
|
|
|
que pr<70>c<EFBFBD>demment.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Smarty donnera des messages d'erreur appropri<72> si le fichier de plugin
|
|
|
|
|
n'est pas trouv<75>, ou si le fichier ou la fonction de plugin ne sont
|
|
|
|
|
pas nomm<6D>s correctement.
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="plugins.writing">
|
|
|
|
|
<title>Ecrire des plugins</title>
|
|
|
|
|
<para>
|
|
|
|
|
Les plugins peuvent <20>tre soit charg<72>s automatiquement par Smarty
|
|
|
|
|
depuis le syst<73>me de fichier, soit <20>tre d<>clar<61>s
|
|
|
|
|
pendant l'ex<65>cution via une fonction register_* de l'API. Ils peuvent
|
|
|
|
|
aussi <20>tre d<>sallou<6F>s en utilisant une fonction unregister_* de
|
|
|
|
|
l'API.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Pour les plugins qui ne sont pas enregistr<74>s pendant l'ex<65>cution, le nom
|
|
|
|
|
des fonctions n'ont pas <20> suivre la convention de nommage.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Si certaines fonctionnalit<69>s d'un plugin d<>pendent d'un autre plugin
|
|
|
|
|
(comme c'est le cas de certains plugins accompagnant Smarty), alors la mani<6E>re appropri<72>e
|
|
|
|
|
de charger le plugin est la suivante :
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<programlisting>
|
|
|
|
|
require_once SMARTY_DIR . 'plugins/function.html_options.php';</programlisting>
|
|
|
|
|
<para>
|
|
|
|
|
Une r<>gle g<>n<EFBFBD>rale est que chaque objet Smarty est toujours pass<73> au plugin
|
|
|
|
|
en tant que dernier param<61>tre (<28> part pour les modificateurs).
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="plugins.functions"><title>Les fonctions de templates</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>smarty_function_<replaceable>name</replaceable></function></funcdef>
|
|
|
|
|
<paramdef>array <parameter>$params</parameter></paramdef>
|
|
|
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Tous les attributs pass<73>s aux fonctions de template <20> partir du template
|
|
|
|
|
sont contenus dans le tableau associatif <parameter>$params</parameter>.
|
|
|
|
|
Vous pouvez acc<63>der <20> ces valeurs soit directement, par exemple
|
|
|
|
|
<varname>$params['start']</varname>, soit en utilisant
|
|
|
|
|
<varname>extract($params)</varname> pour les importer dans la table
|
|
|
|
|
des symboles.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Le retour de la fonction sera substitu<74>e <20> la balise de fonction
|
|
|
|
|
du template (fonction <function>fetch</function> par exemple). Sinon,
|
|
|
|
|
la fonction peut simplement accomplir une autre t<>che sans sortie
|
|
|
|
|
(la fonction <function>assign</function> par exemple)
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Si la fonction a besoin d'assigner des variables aux templates ou d'utiliser
|
|
|
|
|
d'autres fonctionnalit<69>s fournies par Smarty, elle peut recevoir un
|
|
|
|
|
objet <parameter>$smarty</parameter> pour cela.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
R<>f<EFBFBD>rez-vous aussi <20> :
|
|
|
|
|
<link linkend="api.register.function">register_function()</link>,
|
|
|
|
|
<link linkend="api.unregister.function">unregister_function()</link>.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>fonction de plugin avec sortie</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?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];
|
|
|
|
|
}
|
|
|
|
|
?></programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
peut <20>tre utilis<69>e dans le template de la fa<66>on suivante :
|
|
|
|
|
</para>
|
|
|
|
|
<programlisting>
|
|
|
|
|
Question: Will we ever have time travel?
|
|
|
|
|
Answer: {eightball}.</programlisting>
|
|
|
|
|
<para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>fonction de plugin sans sortie</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?php
|
|
|
|
|
/*
|
|
|
|
|
* Smarty plugin
|
|
|
|
|
* -------------------------------------------------------------
|
|
|
|
|
* Fichier : function.assign.php
|
|
|
|
|
* Type : fonction
|
|
|
|
|
* Nom : assign
|
|
|
|
|
* Purpose : assigne une valeur <20> 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);
|
|
|
|
|
}
|
|
|
|
|
?></programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</para>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="plugins.modifiers"><title>Modificateurs</title>
|
|
|
|
|
<para>
|
|
|
|
|
Les modificateurs sont des petites fonctions appliqu<71>es <20> une variable
|
|
|
|
|
de template avant qu'elle ne soit affich<63>e ou utilis<69>e dans un autre contexte.
|
|
|
|
|
Les modificateurs peuvent <20>tre cha<68>n<EFBFBD>s entre eux.
|
|
|
|
|
</para>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>mixed <function>smarty_modifier_<replaceable>name</replaceable></function></funcdef>
|
|
|
|
|
<paramdef>mixed <parameter>$value</parameter></paramdef>
|
|
|
|
|
<paramdef>[mixed <parameter>$param1</parameter>, ...]</paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Le premier param<61>tre pass<73> au modificateur est la valeur
|
|
|
|
|
sur laquelle le modificateur est suppos<6F> op<6F>rer. Les autres param<61>tres
|
|
|
|
|
peuvent <20>tre optionnels, d<>pendant de quel genre d'op<6F>ration doit <20>tre
|
|
|
|
|
effectu<74>.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Le modificateur doit retourner le r<>sultat de son ex<65>cution.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Regardez aussi
|
|
|
|
|
<link linkend="api.register.modifier">register_modifier()</link>,
|
|
|
|
|
<link linkend="api.unregister.modifier">unregister_modifier()</link>.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>plugin modificateur simple</title>
|
|
|
|
|
<para>
|
|
|
|
|
Ce plugin est un alias d'une fonction PHP. Il n'a aucun param<61>tre
|
|
|
|
|
suppl<70>mentaires.
|
|
|
|
|
</para>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?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);
|
|
|
|
|
}
|
|
|
|
|
?></programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
<para></para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>un plugin modificateur un peu plus complexe</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?php
|
|
|
|
|
/*
|
|
|
|
|
* Smarty plugin
|
|
|
|
|
* -------------------------------------------------------------
|
|
|
|
|
* Fichier : modifier.truncate.php
|
|
|
|
|
* Type : modificateur
|
|
|
|
|
* Name : truncate
|
|
|
|
|
* R<>le : Tronque une cha<68>ne <20> une certaine longueur si
|
|
|
|
|
* n<>cessaire, la coupe optionnellement au milieu
|
|
|
|
|
* d'un mot et ajoute la cha<68>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;
|
|
|
|
|
}
|
|
|
|
|
?></programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="plugins.block.functions"><title>Fonctions de blocs</title>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>void <function>smarty_block_<replaceable>name</replaceable></function></funcdef>
|
|
|
|
|
<paramdef>array <parameter>$params</parameter></paramdef>
|
|
|
|
|
<paramdef>mixed <parameter>$content</parameter></paramdef>
|
|
|
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Les fonctions de blocs sont des fonctions de la forme {func} .. {/func}.
|
|
|
|
|
En d'autres mots, elles englobent des blocs de template et op<6F>rent sur les
|
|
|
|
|
contenus de ces blocs. Les fonctions de blocs ont la priorit<69> 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}.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
L'impl<70>mentation de votre fonction est appel<65>e deux fois par Smarty :
|
|
|
|
|
une fois pour la balise ouvrante et une autre fois pour la balise
|
|
|
|
|
fermante.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Seule la balise ouvrante d'une fonction de bloc peut avoir des attributs.
|
|
|
|
|
Tous les attributs pass<73>s par le template aux fonctions de templates sont
|
|
|
|
|
contenues dans le tableau associatif <parameter>$params</parameter>.
|
|
|
|
|
Vous pouvez acc<63>der <20> ces valeurs soit directement, par exemple
|
|
|
|
|
<varname>$params['start']</varname>, soit en utilisant
|
|
|
|
|
<varname>extract($params)</varname> pour les importer dans la table
|
|
|
|
|
des symboles. Votre fonction a aussi acc<63>s aux attributs de la balise
|
|
|
|
|
ouvrante quand c'est la balise fermante qui est ex<65>cut<75>e.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
La valeur de la variable <parameter>$content</parameter> est diff<66>rente
|
|
|
|
|
selon si votre fonction est appel<65>e pour la balise ouvrante ou la
|
|
|
|
|
balise fermante. Si c'est pour la balise ouvrante, elle sera <20>
|
|
|
|
|
<literal>null</literal> et si c'est la balise fermante elle sera
|
|
|
|
|
<20>gale au contenu du bloc de template. Notez que le bloc de template
|
|
|
|
|
aura d<>j<EFBFBD> <20>t<EFBFBD> ex<65>cut<75> par Smarty, vous recevrez donc la sortie du
|
|
|
|
|
template et non sa source.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Si vous imbriqu<71> des fonctions de bloc, il est possible de conna<6E>tre
|
|
|
|
|
la fonction de bloc parente gr<67>ce <20> la variable <varname>$smarty->_tag_stack</varname>.
|
|
|
|
|
Faites un var_dump() dessus et la structure devrait appara<72>tre.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Regardez aussi :
|
|
|
|
|
<link linkend="api.register.block">register_block()</link>,
|
|
|
|
|
<link linkend="api.unregister.block">unregister_block()</link>.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>fonction de bloc</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?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;
|
|
|
|
|
}
|
|
|
|
|
}</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="plugins.compiler.functions"><title>Fonctions de compilation</title>
|
|
|
|
|
<para>
|
|
|
|
|
Les fonctions de compilation sont appel<65>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<69>e ont le m<>me
|
|
|
|
|
nom, la fonction de compilation a priorit<69>.
|
|
|
|
|
</para>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>mixed <function>smarty_compiler_<replaceable>name</replaceable></function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>$tag_arg</parameter></paramdef>
|
|
|
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Les fonctions de compilation ont deux param<61>tres : une cha<68>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<6E>es retourner le code PHP qui doit <20>tre
|
|
|
|
|
inject<63> dans le template compil<69>.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Regardez aussi
|
|
|
|
|
<link linkend="api.register.compiler.function">register_compiler_function()</link>,
|
|
|
|
|
<link linkend="api.unregister.compiler.function">unregister_compiler_function()</link>.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>fonction de compilation simple</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?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'). "';";
|
|
|
|
|
}
|
|
|
|
|
?></programlisting>
|
|
|
|
|
<para>
|
|
|
|
|
Cette fonction peut-<2D>tre appel<65> depuis le template comme suivant :
|
|
|
|
|
</para>
|
|
|
|
|
<programlisting>
|
|
|
|
|
{* cette fonction n'est execut<75>e que lors de la compilation *}
|
|
|
|
|
{tplheader}</programlisting>
|
|
|
|
|
<para>
|
|
|
|
|
Le code PHP r<>sultant dans les templates compil<69>s ressemblerait <20> <20>a :
|
|
|
|
|
</para>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<php
|
|
|
|
|
echo 'index.tpl compiled at 2002-02-20 20:02';
|
|
|
|
|
?></programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="plugins.prefilters.postfilters">
|
|
|
|
|
<title>filtres de pr<70>-compilation/filtres de post-compilation</title>
|
|
|
|
|
<para>
|
|
|
|
|
Les filtres de pr<70>-compilation et les filtres de post-compilation ont des concepts tr<74>s
|
|
|
|
|
proches. Ils diff<66>rent dans leur ex<65>cution, plus pr<70>cis<69>ment dans le
|
|
|
|
|
moment o<> ils sont ex<65>cut<75>s.
|
|
|
|
|
</para>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>string <function>smarty_prefilter_<replaceable>name</replaceable></function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>$source</parameter></paramdef>
|
|
|
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Les filtres de pr<70>-compilation sont utilis<69>s pour transformer la source d'un template
|
|
|
|
|
juste avant la compilation. Le premier param<61>tre pass<73> <20> la fonction
|
|
|
|
|
de filtre de pr<70>-compilation est la source du template, <20>ventuellement modifi<66>e par
|
|
|
|
|
d'autres filtre de pr<70>-compilations. Le plugin est suppos<6F> retourner la source modifi<66>e.
|
|
|
|
|
Notez que cette source n'est sauvegard<72>e nulle part, elle est seulement
|
|
|
|
|
utilis<69> pour la compilation.
|
|
|
|
|
</para>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>string <function>smarty_postfilter_<replaceable>name</replaceable></function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>$compiled</parameter></paramdef>
|
|
|
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Les filtres de post-compilation sont utilis<69>s pour modifier la sortie du template
|
|
|
|
|
(le code PHP) juste apr<70>s que la compilation a <20>t<EFBFBD> faite mais juste
|
|
|
|
|
avant que le template ne soit sauvegard<72> sur le syst<73>me de fichiers.
|
|
|
|
|
Le premier param<61>tre pass<73> <20> la fonction de filtre de post-compilation est le code
|
|
|
|
|
du template compil<69>, <20>ventuellement d<>j<EFBFBD> modifi<66> par d'autres filtre de post-compilations.
|
|
|
|
|
Le plugin est cens<6E> retourner la version modifi<66> du code.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>plugin de filtre de post-compilation</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?php
|
|
|
|
|
/*
|
|
|
|
|
* Smarty plugin
|
|
|
|
|
* -------------------------------------------------------------
|
|
|
|
|
* Fichier : prefilter.pre01.php
|
|
|
|
|
* Type : filtre de pr<70>-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);
|
|
|
|
|
}
|
|
|
|
|
?></programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
<para></para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>plugin de filtre de post-compilation</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?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;
|
|
|
|
|
}
|
|
|
|
|
?></programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="plugins.outputfilters"><title>Filtres de sortie</title>
|
|
|
|
|
<para>
|
|
|
|
|
Les plugins de filtres de sortie op<6F>rent sur la sortie du template,
|
|
|
|
|
apr<70>s que le template a <20>t<EFBFBD> charg<72> et ex<65>cut<75>, mais avant que
|
|
|
|
|
la sortie ne soit affich<63>e.
|
|
|
|
|
</para>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>string <function>smarty_outputfilter_<replaceable>name</replaceable></function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>$template_output</parameter></paramdef>
|
|
|
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Le premier param<61>tre pass<73> <20> la fonction du filtre de sortie est la
|
|
|
|
|
sortie du template qui doit <20>tre modifi<66>e et le second param<61>tre
|
|
|
|
|
est l'instance de Smarty appelant le plugin. Le plugin est suppos<6F>
|
|
|
|
|
faire un traitement et en retourner le r<>sultat.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>plugin de filtre de sortie</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
/*
|
|
|
|
|
* Smarty plugin
|
|
|
|
|
* -------------------------------------------------------------
|
|
|
|
|
* Fichier : outputfilter.protect_email.php
|
|
|
|
|
* Type : filtre de sortie
|
|
|
|
|
* Nom : protect_email
|
|
|
|
|
* R<>le: Convertie les @ en %40 pour prot<6F>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);
|
|
|
|
|
}
|
|
|
|
|
</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="plugins.resources"><title>Ressources</title>
|
|
|
|
|
<para>
|
|
|
|
|
Les plugins ressources sont un moyen g<>n<EFBFBD>rique de fournir des sources
|
|
|
|
|
de templates ou des composants de scripts PHP <20> Smarty. Quelques exemples
|
|
|
|
|
de ressources : bases de donn<6E>es, LDAP, m<>moire partag<61>e, sockets, et ainsi
|
|
|
|
|
de suite.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Il y au total 4 fonctions qui ont besoin d'<27>tre enregistr<74>es pour
|
|
|
|
|
chaque type de ressource. Chaque fonction re<72>oit le nom de la ressource demand<6E>e
|
|
|
|
|
comme premier param<61>tre et l'objet Smarty comme dernier param<61>tre.
|
|
|
|
|
Les autres param<61>tres d<>pendent de la fonction.
|
|
|
|
|
</para>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_source</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>$rsrc_name</parameter></paramdef>
|
|
|
|
|
<paramdef>string <parameter>&$source</parameter></paramdef>
|
|
|
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_timestamp</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>$rsrc_name</parameter></paramdef>
|
|
|
|
|
<paramdef>int <parameter>&$timestamp</parameter></paramdef>
|
|
|
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_secure</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>$rsrc_name</parameter></paramdef>
|
|
|
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_trusted</function></funcdef>
|
|
|
|
|
<paramdef>string <parameter>$rsrc_name</parameter></paramdef>
|
|
|
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
La premi<6D>re fonction est suppos<6F>e r<>cup<75>rer la ressource. Son second
|
|
|
|
|
param<61>tre est une variable pass<73>e par r<>f<EFBFBD>rence o<> le r<>sultat doit <20>tre
|
|
|
|
|
stock<63>. La fonction est suppos<6F>e retourner <literal>true</literal> si
|
|
|
|
|
elle r<>ussi <20> r<>cup<75>rer la ressource et <literal>false</literal> sinon.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
La seconde fonction est suppos<6F>e r<>cup<75>rer la date de derni<6E>re modification
|
|
|
|
|
de la ressource demand<6E>e (comme un timestamp UNIX). Le second param<61>tre
|
|
|
|
|
est une variable pass<73>e par r<>f<EFBFBD>rence dans laquelle la date doit
|
|
|
|
|
<20>tre stock<63>e. La fonction est suppos<6F>e renvoyer <literal>true</literal> si elle
|
|
|
|
|
a r<>ussi <20> r<>cup<75>rer la date et <literal>false</literal> sinon.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
La troisi<73>me fonction est suppos<6F>e retourner <literal>true</literal>
|
|
|
|
|
ou <literal>false</literal> selon si la ressource demand<6E>e est s<>re
|
|
|
|
|
ou non. La fonction est utilis<69>e seulement pour les ressources templates
|
|
|
|
|
mais doit tout de m<>me <20>tre d<>finie.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
La quatri<72>me fonction est suppos<6F>e retourner <literal>true</literal>
|
|
|
|
|
ou <literal>false</literal> selon si on peut faire confiance ou
|
|
|
|
|
non <20> la ressource demand<6E>e. Cette fonction est utilis<69>e seulement
|
|
|
|
|
pour les composants de scripts PHP demand<6E>s par les balises
|
|
|
|
|
<command>include_php</command> ou <command>insert</command>
|
|
|
|
|
ayant un attribut <structfield>src</structfield>. Quoiqu'il en soit,
|
|
|
|
|
elle doit <20>tre d<>finie pour les ressources templates.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
Regardez aussi
|
|
|
|
|
<link linkend="api.register.resource">register_resource()</link>,
|
|
|
|
|
<link linkend="api.unregister.resource">unregister_resource()</link>.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>resource plugin</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?php
|
|
|
|
|
/*
|
|
|
|
|
* Smarty plugin
|
|
|
|
|
* -------------------------------------------------------------
|
|
|
|
|
* Fichier : resource.db.php
|
|
|
|
|
* Type : ressource
|
|
|
|
|
* Nom : db
|
|
|
|
|
* R<>le : R<>cup<75>re des templates depuis une base de donn<6E>es
|
|
|
|
|
* -------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty)
|
|
|
|
|
{
|
|
|
|
|
// fait des requ<71>tes BD pour r<>cup<75>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<71>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<69>e pour les templates
|
|
|
|
|
}
|
|
|
|
|
?></programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="plugins.inserts"><title>Insertions</title>
|
|
|
|
|
<para>
|
|
|
|
|
Les plugins d'insertion sont utilis<69>s pour impl<70>menter les fonctions
|
|
|
|
|
qui sont appel<65>es par les balises
|
|
|
|
|
<link linkend="language.function.insert"><command>insert</command></link>
|
|
|
|
|
dans les templates.
|
|
|
|
|
</para>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>string <function>smarty_insert_<replaceable>name</replaceable></function></funcdef>
|
|
|
|
|
<paramdef>array <parameter>$params</parameter></paramdef>
|
|
|
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
<para>
|
|
|
|
|
Le premier param<61>tre pass<73> <20> la fonction est une tableau associatif
|
|
|
|
|
d'attributs. Vous pouvez acc<63>der <20> ces valeurs soit directement, par exemple
|
|
|
|
|
<varname>$params['start']</varname>, soit en utilisant
|
|
|
|
|
<varname>extract($params)</varname> pour les importer dans la table
|
|
|
|
|
des symboles.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
La fonction d'insertion est suppos<6F>e retourner le r<>sultat qui sera
|
|
|
|
|
substitu<74> <20> la balise <command>insert</command> dans le template.
|
|
|
|
|
</para>
|
|
|
|
|
<example>
|
|
|
|
|
<title>plugin d'insertion</title>
|
|
|
|
|
<programlisting>
|
|
|
|
|
<?php
|
|
|
|
|
/*
|
|
|
|
|
* Smarty plugin
|
|
|
|
|
* -------------------------------------------------------------
|
|
|
|
|
* Fichier : insert.time.php
|
|
|
|
|
* Type : temps
|
|
|
|
|
* Nom : time
|
|
|
|
|
* R<>le : Insert la date/heure courante conform<72>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;
|
|
|
|
|
}
|
|
|
|
|
?></programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
</sect1>
|
|
|
|
|
</chapter>
|
|
|
|
|
</part>
|