sync with EN & typo

This commit is contained in:
yannick
2004-12-26 15:03:10 +00:00
parent 0d8f2cbd36
commit 42fd57727b
12 changed files with 377 additions and 264 deletions

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: nobody Status: partial --> <!-- EN-Revision: 1.4 Maintainer: yannick Status: ready -->
<chapter id="advanced.features"> <chapter id="advanced.features">
<title>Fonctionnalit<EFBFBD>s avanc<6E>es</title> <title>Fonctionnalit<EFBFBD>s avanc<6E>es</title>
&programmers.advanced-features.advanced-features-objects; &programmers.advanced-features.advanced-features-objects;

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: nobody Status: partial --> <!-- EN-Revision: 1.3 Maintainer: yannick Status: ready -->
<sect1 id="advanced.features.objects"> <sect1 id="advanced.features.objects">
<title>Objets</title> <title>Objets</title>
<para> <para>
Smarty donne l'acc<63>s aux objets PHP a travers les templates. Il y Smarty donne l'acc<63>s aux objets PHP <EFBFBD> travers les templates. Il y
a 2 moyens d'y avoir acc<63>s. Le premier consiste a allouer les objets a 2 moyens d'y avoir acc<63>s. Le premier consiste a allouer les objets
au template puis de les utiliser avec une syntaxe similaire a celles au template puis de les utiliser avec une syntaxe similaire a celles
des fonctions personnalis<69>es. Le deuxi<78>me moyen consiste a allouer des fonctions personnalis<69>es. Le deuxi<78>me moyen consiste a allouer
@@ -28,23 +28,38 @@
d'allocation. d'allocation.
</para> </para>
<para> <para>
Par d<>faut, les param<61>tres pass<73>s aux objets depuis le templates le sont de la Par d<>faut, les param<61>tres pass<73>s aux objets depuis le template le sont de la
m<>me faton que les fonctions utilisateurs les r<>cup<75>rent. m<>me fa<EFBFBD>on que les fonctions utilisateurs les r<>cup<75>rent.
Le premier param<61>tre correspond a un tableau associatif, le second a l'objet Le premier param<61>tre correspond <EFBFBD> un tableau associatif, le second <EFBFBD> l'objet
Smarty. Si vous souhaitez que les param<61>tres soient pass<73>es un a un, comme Smarty. Si vous souhaitez que les param<61>tres soient pass<73>s un <EFBFBD> un, comme
dans un appel traditionnel, d<>finissez registration, quatri<72>me param<61>tre optionnel, dans un appel traditionnel, d<>finissez registration, quatri<72>me param<61>tre optionnel,
a false. <EFBFBD> false.
</para>
<para>
Le cinqui<75>me param<61>tre optionnel n'a d'effet que si le param<61>tre
<parameter>format</parameter> vaut <literal>true</literal> et il contient
une liste de m<>thodes qui doivent <20>tre trait<69>es comme des blocks. Cel<65> signifie
que ces m<>thodes ont un tag fermant dans le template
(<literal>{foobar->meth2}...{/foobar->meth2}</literal>) et que les param<61>tres
de ces m<>thodes fonctionnent de la m<>me fa<66>on que les param<61>tres des blocks
de fonctions des plugins : Ils contiennent 4 param<61>tres
<parameter>$params</parameter>,
<parameter>$content</parameter>,
<parameter>&amp;$smarty</parameter> et
<parameter>&amp;$repeat</parameter> et ils fonctionnent de la m<>me
fa<66>on que les blocks de fonctions des plugins.
</para> </para>
<example> <example>
<title>utilisation d'un objet allou<6F> ou assign<67></title> <title>Utilisation d'un objet allou<6F> ou assign<67></title>
<programlisting> <programlisting role="php">
&lt;?php <![CDATA[
<?php
// la classe // la classe
class My_Object() { class My_Object() {
function meth1($params, &amp;$smarty_obj) { function meth1($params, &$smarty_obj) {
return "this is my meth1"; return "this is my meth1";
} }
} }
$myobj = new My_Object; $myobj = new My_Object;
@@ -59,10 +74,16 @@ $smarty->register_object("foobar",$myobj,null,false);
$smarty->assign_by_ref("myobj", $myobj); $smarty->assign_by_ref("myobj", $myobj);
$smarty->display("index.tpl"); $smarty->display("index.tpl");
?&gt; ?>
TEMPLATE:
?>
]]>
</programlisting>
<para>
Et voici comment acc<63>der <20> vos objets dans index.tpl:
</para>
<programlisting>
<![CDATA[
{* acc<63>s a notre objet enregistr<74> *} {* acc<63>s a notre objet enregistr<74> *}
{foobar->meth1 p1="foo" p2=$bar} {foobar->meth1 p1="foo" p2=$bar}
@@ -71,7 +92,9 @@ TEMPLATE:
the output was {$output) the output was {$output)
{* access our assigned object *} {* access our assigned object *}
{$myobj->meth1("foo",$bar)}</programlisting> {$myobj->meth1("foo",$bar)}
]]>
</programlisting>
</example> </example>
</sect1> </sect1>
<!-- Keep this comment at the end of the file <!-- Keep this comment at the end of the file

View File

@@ -1,31 +1,33 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: nobody Status: partial --> <!-- EN-Revision: 1.2 Maintainer: yannick Status: ready -->
<sect1 id="advanced.features.outputfilters"> <sect1 id="advanced.features.outputfilters">
<title>Filtres de sortie</title> <title>Filtres de sortie</title>
<para> <para>
Quand le template est appel<65> via les fonctions display() ou fetch(), Quand le template est appel<65> via les fonctions display() ou fetch(),
sa sortie est envoy<6F>e a travers un ou plusieurs filtres de sorties. sa sortie est envoy<6F>e <EFBFBD> travers un ou plusieurs filtres de sorties.
Ils diff<66>rent des filtres de post-compilation dans le sens ou ils agissent Ils diff<66>rent des filtres de post-compilation dans le sens o<EFBFBD> ils agissent
sur la sortie des templates, une fois ex<65>cut<75>s, et non sur les sources sur la sortie des templates, une fois ex<65>cut<75>s, et non sur les sources
des templates. des templates.
</para> </para>
<para> <para>
Les filtres de sortie peuvent <20>tre soit Les filtres de sortie peuvent <20>tre soit
<link linkend="api.register.outputfilter">d<EFBFBD>clar<EFBFBD>s</link> soit <link linkend="api.register.outputfilter">d<EFBFBD>clar<EFBFBD>s</link> soit
charg<EFBFBD>s depuis les r<>pertoires des plugins en utilisant la fonction charg<72>s depuis les r<>pertoires des plugins en utilisant la fonction
<link linkend="api.load.filter">load_filter()</link> <link linkend="api.load.filter">load_filter()</link>
ou en r<>glant la variable ou en r<>glant la variable
<link linkend="variable.autoload.filters">$autoload_filters</link>. <link linkend="variable.autoload.filters">$autoload_filters</link>.
Smarty passera la sortie du template en premier argument et attendra 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. de la fonction qu'elle retourne le r<>sultat de l'ex<65>cution.
</para> </para>
<example> <example>
<title>utilisation d'un filtre de sortie</title> <title>Utilisation d'un filtre de sortie</title>
<programlisting> <programlisting>
&lt;?php <![CDATA[
<?php
// mettez ceci dans votre application // mettez ceci dans votre application
function protect_email($tpl_output, &amp;$smarty) function protect_email($tpl_output, &$smarty)
{ {
$tpl_output = $tpl_output =
preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!', preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
@@ -39,9 +41,11 @@ $smarty->display("index.tpl");
// dor<6F>navant toute occurence d'un adresse email dans le r<>sultat du template // dor<6F>navant toute occurence d'un adresse email dans le r<>sultat du template
// aura un protection simple contre les robots spammers // aura un protection simple contre les robots spammers
?&gt;</programlisting> ?>
</example> ]]>
</sect1> </programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file <!-- Keep this comment at the end of the file
Local variables: Local variables:
mode: sgml mode: sgml

View File

@@ -1,38 +1,46 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: nobody Status: partial --> <!-- EN-Revision: 1.3 Maintainer: yannick Status: ready -->
<sect1 id="advanced.features.postfilters"> <sect1 id="advanced.features.postfilters">
<title>Filtres de post-compilation</title> <title>Filtres de post-compilation</title>
<para> <para>
Les filtres de post-compilation sont des fonctions PHP que vos templates 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 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<EFBFBD>clar<EFBFBD>s</link> soit charg<72>s <20>tre soit <link linkend="api.register.postfilter">d<EFBFBD>clar<EFBFBD>s</link>, soit charg<72>s
depuis les r<>pertoires des plugins en utilisant la fonction depuis les r<>pertoires des plugins en utilisant la fonction
<link linkend="api.load.filter">load_filter()</link> ou en r<>glant <link linkend="api.load.filter">load_filter()</link> ou en r<>glant
la variable <link linkend="variable.autoload.filters">$autoload_filters</link>. 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 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. de la fonction qu'elle retourne le r<>sultat de l'ex<65>cution.
</para> </para>
<example> <example>
<title>utilisation d'un filtre de post-compilation de templates</title> <title>Utilisation d'un filtre de post-compilation de templates</title>
<programlisting> <programlisting role="php">
&lt;?php <![CDATA[
<?php
// mettez cela dans votre application // mettez cela dans votre application
function add_header_comment($tpl_source, &amp;$smarty) function add_header_comment($tpl_source, &$smarty)
{ {
return "&lt;?php echo \"&lt;!-- Created by Smarty! --&gt;\n\" ?&gt;\n".$tpl_source; return "<?php echo \"<!-- Cr<43><72> par Smarty ! -->\n\"; ?>\n".$tpl_source;
} }
// enregistre le filtre de post-compilation // enregistre le filtre de post-compilation
$smarty->register_postfilter("add_header_comment"); $smarty->register_postfilter("add_header_comment");
$smarty->display("index.tpl"); $smarty->display("index.tpl");
?&gt; ?>
]]>
{* template Smarty compil<69> index.tpl *} </programlisting>
&lt;!-- Created by Smarty! --&gt; <para>
{* reste du contenu du template... *}</programlisting> Votre template Smarty index.tpl ressemblera, apr<70>s compilation <20> :
</example> </para>
</sect1> <screen>
<![CDATA[
<!-- Cr<43><72> par Smarty ! -->
{* reste du contenu du template... *}
]]>
</screen>
</example>
</sect1>
<!-- Keep this comment at the end of the file <!-- Keep this comment at the end of the file
Local variables: Local variables:
mode: sgml mode: sgml

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: nobody Status: partial --> <!-- EN-Revision: 1.2 Maintainer: yannick Status: ready -->
<sect1 id="advanced.features.prefilters"> <sect1 id="advanced.features.prefilters">
<title>Filtres de pr<70>-compilation</title> <title>Filtres de pr<70>-compilation</title>
<para> <para>
@@ -8,51 +8,58 @@
ex<65>cutent avant qu'ils ne soient compil<69>s. Cela peut <20>tre utile 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 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. inutiles, garder un oeil sur ce que les gens mettent dans leurs templates, etc.
</para>
<para>
Les filtre de pr<70>-compilations peuvent <20>tre soit Les filtre de pr<70>-compilations peuvent <20>tre soit
<link linkend="api.register.prefilter">d<EFBFBD>clar<EFBFBD>s</link> soit charg<72>s <link linkend="api.register.prefilter">d<EFBFBD>clar<EFBFBD>s</link>, soit charg<72>s
a partir des r<>pertoires de plugins en utilisant la fonction <EFBFBD> partir des r<>pertoires de plugins en utilisant la fonction
<link linkend="api.load.filter">load_filter()</link> ou en r<>glant <link linkend="api.load.filter">load_filter()</link> ou en r<>glant
la variable la variable
<link linkend="variable.autoload.filters">$autoload_filters</link>. <link linkend="variable.autoload.filters">$autoload_filters</link>.
Smarty passera a la fonction le code source en tant que premier argument, </para>
et attendra en retour le code modifi<66>. <para>
</para> Smarty passera <20> la fonction le code source en tant que premier argument,
<example> et attendra en retour le code modifi<66>.
<title>Utilisation un filtre de pr<70>-compilation de template</title> </para>
<programlisting> <example>
&lt;?php <title>Utilisation un filtre de pr<70>-compilation de template</title>
<programlisting>
<![CDATA[
<?php
// mettre ceci dans votre application // mettre ceci dans votre application
function remove_dw_comments($tpl_source, &amp;$smarty) function remove_dw_comments($tpl_source, &$smarty)
{ {
return preg_replace("/&lt;!--#.*--&gt;/U","",$tpl_source); return preg_replace("/<!--#.*-->/U","",$tpl_source);
} }
// enregistrer le filtre de pr<70>-compilation // enregistrer le filtre de pr<70>-compilation
$smarty->register_prefilter("remove_dw_comments"); $smarty->register_prefilter("remove_dw_comments");
$smarty->display("index.tpl"); $smarty->display("index.tpl");
?&gt; ?>
]]>
{* template Smarty index.tpl *} </programlisting>
&lt;!--# cette ligne va <20>tre supprim<69>e par le filtre de pr<70>-compilation --&gt;</programlisting> <para>
</example> Ceci effacera tous les commentaires de la source du template.
</sect1> </para>
<!-- Keep this comment at the end of the file </example>
Local variables: </sect1>
mode: sgml <!-- Keep this comment at the end of the file
sgml-omittag:t Local variables:
sgml-shorttag:t mode: sgml
sgml-minimize-attributes:nil sgml-omittag:t
sgml-always-quote-attributes:t sgml-shorttag:t
sgml-indent-step:1 sgml-minimize-attributes:nil
sgml-indent-data:t sgml-always-quote-attributes:t
indent-tabs-mode:nil sgml-indent-step:1
sgml-parent-document:nil sgml-indent-data:t
sgml-default-dtd-file:"../../../../manual.ced" indent-tabs-mode:nil
sgml-exposed-tags:nil sgml-parent-document:nil
sgml-local-catalogs:nil sgml-default-dtd-file:"../../../../manual.ced"
sgml-local-ecat-files:nil sgml-exposed-tags:nil
End: sgml-local-catalogs:nil
vim600: syn=xml fen fdm=syntax fdl=2 si sgml-local-ecat-files:nil
vim: et tw=78 syn=sgml End:
vi: ts=1 sw=1 vim600: syn=xml fen fdm=syntax fdl=2 si
--> vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -5,33 +5,33 @@
<title>Fonction de gestion du cache</title> <title>Fonction de gestion du cache</title>
<para> <para>
Une alternative au m<>canisme de cache par d<>faut (bas<61> sur des fichiers Une alternative au m<>canisme de cache par d<>faut (bas<61> sur des fichiers
de cache) consiste a sp<73>cifier une fonction de gestion de cache utilisateur de cache) consiste <EFBFBD> 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. qui sera utilis<69>e pour lire, <20>crire et effacer les fichiers de cache.
</para> </para>
<para> <para>
Il suffit de cr<63>er dans votre application une fonction que Smarty 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 utilisera pour la gestion du cache et d'assigner le nom de cette
fonction a la variable de classe fonction <EFBFBD> la variable de classe
<link linkend="variable.cache.handler.func">$cache_handler_func</link>. <link linkend="variable.cache.handler.func">$cache_handler_func</link>.
Smarty utilisera alors cette fonction pour g<>rer les donn<6E>es du cache. 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 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 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. du cache. Pour <20>crire, Smarty passe le contenu du cache dans ces param<61>tres.
Pour lire, Smarty s'attend a ce que votre fonction accepte ce param<61>tre Pour lire, Smarty s'attend <EFBFBD> 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, 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. 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 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) 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. et le sixi<78>me est l'identifiant de compilation (optionnel).
</para> </para>
<para> <para>
Note: Le dernier param<61>tre ($exp_time) a <20>t<EFBFBD> ajout<75> dans Smarty-2.6.0. Note: Le dernier param<61>tre ($exp_time) a <20>t<EFBFBD> ajout<75> dans Smarty-2.6.0.
</para> </para>
<example> <example>
<title>exemple d'utilisation de MySQL pour la source du cache</title> <title>Exemple d'utilisation de MySQL pour la source du cache</title>
<programlisting> <programlisting role="php">
<![CDATA[ <![CDATA[
<?php <?php
/* /*
exemple d'usage : exemple d'usage :
@@ -46,7 +46,7 @@ $smarty->display('index.tpl');
la base mysql est attendu dans ce format : la base mysql est attendu dans ce format :
create database SMARTY_CACHE; create database SMARTY_CACHE;
create table CACHE_PAGES( create table CACHE_PAGES(
@@ -58,78 +58,78 @@ CacheContents MEDIUMTEXT NOT NULL
function mysql_cache_handler($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=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 // l'h<EFBFBD>te de la bd, l'utilisateur, et le mot de passe
$db_host = 'localhost'; $db_host = 'localhost';
$db_user = 'myuser'; $db_user = 'myuser';
$db_pass = 'mypass'; $db_pass = 'mypass';
$db_name = 'SMARTY_CACHE'; $db_name = 'SMARTY_CACHE';
$use_gzip = false; $use_gzip = false;
// cr<63>e un identifiant de cache unique // cr<63>e un identifiant de cache unique
$CacheID = md5($tpl_file.$cache_id.$compile_id); $CacheID = md5($tpl_file.$cache_id.$compile_id);
if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) { if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) {
$smarty_obj->_trigger_error_msg("cache_handler: could not connect to database"); $smarty_obj->_trigger_error_msg("cache_handler: could not connect to database");
return false; return false;
} }
mysql_select_db($db_name); 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_content = gzuncompress($row["CacheContents"]);
} else {
$cache_content = $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;
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_content = gzuncompress($row["CacheContents"]);
} else {
$cache_content = $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;
} }
?> ?>

View File

@@ -1,52 +1,68 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: nobody Status: partial --> <!-- EN-Revision: 1.3 Maintainer: yannick Status: ready -->
<sect1 id="template.resources"> <sect1 id="template.resources">
<title>Ressources</title> <title>Ressources</title>
<para> <para>
Les templates peuvent provenir d'une grande vari<72>t<EFBFBD> de ressources. Quand vous 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 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 dans un autre template, vous fournissez un type de ressource, suivi
par le chemin appropri<72> et le nom du template. par le chemin appropri<72> et le nom du template. Si une ressource n'est pas
explicitement donn<6E>e, la valeur de la variable <link
linkend="variable.default.resource.type">$default_resource_type</link>
sera utilis<69>e.
</para> </para>
<sect2 id="templates.from.template.dir"> <sect2 id="templates.from.template.dir">
<title>Templates depuis $template_dir</title> <title>Templates depuis $template_dir</title>
<para> <para>
Les templates du r<>pertoire $template_dir n'ont pas Les templates du r<>pertoire $template_dir n'ont pas
besoin d'une ressource template, bien que vous puissiez utiliser besoin d'une ressource template, bien que vous puissiez utiliser
la ressource "file" pour <20>tre coh<6F>rent. Vous n'avez qu'a fournir la ressource "file" pour <20>tre coh<6F>rent. Vous n'avez qu'<EFBFBD> fournir
le chemin vers le template que vous voulez utiliser, relatif le chemin vers le template que vous voulez utiliser, relatif
au r<>pertoire racine $template_dir. au r<>pertoire racine $template_dir.
</para> </para>
<example> <example>
<title>Utilisation de templates depuis $template_dir</title> <title>Utilisation de templates depuis $template_dir</title>
<programlisting> <programlisting role="php">
// le script PHP <![CDATA[
<?php
$smarty->display("index.tpl"); $smarty->display("index.tpl");
$smarty->display("admin/menu.tpl"); $smarty->display("admin/menu.tpl");
$smarty->display("file:admin/menu.tpl"); // le m<>me que celui ci-dessus $smarty->display("file:admin/menu.tpl"); // le m<>me que ci-dessus
?>
{* le template Smarty *} {* le template Smarty *}
{include file="index.tpl"} {include file="index.tpl"}
{include file="file:index.tpl"} {* le m<>me que celui ci-dessus *}</programlisting> {include file="file:index.tpl"} {* le m<>me que ci-dessus *}
]]>
</programlisting>
</example> </example>
</sect2> </sect2>
<sect2 id="templates.from.any.dir"> <sect2 id="templates.from.any.dir">
<title>Templates a partir de n'importe quel r<>pertoire</title> <title>Templates <EFBFBD> partir de n'importe quel r<>pertoire</title>
<para> <para>
Les templates en-dehors du r<>pertoire $template_dir n<>cessitent Les templates en-dehors du r<>pertoire $template_dir n<>cessitent
le type de ressource template, suivi du chemin absolu et du nom du le type de ressource template, suivi du chemin absolu et du nom du
template. template.
</para> </para>
<example> <example>
<title>utilisation d'un template depuis n'importe quel r<>pertoire</title> <title>Utilisation d'un template depuis n'importe quel r<>pertoire</title>
<programlisting> <programlisting role="php">
// le script PHP <![CDATA[
<?php
$smarty->display("file:/export/templates/index.tpl"); $smarty->display("file:/export/templates/index.tpl");
$smarty->display("file:/path/to/my/templates/menu.tpl"); $smarty->display("file:/path/to/my/templates/menu.tpl");
?>
{* le template Smarty *} ]]>
{include file="file:/usr/local/share/templates/navigation.tpl"}</programlisting> </programlisting>
<para>
Le template Smarty :
</para>
<programlisting>
<![CDATA[
{include file="file:/usr/local/share/templates/navigation.tpl"}
]]>
</programlisting>
</example> </example>
<sect3 id="templates.windows.filepath"> <sect3 id="templates.windows.filepath">
@@ -55,17 +71,26 @@ $smarty->display("file:/path/to/my/templates/menu.tpl");
Si vous utilisez Windows, les chemins de fichiers sont la plupart 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. 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 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. conflits d'espace de noms et obtenir les r<>sultats escompt<70>s.
</para> </para>
<example> <example>
<title>utilisation de templates avec des chemins de fichiers Windows</title> <title>Utilisation de templates avec des chemins de fichiers Windows</title>
<programlisting> <programlisting role="php">
// le script PHP <![CDATA[
<?php
$smarty->display("file:C:/export/templates/index.tpl"); $smarty->display("file:C:/export/templates/index.tpl");
$smarty->display("file:F:/path/to/my/templates/menu.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> </programlisting>
<para>
Le template Smarty :
</para>
<programlisting>
<![CDATA[
{include file="file:D:/usr/local/share/templates/navigation.tpl"}
]]>
</programlisting>
</example> </example>
</sect3> </sect3>
</sect2> </sect2>
@@ -73,15 +98,17 @@ $smarty->display("file:F:/path/to/my/templates/menu.tpl");
<sect2 id="templates.from.elsewhere"> <sect2 id="templates.from.elsewhere">
<title>Templates depuis d'autres sources</title> <title>Templates depuis d'autres sources</title>
<para> <para>
Vous pouvez r<>cup<75>rer les templates a partir n'importe quelle Vous pouvez r<>cup<75>rer les templates <EFBFBD> partir de n'importe quelle
source a laquelle vous avez acc<63>s avec PHP : base de donn<6E>es, source <EFBFBD> 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 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. de ressource plugins et de les enregistrer aupr<70>s de Smarty.
</para> </para>
<para> <para>
Reportez-vous a la section <link linkend="plugins.resources">ressource plugins</link> Reportez-vous <EFBFBD> la section <link linkend="plugins.resources">ressource plugins</link>
pour plus d'informations sur les fonctions que vous Otes cens<6E> fournir. pour plus d'informations sur les fonctions que vous <EFBFBD>tes cens<6E> fournir.
</para> </para>
<note> <note>
<para> <para>
Notez que vous ne pouvez pas <20>craser la ressource <literal>file</literal> native, Notez que vous ne pouvez pas <20>craser la ressource <literal>file</literal> native,
@@ -91,12 +118,12 @@ $smarty->display("file:F:/path/to/my/templates/menu.tpl");
</para> </para>
</note> </note>
<example> <example>
<title>utilisation de ressources utilisateurs</title> <title>Utilisation de ressources utilisateurs</title>
<programlisting> <programlisting role="php">
// le script PHP <![CDATA[
<?php
// mettez ces fonctions quelque part dans votre application // mettez ces fonctions quelque part dans votre application
function db_get_template ($tpl_name, &amp;$tpl_source, &amp;$smarty_obj) function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
{ {
// requ<71>te BD pour r<>cup<75>rer le template // requ<71>te BD pour r<>cup<75>rer le template
// et remplir $tpl_source // et remplir $tpl_source
@@ -112,7 +139,7 @@ function db_get_template ($tpl_name, &amp;$tpl_source, &amp;$smarty_obj)
} }
} }
function db_get_timestamp($tpl_name, &amp;$tpl_timestamp, &amp;$smarty_obj) function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{ {
// requ<71>te BD pour remplir $tpl_timestamp // requ<71>te BD pour remplir $tpl_timestamp
$sql = new SQL; $sql = new SQL;
@@ -127,13 +154,13 @@ function db_get_timestamp($tpl_name, &amp;$tpl_timestamp, &amp;$smarty_obj)
} }
} }
function db_get_secure($tpl_name, &amp;$smarty_obj) function db_get_secure($tpl_name, &$smarty_obj)
{ {
// on suppose que tous les templates sont svrs // on suppose que tous les templates sont svrs
return true; return true;
} }
function db_get_trusted($tpl_name, &amp;$smarty_obj) function db_get_trusted($tpl_name, &$smarty_obj)
{ {
// pas utilis<69>e pour les templates dans notre cas // pas utilis<69>e pour les templates dans notre cas
} }
@@ -146,9 +173,17 @@ $smarty->register_resource("db", array("db_get_template",
// utilise la ressource depuis le script PHP // utilise la ressource depuis le script PHP
$smarty->display("db:index.tpl"); $smarty->display("db:index.tpl");
?>
{* utilise la ressource depuis le template Smarty *} ]]>
{include file="db:/extras/navigation.tpl"}</programlisting> </programlisting>
<para>
Le template Smarty :
</para>
<programlisting>
<![CDATA[
{include file="db:/extras/navigation.tpl"}
]]>
</programlisting>
</example> </example>
</sect2> </sect2>
@@ -156,35 +191,38 @@ $smarty->display("db:index.tpl");
<title>Fonction de gestion de template par d<>faut</title> <title>Fonction de gestion de template par d<>faut</title>
<para> <para>
Vous pouvez sp<73>cifier une fonction qui sera utilis<69>e pour 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 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 ne peut pas <20>tre r<>cup<75>r<EFBFBD> depuis sa ressource. Une utilisation possible est
la cr<63>ation de templates a la vol<6F>e. la cr<63>ation de templates <EFBFBD> la vol<6F>e.
</para> </para>
<example> <example>
<title>utilisation de la fonction de gestion de template par d<>faut</title> <title>utilisation de la fonction de gestion de template par d<>faut</title>
<programlisting> <programlisting role="php">
&lt;?php <![CDATA[
<?php
// mettez cette fonction quelque part dans votre application // mettez cette fonction quelque part dans votre application
function make_template ($resource_type, $resource_name, &amp;$template_source, &amp;$template_timestamp, &amp;$smarty_obj) function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp, &$smarty_obj)
{ {
if( $resource_type == 'file' ) { if( $resource_type == 'file' ) {
if ( ! is_readable ( $resource_name )) { if ( ! is_readable ( $resource_name )) {
// cr<63>e le fichier de template et renvoie le contenu // cr<63>e le fichier de template et renvoie le contenu
$template_source = "This is a new template."; $template_source = "Ceci est un nouveau template.";
$template_timestamp = time(); $template_timestamp = time();
$smarty_obj->_write_file($resource_name,$template_source); $smarty_obj->_write_file($resource_name,$template_source);
return true; return true;
}
} else {
// pas un fichier
return false;
} }
} else {
// pas un fichier
return false;
}
} }
// r<>gle la fonction par d<>faut // r<>gle la fonction par d<>faut
$smarty->default_template_handler_func = 'make_template'; $smarty->default_template_handler_func = 'make_template';
?&gt;</programlisting> ?>
]]>
</programlisting>
</example> </example>
</sect2> </sect2>
</sect1> </sect1>

View File

@@ -1,8 +1,15 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: nobody Status: partial --> <!-- EN-Revision: 1.8 Maintainer: yannick Status: ready -->
<chapter id="api.functions"> <reference id="api.functions">
<title>M<EFBFBD>thodes</title> <title>M<EFBFBD>thodes</title>
<titleabbrev></titleabbrev>
<partintro>
<section>
<title />
<para></para>
</section>
</partintro>
&programmers.api-functions.api-append; &programmers.api-functions.api-append;
&programmers.api-functions.api-append-by-ref; &programmers.api-functions.api-append-by-ref;
&programmers.api-functions.api-assign; &programmers.api-functions.api-assign;
@@ -42,7 +49,9 @@
&programmers.api-functions.api-unregister-postfilter; &programmers.api-functions.api-unregister-postfilter;
&programmers.api-functions.api-unregister-prefilter; &programmers.api-functions.api-unregister-prefilter;
&programmers.api-functions.api-unregister-resource; &programmers.api-functions.api-unregister-resource;
</chapter>
</reference>
<!-- Keep this comment at the end of the file <!-- Keep this comment at the end of the file
Local variables: Local variables:
mode: sgml mode: sgml

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: nobody Status: partial --> <!-- EN-Revision: 1.3 Maintainer: yannick Status: ready -->
<chapter id="api.variables"> <chapter id="api.variables">
<title>Variables</title> <title>Variables</title>
@@ -11,8 +11,6 @@
&programmers.api-variables.variable-debugging; &programmers.api-variables.variable-debugging;
&programmers.api-variables.variable-debug-tpl; &programmers.api-variables.variable-debug-tpl;
&programmers.api-variables.variable-debugging-ctrl; &programmers.api-variables.variable-debugging-ctrl;
&programmers.api-variables.variable-global-assign;
&programmers.api-variables.variable-undefined;
&programmers.api-variables.variable-autoload-filters; &programmers.api-variables.variable-autoload-filters;
&programmers.api-variables.variable-compile-check; &programmers.api-variables.variable-compile-check;
&programmers.api-variables.variable-force-compile; &programmers.api-variables.variable-force-compile;
@@ -35,9 +33,12 @@
&programmers.api-variables.variable-right-delimiter; &programmers.api-variables.variable-right-delimiter;
&programmers.api-variables.variable-compiler-class; &programmers.api-variables.variable-compiler-class;
&programmers.api-variables.variable-request-vars-order; &programmers.api-variables.variable-request-vars-order;
&programmers.api-variables.variable-request-use-auto-globals;
&programmers.api-variables.variable-error-reporting;
&programmers.api-variables.variable-compile-id; &programmers.api-variables.variable-compile-id;
&programmers.api-variables.variable-use-sub-dirs; &programmers.api-variables.variable-use-sub-dirs;
&programmers.api-variables.variable-default-modifiers; &programmers.api-variables.variable-default-modifiers;
&programmers.api-variables.variable-default-resource-type;
</chapter> </chapter>
<!-- Keep this comment at the end of the file <!-- Keep this comment at the end of the file
Local variables: Local variables:

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: nobody Status: partial --> <!-- EN-Revision: 1.3 Maintainer: yannick Status: ready -->
<chapter id="caching"> <chapter id="caching">
<title>Cache</title> <title>Cache</title>
<para> <para>
@@ -9,25 +9,26 @@
linkend="api.fetch">fetch()</link> en sauvegardant leur r<>sultat linkend="api.fetch">fetch()</link> en sauvegardant leur r<>sultat
dans un fichier. Si un fichier de cache est disponible lors d'un appel, 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. 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 Le syst<73>me de cache peut acc<63>l<EFBFBD>rer les traitements de fa<66>on impressionnante,
peut acc<63>l<EFBFBD>rer les traitements de faton impressionnante, en particulier les en particulier les templates dont la compilation est tr<74>s longue. Comme
templates dont la compilation est tr<74>s longue. Comme le r<>sultat de le r<>sultat de display() ou de fetch() est dans le cache, un fichier de cache
display() ou de fetch() est dans le cache, un fichier de cache peut peut <20>tre compos<6F> de plusieurs fichiers de templates, plusieurs fichiers
<20>tre compos<6F> de plusieurs fichiers de templates, plusieurs fichiers
de configuration, etc. de configuration, etc.
</para> </para>
<para> <para>
Comme les templates sont dynamiques, il est important de faire attention Comme les templates sont dynamiques, il est important de faire attention
a la faton dont les fichiers de cache sont g<>n<EFBFBD>r<EFBFBD>s, et pour combien de temps. <EFBFBD> la fa<EFBFBD>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 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 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 dans le cache pour une heure ou plus. A l'inverse, si vous affichez une page
de m<>t<EFBFBD>o mises a jour toutes les minutes, mettre cette page en cache de m<>t<EFBFBD>o mise a jour toutes les minutes, mettre cette page en cache
n'a aucun sens. n'a aucun sens.
</para> </para>
&programmers.caching.caching-setting-up; &programmers.caching.caching-setting-up;
&programmers.caching.caching-multiple-caches; &programmers.caching.caching-multiple-caches;
&programmers.caching.caching-groups; &programmers.caching.caching-groups;
&programmers.caching.caching-cacheable;
</chapter> </chapter>
<!-- Keep this comment at the end of the file <!-- Keep this comment at the end of the file
Local variables: Local variables:

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: nobody Status: partial --> <!-- EN-Revision: 1.5 Maintainer: yannick Status: ready -->
<chapter id="plugins"> <chapter id="plugins">
<title>Etendre Smarty avec des plugins</title> <title>Etendre Smarty avec des plugins</title>
<para> <para>
La version 2.0 a introduit l'architecture de plugin qui est La version 2.0 a introduit l'architecture de plugin qui est
utilis<69>e pour pratiquement toute les fonctionnalit<69>s utilis<69>e pour pratiquement toutes les fonctionnalit<69>s
personnalisables de Smarty. Ceci comprend : personnalisables de Smarty. Ceci comprend :
<itemizedlist spacing="compact"> <itemizedlist spacing="compact">
<listitem><simpara>les fonctions</simpara></listitem> <listitem><simpara>les fonctions</simpara></listitem>
@@ -19,9 +19,9 @@
<listitem><simpara>les insertions</simpara></listitem> <listitem><simpara>les insertions</simpara></listitem>
</itemizedlist> </itemizedlist>
A part pour les ressources, la compatibilit<69> avec les anciennes A part pour les ressources, la compatibilit<69> avec les anciennes
fatons d'enregistrer les fonctions de gestion avec l'API register_ fa<EFBFBD>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 est conserv<72>e. Si vous n'avez pas utilis<69> cette API et que vous avez
a la place directement modifi<66> les variables de classes <EFBFBD> la place directement modifi<66> les variables de classes
<literal>$custom_funcs</literal>, <literal>$custom_mods</literal> et <literal>$custom_funcs</literal>, <literal>$custom_mods</literal> et
d'autres, vous devez alors modifier vos scripts pour utiliser d'autres, vous devez alors modifier vos scripts pour utiliser
l'API ou convertir vos fonctionnalit<69>s personnalis<69>es en plugins. l'API ou convertir vos fonctionnalit<69>s personnalis<69>es en plugins.

View File

@@ -1,20 +1,18 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: nobody Status: partial --> <!-- EN-Revision: 1.3 Maintainer: yannick Status: ready -->
<chapter id="smarty.constants"> <chapter id="smarty.constants">
<title>Constantes</title> <title>Constantes</title>
<para></para>
<sect1 id="constant.smarty.dir"> <sect1 id="constant.smarty.dir">
<title>SMARTY_DIR</title> <title>SMARTY_DIR</title>
<para> <para>
Il doit s'agir du chemin complet du r<>pertoire o<> Il doit s'agir du chemin complet du r<>pertoire o<>
se trouvent les fichiers classes de Smarty. se trouvent les fichiers classes de Smarty.
S'il n'est pas d<>fini, Smarty essaiera alors d'en S'il n'est pas d<>fini, Smarty essaiera alors d'en
d<>terminer automatiquement la valeur. d<>terminer automatiquement la valeur.
S'il est d<>fini, le chemin doit se terminer par un slash. S'il est d<>fini, le chemin doit se terminer par un slash.
</para> </para>
<example> <example>
<title>SMARTY_DIR</title> <title>SMARTY_DIR</title>
<programlisting role="php"> <programlisting role="php">
@@ -26,6 +24,30 @@ define("SMARTY_DIR","/usr/local/lib/php/Smarty/");
require_once(SMARTY_DIR."Smarty.class.php"); require_once(SMARTY_DIR."Smarty.class.php");
?> ?>
]]>
</programlisting>
</example>
</sect1>
<sect1 id="constant.smarty.core.dir">
<title>SMARTY_CORE_DIR</title>
<para>
Il doit s'agir du chemin complet du r<>pertoire o<>
se trouvent les fichiers internes de Smarty. S'il n'est
pas d<>fini, Smarty placera comme valeur par d<>faut la
valeur de la constante pr<70>c<EFBFBD>dente SMARTY_DIR. S'il est
d<>fini, le chemin doit se terminer par un slash. Utilisez cette
constante lorsque vous incluez manuellement n'importe
quel fichier core.*.
</para>
<example>
<title>SMARTY_CORE_DIR</title>
<programlisting role="php">
<![CDATA[
<?php
// chargement de core.get_microtime.php
require_once(SMARTY_CORE_DIR."core.get_microtime.php");
?>
]]> ]]>
</programlisting> </programlisting>
</example> </example>