sync with EN

#Hello all ;)
This commit is contained in:
yannick
2004-12-21 20:31:42 +00:00
parent 6d52e6b179
commit 4104a579bf
7 changed files with 306 additions and 232 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.3 Maintainer: didou Status: ready --> <!-- EN-Revision: 1.4 Maintainer: didou Status: ready -->
<chapter id="resources"> <chapter id="resources">
<title>Ressources</title> <title>Ressources</title>
<para> <para>

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.4 Maintainer: didou Status: ready --> <!-- EN-Revision: 1.5 Maintainer: didou Status: ready -->
<chapter id="tips"> <chapter id="tips">
<title>Trucs et astuces</title> <title>Trucs et astuces</title>
<para></para> <para></para>
@@ -47,11 +47,14 @@
<example> <example>
<title>assigner une valeur par d<>faut <20> une variable de template</title> <title>assigner une valeur par d<>faut <20> une variable de template</title>
<programlisting> <programlisting>
{* faites cela qq part en haut de votre template *} <![CDATA[
{* faites cela quelque part en haut de votre template *}
{assign var="title" value=$title|default:"no title"} {assign var="title" value=$title|default:"no title"}
{* si $title est vide, il contiendra alors no "no title" *} {* si $title est vide, il contiendra alors la valeur "no title" *}
{$title}</programlisting> {$title}
]]>
</programlisting>
</example> </example>
</sect1> </sect1>
<sect1 id="tips.passing.vars"> <sect1 id="tips.passing.vars">
@@ -64,8 +67,8 @@
</para> </para>
<example> <example>
<title>passer le titre au template d'en-t<>te</title> <title>passer le titre au template d'en-t<>te</title>
<programlisting> <programlisting>
<![CDATA[
mainpage.tpl mainpage.tpl
------------ ------------
@@ -85,17 +88,19 @@ archives.tpl
header.tpl header.tpl
---------- ----------
&lt;HTML&gt; <HTML>
&lt;HEAD&gt; <HEAD>
&lt;TITLE&gt;{$title|default:"BC News"}&lt;/TITLE&gt; <TITLE>{$title|default:"BC News"}</TITLE>
&lt;/HEAD&gt; </HEAD>
&lt;BODY&gt; <BODY>
footer.tpl footer.tpl
---------- ----------
&lt;/BODY&gt; </BODY>
&lt;/HTML&gt;</programlisting> </HTML>
]]>
</programlisting>
</example> </example>
<para> <para>
Quand la page principale est con<6F>ue, le titre "Main page" est pass<73> <20> header.tpl Quand la page principale est con<6F>ue, le titre "Main page" est pass<73> <20> header.tpl
@@ -115,31 +120,48 @@ footer.tpl
pour avoir un contr<74>le total sur le formatage des dates et de comparer pour avoir un contr<74>le total sur le formatage des dates et de comparer
facilement les dates entre elles. facilement les dates entre elles.
</para> </para>
<para> <note>
NOTE : <20> partir Smarty 1.4.0, vous pouvez passer les dates <20> Smarty <para>
sous la forme de timestamps Unix ou MySQL, ou tout autre format de dates A partir Smarty 1.4.0, vous pouvez passer les dates <20> Smarty
que comprend strtotime(). sous la forme de timestamps Unix ou MySQL, ou tout autre format de dates
</para> que comprend strtotime().
</para>
</note>
<example> <example>
<title>utilisation de date_format</title> <title>Utilisation de date_format</title>
<programlisting> <programlisting>
<![CDATA[
{$startDate|date_format} {$startDate|date_format}
]]>
OUTPUT: </programlisting>
<para>
Affichera :
</para>
<screen>
<![CDATA[
Jan 4, 2001 Jan 4, 2001
]]>
</screen>
<programlisting>
<![CDATA[
{$startDate|date_format:"%Y/%m/%d"} {$startDate|date_format:"%Y/%m/%d"}
]]>
OUTPUT: </programlisting>
<para>
Affichera :
</para>
<screen>
<![CDATA[
2001/01/04 2001/01/04
]]>
</screen>
{if $date1 &lt; $date2} <programlisting>
<![CDATA[
{if $date1 < $date2}
... ...
{/if}</programlisting> {/if}
]]>
</programlisting>
</example> </example>
<para> <para>
En utilisant la fonction {html_select_date} dans un template, le programmeur En utilisant la fonction {html_select_date} dans un template, le programmeur
@@ -147,24 +169,33 @@ OUTPUT:
Voici une fonction qui devrait vous <20>tre utile. Voici une fonction qui devrait vous <20>tre utile.
</para> </para>
<example> <example>
<title>conversion des <20>l<EFBFBD>ments date d'un formulaire en timestamp</title> <title>Conversion des <20>l<EFBFBD>ments date d'un formulaire en timestamp</title>
<programlisting> <programlisting role="php">
<![CDATA[
<?php
// cela suppose que vos <20>l<EFBFBD>ments de formulaire soient nomm<6D>s // cela suppose que vos <20>l<EFBFBD>ments de formulaire soient nomm<6D>s
// startDate_Day, startDate_Month, startDate_Year // startDate_Day, startDate_Month, startDate_Year
$startDate = makeTimeStamp($startDate_Year,$startDate_Month,$startDate_Day); $startDate = makeTimeStamp($startDate_Year, $startDate_Month, $startDate_Day);
function makeTimeStamp($year="",$month="",$day="") function makeTimeStamp($year="", $month="", $day="")
{ {
if(empty($year)) if(empty($year)) {
$year = strftime("%Y"); $year = strftime("%Y");
if(empty($month)) }
$month = strftime("%m"); if(empty($month)) {
if(empty($day)) $month = strftime("%m");
$day = strftime("%d"); }
if(empty($day)) {
return mktime(0,0,0,$month,$day,$year); $day = strftime("%d");
}</programlisting> }
return mktime(0, 0, 0, $month, $day, $year);
}
?>
]]>
</programlisting>
</example> </example>
</sect1> </sect1>
<sect1 id="tips.wap"> <sect1 id="tips.wap">
@@ -180,52 +211,62 @@ function makeTimeStamp($year="",$month="",$day="")
la modification de l'en-t<>te <20>chouera. la modification de l'en-t<>te <20>chouera.
</para> </para>
<example> <example>
<title>utilisation d'insert pour <20>crire un en-t<>te Content-Type WML</title> <title>Utilisation d'insert pour <20>crire un en-t<>te Content-Type WML</title>
<programlisting> <programlisting role="php">
<![CDATA[
<?php
// assurez-vous que Apache est configur<75> pour les extensions .wml ! // assurez-vous que Apache est configur<75> pour les extensions .wml !
// mettez cette fonction qq part dans votre applications // mettez cette fonction quelque part dans votre applications
// ou dans Smarty.addons.php // ou dans Smarty.addons.php
function insert_header() { function insert_header()
// cette fonction attend un argument $content {
extract(func_get_arg(0)); // cette fonction attend un argument $content
if(empty($content)) if (empty($params['content'])) {
return; return;
header($content); }
return; header($params['content']);
return;
} }
// votre template Smarty DOIT commencer avec la balise d'insertion ?>
]]>
</programlisting>
<para>
votre template Smarty <emphasis>doit</emphasis> commencer avec la balise d'insertion :
</para>
<programlisting>
<![CDATA[
{insert name=header content="Content-Type: text/vnd.wap.wml"}
&lt;?xml version="1.0"?&gt; <?xml version="1.0"?>
&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt; <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
&lt;!-- begin new wml deck --&gt; <!-- begin new wml deck -->
&lt;wml&gt; <wml>
&lt;!-- begin first card --&gt; <!-- begin first card -->
&lt;card&gt; <card>
&lt;do type="accept"&gt; <do type="accept">
&lt;go href="#two"/&gt; <go href="#two"/>
&lt;/do&gt; </do>
&lt;p&gt; <p>
Welcome to WAP with Smarty! Welcome to WAP with Smarty!
Press OK to continue... Press OK to continue...
&lt;/p&gt; </p>
&lt;/card&gt; </card>
&lt;!-- begin second card --&gt; <!-- begin second card -->
&lt;card id="two"&gt; <card id="two">
&lt;p&gt; <p>
Pretty easy isn't it? Pretty easy isn't it?
&lt;/p&gt; </p>
&lt;/card&gt; </card>
&lt;/wml&gt;</programlisting> </wml>
]]>
</programlisting>
</example> </example>
</sect1> </sect1>
<sect1 id="tips.componentized.templates"> <sect1 id="tips.componentized.templates">
<title>Templates composants</title> <title>Templates composants</title>
<para>
Cette astuce tient plus du hack qu'autre chose mais n'en demeure pas
moins une id<69>e plut<75>t chouette. Utilisez-la <20> vos propres risques. ;-)
</para>
<para> <para>
Traditionnellemnt, la programmation avec des templates dans les applications Traditionnellemnt, la programmation avec des templates dans les applications
se d<>roule de la fa<66>on suivante : d'abord vous r<>cup<75>rez vos variables se d<>roule de la fa<66>on suivante : d'abord vous r<>cup<75>rez vos variables
@@ -236,102 +277,70 @@ Pretty easy isn't it?
puis les assignerions ensuite pour les afficher. Mais ne serait-ce pas puis les assignerions ensuite pour les afficher. Mais ne serait-ce pas
mieux de pouvoir ajouter ce t<>l<EFBFBD>scripteur <20> n'importe quelle application mieux de pouvoir ajouter ce t<>l<EFBFBD>scripteur <20> n'importe quelle application
en incluant directement le template sans avoir <20> se soucier de la r<>cup<75>ration en incluant directement le template sans avoir <20> se soucier de la r<>cup<75>ration
des donn<6E>es. des donn<6E>es ?
</para> </para>
<para> <para>
Vous pouvez int<EFBFBD>grer du PHP dans vos templates avec les balises Vous pouvez r<EFBFBD>aliser cel<65> en <20>crivant un plugin personnalis<69> pour r<>cup<75>rer le contenu
{php}{/php}. Avec cette m<>thode, vous pouvez inclure des templates complets, et l'assigner <20> une variable du template.
dans la mesure o<> ils r<>cup<75>rent leurs propres donn<6E>es pour les assigner
<20> leurs propres variables. Avec le traitement int<6E>gr<67>
de cette fa<66>on, vous pouvez garder le template et le traitement ensemble.
Ainsi, on ne se soucie plus d'o<> vient le contenu du template,
tout vient comme un seul et unique composant.
</para> </para>
<example> <example>
<title>template composant</title> <title>Template composant</title>
<programlisting> <programlisting role="php">
{* Smarty *} <![CDATA[
<?php
{php} // Efface le fichier "function.load_ticker.php" dans le r<>pertoire des plugins
// notre fonction pour r<>cup<75>rer les donn<6E>es // notre fonction pour r<>cup<75>rer les donn<6E>es
function fetch_ticker($symbol,&amp;$ticker_name,&amp;$ticker_price) { function fetch_ticker($symbol,&amp;$ticker_name,&amp;$ticker_price)
// du traitement qui r<>cup<75>re $ticker_name {
// $ticker_price // du traitement qui r<>cup<75>re $ticker_name
} // depuis la ressource ticker
return $ticker_info;
}
// appelle la fonction function smarty_function_load_ticker($params, &$smarty)
fetch_ticker("YHOO",$ticker_name,$ticker_price); {
// appel de la fonction
$ticker_info = fetch_ticker($params['symbol']);
// assigne les variables // assignation de la variable de template
$this->assign("ticker_name",$ticker_name); $smarty->assign($params['assign'], $ticker_info);
$this->assign("ticker_price",$ticker_price); }
?>
]]>
</programlisting>
<programlisting>
<![CDATA[
{* in index.tpl *}
{/php} {load_ticker symbol="YHOO" assign="ticker"}
Stock Name: {$ticker_name} Stock Price: {$ticker_price}</programlisting> Stock Name: {$ticker.name} Stock Price: {$ticker.price}
</example> ]]>
<para> </programlisting>
A partir de Smarty 1.5.0, il y a m<>me un moyen plus propre. Vous
pouvez inclure du PHP dans votre template avec la balise {include_php ...}.
De cette fa<66>on, vous pouvez garder s<>par<61>e la logique applicative
de la logique de pr<70>sentation. Reportez-vous <20> la fonction <link
linkend="language.function.include.php">include_php</link> pour plus
d'informations.
</para>
<example>
<title>template composant avec include_php</title>
<programlisting>
load_ticker.php
---------------
&lt;?php
// notre fonction pour r<>cup<75>rer les donn<6E>es
function fetch_ticker($symbol,&amp;$ticker_name,&amp;$ticker_price) {
// put logic here that fetches $ticker_name
// and $ticker_price from some resource
}
// appelle la fonction
fetch_ticker("YHOO",$ticker_name,$ticker_price);
// assigne les variables
$this->assign("ticker_name",$ticker_name);
$this->assign("ticker_price",$ticker_price);
?&gt;
index.tpl
---------
{* Smarty *}
{include_php file="load_ticker.php"}
Stock Name: {$ticker_name} Stock Price: {$ticker_price}</programlisting>
</example> </example>
</sect1> </sect1>
<sect1 id="tips.obfuscating.email"> <sect1 id="tips.obfuscating.email">
<title>Dissimuler les adresses email</title> <title>Dissimuler les adresses email</title>
<para> <para>
Vous-<2D>tes vous d<>j<EFBFBD> demand<6E> pourquoi vos adresses emails sont sur autant Vous-<2D>tes vous d<>j<EFBFBD> demand<6E> pourquoi vos adresses emails sont sur autant
de mailing listes de spam ? Une fa<66>on pour les spammers de r<>cup<75>rer les de listes de diffusion de spam ? Une fa<66>on pour les spammers de r<>cup<75>rer les
adresses est de parcourir les pages Web. Voici une fa<66>on de rem<65>dier adresses est de parcourir les pages Web. Voici une fa<66>on de rem<65>dier
<20> ce probl<62>me : mettre votre adresse email dans du Javascript brouill<6C> <20> ce probl<62>me : mettre votre adresse email dans du Javascript brouill<6C>
au milieu de votre source HTML, sans que cela ne g<>ne l'affichage sur le au milieu de votre source HTML, sans que cela ne g<>ne l'affichage sur le
navigateur Web. Cela est fait gr<67>ce au plugin mailto. navigateur Web. Cela est fait gr<67>ce au plugin mailto.
</para> </para>
<example> <example>
<title>exemple de dissimulation d'une adresse email</title> <title>Exemple de dissimulation d'une adresse email</title>
<programlisting> <programlisting>
<![CDATA[
index.tpl {* in index.tpl *}
---------
Send inquiries to Send inquiries to
{mailto address=$EmailAddress encode="javascript" subject="Hello"} {mailto address=$EmailAddress encode="javascript" subject="Hello"}
]]>
</programlisting> </programlisting>
</example> </example>
<note> <note>
<title>Note technique</title> <title>Note technique</title>

View File

@@ -1,26 +1,35 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: didou Status: ready --> <!-- EN-Revision: 1.6 Maintainer: didou Status: ready -->
<bookinfo id="bookinfo"> <bookinfo id="bookinfo">
<title>Smarty - le moteur et compilateur de templates PHP</title> <title>Smarty - le moteur et compilateur de templates PHP</title>
<authorgroup id="authors"> <authorgroup id="authors">
<author> <author>
<firstname>Monte</firstname><surname>Ohrt &lt;monte@ispi.net&gt;</surname> <firstname>Monte</firstname>
<surname>Ohrt &lt;monte@ispi.net&gt;</surname>
</author> </author>
<author> <author>
<firstname>Andrei</firstname><surname>Zmievski &lt;andrei@php.net&gt;</surname> <firstname>Andrei</firstname>
<surname>Zmievski &lt;andrei@php.net&gt;</surname>
</author> </author>
</authorgroup> </authorgroup>
<authorgroup id="translators"> <authorgroup id="translators">
<author> <author>
<firstname>Arnaud</firstname><surname>Cogolu<EFBFBD>gnes &lt;arnaud.cogoluegnes@free.fr&gt;</surname> <firstname>Arnaud</firstname>
<surname>Cogolu<EFBFBD>gnes &lt;arnaud.cogoluegnes@free.fr&gt;</surname>
</author> </author>
<author> <author>
<firstname>G<EFBFBD>rald</firstname><surname>Cro<EFBFBD>s &lt;gcroes@aston.fr&gt;</surname> <firstname>G<EFBFBD>rald</firstname>
<surname>Cro<EFBFBD>s &lt;gcroes@aston.fr&gt;</surname>
</author> </author>
<author> <author>
<firstname>Mehdi</firstname><surname>Achour &lt;didou@php.net&gt;</surname> <firstname>Mehdi</firstname>
<surname>Achour &lt;didou@php.net&gt;</surname>
</author> </author>
<author>
<firstname>Yannick</firstname>
<surname>Yannick &lt;yannick@php.net&gt;</surname>
</author>
</authorgroup> </authorgroup>
<pubdate>&build-date;</pubdate> <pubdate>&build-date;</pubdate>
<copyright> <copyright>

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.3 Maintainer: gerald Status: ready --> <!-- EN-Revision: 1.4 Maintainer: gerald Status: ready -->
<chapter id="config.files"> <chapter id="config.files">
<title>Fichiers de configuration</title> <title>Fichiers de configuration</title>
<para> <para>
@@ -34,7 +34,7 @@ Intro = """Une valeur qui tient sur
# hidden section # hidden section
[.Database] [.Database]
host=mon.domaine.com host=mon.example.com
db=ADDRESSBOOK db=ADDRESSBOOK
user=php-user user=php-user
pass=foobar pass=foobar

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.4 Maintainer: gerald Status: ready --> <!-- EN-Revision: 1.5 Maintainer: gerald Status: ready -->
<chapter id="language.basic.syntax"> <chapter id="language.basic.syntax">
<title>Bases syntaxiques</title> <title>Bases syntaxiques</title>
<para> <para>
@@ -17,6 +17,7 @@
</para> </para>
&designers.language-basic-syntax.language-syntax-comments; &designers.language-basic-syntax.language-syntax-comments;
&designers.language-basic-syntax.language-syntax-variables;
&designers.language-basic-syntax.language-syntax-functions; &designers.language-basic-syntax.language-syntax-functions;
&designers.language-basic-syntax.language-syntax-attributes; &designers.language-basic-syntax.language-syntax-attributes;
&designers.language-basic-syntax.language-syntax-quotes; &designers.language-basic-syntax.language-syntax-quotes;

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.6 Maintainer: didou Status: ready --> <!-- EN-Revision: 1.7 Maintainer: didou Status: ready -->
<part id="getting.started"> <part id="getting.started">
<title>Pour commencer</title> <title>Pour commencer</title>
@@ -12,6 +12,8 @@
Cela s'explique plus facilement dans une situation o<> le Cela s'explique plus facilement dans une situation o<> le
programmeur et le designer de templates jouent des r<>les diff<66>rents, ou, programmeur et le designer de templates jouent des r<>les diff<66>rents, ou,
comme la plupart du temps, sont deux personnes distinctes. comme la plupart du temps, sont deux personnes distinctes.
</para>
<para>
Supposons par exemple que vous concevez une page Web qui affiche un Supposons par exemple que vous concevez une page Web qui affiche un
article de newsletter. Le titre, le sous-titre, l'auteur et le corps article de newsletter. Le titre, le sous-titre, l'auteur et le corps
sont des <20>l<EFBFBD>ments de contenu, ils ne contiennent aucune information sont des <20>l<EFBFBD>ments de contenu, ils ne contiennent aucune information
@@ -40,7 +42,8 @@
pour l'afficher, etc. sont toutes des actions relatives <20> du traitement pour l'afficher, etc. sont toutes des actions relatives <20> du traitement
de pr<70>sentation. Cela ne signifie pas que Smarty requiert une telle s<>paration de pr<70>sentation. Cela ne signifie pas que Smarty requiert une telle s<>paration
de votre part. Smarty ne sais pas quoi est quoi, c'est donc <20> vous de placer de votre part. Smarty ne sais pas quoi est quoi, c'est donc <20> vous de placer
la logique de pr<70>sentation dans vos templates. Ainsi, si vous NE d<>sirez PAS la logique de pr<70>sentation dans vos templates. Ainsi, si vous
<emphasis>ne d<>sirez pas</emphasis>
disposer de logique m<>tier dans vos templates, placez tous vos contenus disposer de logique m<>tier dans vos templates, placez tous vos contenus
dans des variables au format texte uniquement. dans des variables au format texte uniquement.
</para> </para>
@@ -58,33 +61,80 @@
Quelques caract<63>ristiques de Smarty : Quelques caract<63>ristiques de Smarty :
</para> </para>
<itemizedlist> <itemizedlist>
<listitem><para>Il est tr<74>s rapide.</para></listitem> <listitem>
<listitem><para>Il est efficace, le parser PHP s'occupe <para>
du sale travail.</para></listitem> Il est tr<74>s rapide.
<listitem><para>Pas d'analyse de template co<63>teuse, une seule compilation. </para>
</para></listitem> </listitem>
<listitem><para>Il sait ne recompiler que les fichiers de templates <listitem>
qui ont <20>t<EFBFBD> modifi<66>s.</para></listitem> <para>
<listitem><para>Vous pouvez cr<63>er des <link linkend="language.custom.functions"> Il est efficace, le parser PHP s'occupe du sale travail.
fonctions utilisateurs</link> et des <link linkend="language.modifiers"> </para>
modificateurs de variables</link> personnalis<69>s, le langage de </listitem>
template est donc extr<74>mement extensible.</para></listitem> <listitem>
<listitem><para>Syntaxe des templates configurable, vous <para>
pouvez utiliser {}, {{}}, &lt;!--{}--&gt;, etc comme d<>limiteurs. Pas d'analyse de template co<63>teuse, une seule compilation.
</para></listitem> </para>
<listitem><para>Les instructions if/elseif/else/endif </listitem>
sont pass<73>es au parser PHP, la syntaxe de l'expression {if...} <listitem>
peut <20>tre aussi simple ou aussi complexe que vous <para>
le d<>sirez.</para></listitem> Il sait ne recompiler que les fichiers de templates qui ont <20>t<EFBFBD> modifi<66>s.
<listitem><para>Imbrication illimit<69>e de sections, </para>
de 'if', etc. autoris<69>e.</para></listitem> </listitem>
<listitem><para>Il est possible d'inclure du code PHP <listitem>
directement dans vos templates, bien que cela ne soit pas obligatoire <para>
(ni conseill<6C>), vu que le moteur est extensible.</para></listitem> Vous pouvez cr<63>er des <link linkend="language.custom.functions">
<listitem><para>Support de cache int<6E>gr<67>.</para></listitem> fonctions utilisateurs</link> et des <link linkend="language.modifiers">
<listitem><para>Sources de templates arbitraires.</para></listitem> modificateurs de variables</link> personnalis<69>s, le langage de
<listitem><para>Fonctions de gestion de cache personnalisables.</para></listitem> template est donc extr<74>mement extensible.
<listitem><para>Architecture de plugins</para></listitem> </para>
</listitem>
<listitem>
<para>
Syntaxe des templates configurable, vous
pouvez utiliser {}, {{}}, &lt;!--{}--&gt;, etc. comme d<>limiteurs.
</para>
</listitem>
<listitem>
<para>
Les instructions if/elseif/else/endif
sont pass<73>es au parser PHP, la syntaxe de l'expression {if...}
peut <20>tre aussi simple ou aussi complexe que vous
le d<>sirez.
</para>
</listitem>
<listitem>
<para>
Imbrication illimit<69>e de sections, de 'if', etc. autoris<69>e.
</para>
</listitem>
<listitem>
<para>
Il est possible d'inclure du code PHP
directement dans vos templates, bien que cela ne soit pas obligatoire
(ni conseill<6C>), v<> que le moteur est extensible.
</para>
</listitem>
<listitem>
<para>
Support de cache int<6E>gr<67>.
</para>
</listitem>
<listitem>
<para>
Sources de templates arbitraires.
</para>
</listitem>
<listitem>
<para>
Fonctions de gestion de cache personnalisables.
</para>
</listitem>
<listitem>
<para>
Architecture de plugins
</para>
</listitem>
</itemizedlist> </itemizedlist>
</chapter> </chapter>
@@ -127,9 +177,9 @@ debug.tpl
linkend="constant.smarty.dir">SMARTY_DIR</link> qui linkend="constant.smarty.dir">SMARTY_DIR</link> qui
repr<70>sente le chemin complet de la biblioth<74>que Smarty. En fait, repr<70>sente le chemin complet de la biblioth<74>que Smarty. En fait,
si votre application trouve le fichier si votre application trouve le fichier
<emphasis>Smarty.class.php</emphasis>, vous n'aurez pas <filename>Smarty.class.php</filename>, vous n'aurez pas
besoin de d<>finir la variable SMARTY_DIR, Smarty s'en chargera pour vous. besoin de d<>finir la variable SMARTY_DIR, Smarty s'en chargera pour vous.
En revanche, si <emphasis>Smarty.class.php</emphasis> En revanche, si <filename>Smarty.class.php</filename>
n'est pas dans votre r<>pertoire d'inclusion ou que vous ne n'est pas dans votre r<>pertoire d'inclusion ou que vous ne
donnez pas un chemin absolu <20> votre application, vous donnez pas un chemin absolu <20> votre application, vous
devez d<>finir SMARTY_DIR explicitement. SMARTY_DIR devez d<>finir SMARTY_DIR explicitement. SMARTY_DIR
@@ -154,7 +204,7 @@ $smarty = new Smarty;
<para> <para>
Essayez de lancer le script ci-dessus. Si vous obtenez une erreur indiquant Essayez de lancer le script ci-dessus. Si vous obtenez une erreur indiquant
que le fichier <emphasis>Smarty.class.php</emphasis> n'est pas trouv<75>, que le fichier <filename>Smarty.class.php</filename> n'est pas trouv<75>,
tentez l'une des actions suivantes : tentez l'une des actions suivantes :
</para> </para>
@@ -201,19 +251,21 @@ $smarty = new Smarty;
Maintenant que les fichiers de la librairie sont en place, Maintenant que les fichiers de la librairie sont en place,
il est temps de d<>finir les r<>pertoires de Smarty, pour votre application. il est temps de d<>finir les r<>pertoires de Smarty, pour votre application.
Smarty a besoin de quatre r<>pertoires qui sont (par d<>faut) Smarty a besoin de quatre r<>pertoires qui sont (par d<>faut)
<emphasis>templates</emphasis>, <filename class="directory">templates</filename>,
<emphasis>templates_c</emphasis>, <emphasis>configs</emphasis> et <filename class="directory">templates_c</filename>,
<emphasis>cache</emphasis>. Chacun d'entre eux peut <20>tre d<>fini <filename class="directory">configs</filename> et
via les attributs <emphasis>$template_dir</emphasis>, <filename class="directory">cache</filename>. Chacun d'entre eux peut <20>tre d<>fini
<emphasis>$compile_dir</emphasis>, <emphasis>$config_dir</emphasis> et via les attributs <varname>$template_dir</varname>,
<emphasis>$cache_dir</emphasis> respectivement. Il est vivement <varname>$compile_dir</varname>, <varname>$config_dir</varname> et
<varname>$cache_dir</varname> respectivement. Il est vivement
conseill<6C> que vous r<>gliez ces r<>pertoires s<>par<61>ment pour chaque conseill<6C> que vous r<>gliez ces r<>pertoires s<>par<61>ment pour chaque
application qui utilise Smarty. application qui utilise Smarty.
</para> </para>
<para> <para>
Assurez-vous de bien conna<6E>tre chemin de la racine Assurez-vous de bien conna<6E>tre chemin de la racine
de votre arborescence Web. Dans notre exemple, la racine de votre arborescence Web. Dans notre exemple, la racine
est "/web/www.mydomain.com/docs". Seul Smarty est <filename
class="directory">/web/www.example.com/docs/</filename>. Seul Smarty
acc<63>de aux r<>pertoires en question, et jamais le serveur Web. acc<63>de aux r<>pertoires en question, et jamais le serveur Web.
Pour des raisons de s<>curit<69>, il est donc conseill<6C> de Pour des raisons de s<>curit<69>, il est donc conseill<6C> de
sortir ces r<>pertoires dans un r<>pertoire sortir ces r<>pertoires dans un r<>pertoire
@@ -228,15 +280,16 @@ $smarty = new Smarty;
environnement pour n'importe quelle autre application, il suffit de environnement pour n'importe quelle autre application, il suffit de
remplacer "livredor" avec le nom de votre application. Nous allons remplacer "livredor" avec le nom de votre application. Nous allons
mettre nos r<>pertoires Smarty dans mettre nos r<>pertoires Smarty dans
"/web/www.mydomain.com/smarty/livredor/". <filename
class="directory">/web/www.example.com/smarty/livredor/</filename>.
</para> </para>
<para> <para>
Vous allez avoir besoin d'au moins un fichier <20> la racine de Vous allez avoir besoin d'au moins un fichier <20> la racine de
l'arborescence Web, l'arborescence Web,
il s'agit du script auquel l'internaute a acc<63>s. Nous allons l'appeler il s'agit du script auquel l'internaute a acc<63>s. Nous allons l'appeler
"index.php" et le placer dans un sous-r<>pertoire <filename>index.php</filename> et le placer dans un sous-r<>pertoire
appel<65> "/livredor/". appel<65> <filename class="directory">/livredor/</filename>.
</para> </para>
<note> <note>
<title>Technical Note</title> <title>Technical Note</title>
@@ -244,7 +297,7 @@ $smarty = new Smarty;
Il est pratique de configurer le serveur Web de Il est pratique de configurer le serveur Web de
sorte que "index.php" soit identifi<66> comme fichier sorte que "index.php" soit identifi<66> comme fichier
par d<>faut de ce r<>pertoire. Aicnsi, si l'on tape par d<>faut de ce r<>pertoire. Aicnsi, si l'on tape
"http://www.mydomain.com/livredor/", le script index.php soit "http://www.example.com/livredor/", le script index.php soit
ex<65>cut<75> sans que "index.php" ne soit sp<73>cifi<66> dans l'URL. Avec Apache ex<65>cut<75> sans que "index.php" ne soit sp<73>cifi<66> dans l'URL. Avec Apache
vous pouvez r<>gler cela en ajoutant "index.php" <20> la ligne o<> se vous pouvez r<>gler cela en ajoutant "index.php" <20> la ligne o<> se
trouve DirectoryIndex (s<>parez chaque entr<74>e par un espace). trouve DirectoryIndex (s<>parez chaque entr<74>e par un espace).
@@ -264,12 +317,12 @@ $smarty = new Smarty;
/usr/local/lib/php/Smarty/internals/*.php /usr/local/lib/php/Smarty/internals/*.php
/usr/local/lib/php/Smarty/plugins/*.php /usr/local/lib/php/Smarty/plugins/*.php
/web/www.mydomain.com/smarty/livredor/templates/ /web/www.example.com/smarty/livredor/templates/
/web/www.mydomain.com/smarty/livredor/templates_c/ /web/www.example.com/smarty/livredor/templates_c/
/web/www.mydomain.com/smarty/livredor/configs/ /web/www.example.com/smarty/livredor/configs/
/web/www.mydomain.com/smarty/livredor/cache/ /web/www.example.com/smarty/livredor/cache/
/web/www.mydomain.com/docs/livredor/index.php /web/www.example.com/docs/livredor/index.php
]]> ]]>
</screen> </screen>
</example> </example>
@@ -290,11 +343,11 @@ $smarty = new Smarty;
<title>r<EFBFBD>gler les permissions d'acc<63>s</title> <title>r<EFBFBD>gler les permissions d'acc<63>s</title>
<programlisting role="shell"> <programlisting role="shell">
<![CDATA[ <![CDATA[
chown nobody:nobody /web/www.mydomain.com/smarty/livredor/templates_c/ chown nobody:nobody /web/www.example.com/smarty/livredor/templates_c/
chmod 770 /web/www.mydomain.com/smarty/livredor/templates_c/ chmod 770 /web/www.example.com/smarty/livredor/templates_c/
chown nobody:nobody /web/www.mydomain.com/smarty/livredor/cache/ chown nobody:nobody /web/www.example.com/smarty/livredor/cache/
chmod 770 /web/www.mydomain.com/smarty/livredor/cache/ chmod 770 /web/www.example.com/smarty/livredor/cache/
]]> ]]>
</programlisting> </programlisting>
</example> </example>
@@ -316,7 +369,7 @@ chmod 770 /web/www.mydomain.com/smarty/livredor/cache/
</para> </para>
<example> <example>
<title>Edition de /web/www.mydomain.com/smarty/templates/index.tpl</title> <title>Edition de /web/www.example.com/smarty/templates/index.tpl</title>
<screen> <screen>
<![CDATA[ <![CDATA[
@@ -349,7 +402,7 @@ Hello, {$name}!
</para> </para>
<example> <example>
<title><EFBFBD>dition de /web/www.mydomain.com/docs/livredor/index.php</title> <title><EFBFBD>dition de /web/www.example.com/docs/livredor/index.php</title>
<screen> <screen>
<![CDATA[ <![CDATA[
<?php <?php
@@ -358,10 +411,10 @@ Hello, {$name}!
$smarty = new Smarty; $smarty = new Smarty;
$smarty->template_dir = '/web/www.mydomain.com/smarty/livredor/templates/'; $smarty->template_dir = '/web/www.example.com/smarty/livredor/templates/';
$smarty->compile_dir = '/web/www.mydomain.com/smarty/livredor/templates_c/'; $smarty->compile_dir = '/web/www.example.com/smarty/livredor/templates_c/';
$smarty->config_dir = '/web/www.mydomain.com/smarty/livredor/configs/'; $smarty->config_dir = '/web/www.example.com/smarty/livredor/configs/';
$smarty->cache_dir = '/web/www.mydomain.com/smarty/livredor/cache/'; $smarty->cache_dir = '/web/www.example.com/smarty/livredor/cache/';
$smarty->assign('name','Ned'); $smarty->assign('name','Ned');
@@ -376,8 +429,9 @@ Hello, {$name}!
<para> <para>
Dans notre exemple, nous avons configur<75> les chemins absolus Dans notre exemple, nous avons configur<75> les chemins absolus
pour chacun des r<>pertoires Smarty. Si pour chacun des r<>pertoires Smarty. Si
'/web/www.mydomain.com/smarty/livredor/' est dans votre <filename
include_path PHP alors ces r<>glages ne sont pas n<>cessaires. class="directory">/web/www.example.com/smarty/livredor/</filename>
est dans votre include_path PHP alors ces r<>glages ne sont pas n<>cessaires.
Quoi qu'il en soit il est plus efficace et (par exp<78>rience) Quoi qu'il en soit il est plus efficace et (par exp<78>rience)
moins g<>n<EFBFBD>rateur d'erreurs de les d<>finir avec des chemins moins g<>n<EFBFBD>rateur d'erreurs de les d<>finir avec des chemins
absolus. Cela nous garantit que Smarty r<>cup<75>rera les bons fichiers. absolus. Cela nous garantit que Smarty r<>cup<75>rera les bons fichiers.
@@ -385,7 +439,7 @@ Hello, {$name}!
</note> </note>
<para> <para>
Et maintenant appelez le fichier index.php avec navigateur Et maintenant appelez le fichier <filename>index.php</filename> avec navigateur
Web. Vous devriez voir "Hello, Ned!". Web. Vous devriez voir "Hello, Ned!".
</para> </para>
<para> <para>
@@ -406,7 +460,7 @@ Hello, {$name}!
propre classe fille et de l'initialiser selon votre environnement. propre classe fille et de l'initialiser selon votre environnement.
De la sorte, nous n'aurons plus besoin de configurer <20> chaques fois les De la sorte, nous n'aurons plus besoin de configurer <20> chaques fois les
chemins de notre environnement. Cr<43>ons un nouveau r<>pertoire chemins de notre environnement. Cr<43>ons un nouveau r<>pertoire
"/php/includes/livredor/" et un nouveau fichier appel<65> "setup.php". "/php/includes/livredor/" et un nouveau fichier appel<65> <filename>setup.php</filename>.
Dans notre exemple d'environnement, "/php/includes" est notre Dans notre exemple d'environnement, "/php/includes" est notre
include_path PHP. Assurez-vous de faire la m<>me chose ou alors d'utiliser include_path PHP. Assurez-vous de faire la m<>me chose ou alors d'utiliser
des chemins absolus. des chemins absolus.
@@ -430,18 +484,18 @@ Hello, {$name}!
function Smarty_livredor() { function Smarty_livredor() {
// Constructeur de la classe. Appel<EFBFBD> automatiquement // Constructeur de la classe.
// <20> l'instanciation de la classe. // Appel<65> automatiquement <20> l'instanciation de la classe.
$this->Smarty(); $this->Smarty();
$this->template_dir = '/web/www.mydomain.com/smarty/livredor/templates/'; $this->template_dir = '/web/www.example.com/smarty/livredor/templates/';
$this->compile_dir = '/web/www.mydomain.com/smarty/livredor/templates_c/'; $this->compile_dir = '/web/www.example.com/smarty/livredor/templates_c/';
$this->config_dir = '/web/www.mydomain.com/smarty/livredor/configs/'; $this->config_dir = '/web/www.example.com/smarty/livredor/configs/';
$this->cache_dir = '/web/www.mydomain.com/smarty/livredor/cache/'; $this->cache_dir = '/web/www.example.com/smarty/livredor/cache/';
$this->caching = true; $this->caching = true;
$this->assign('app_name','Guest Book'); $this->assign('app_name', 'Guest Book');
} }
} }
@@ -455,7 +509,7 @@ Hello, {$name}!
</para> </para>
<example> <example>
<title><EFBFBD>dition de /web/www.mydomain.com/docs/livredor/index.php</title> <title>Edition de /web/www.example.com/docs/livredor/index.php</title>
<programlisting role="php"> <programlisting role="php">
<![CDATA[ <![CDATA[
<?php <?php

View File

@@ -11,6 +11,7 @@
<person name="G<>rald Cro<72>s" email="gerald@php.net" nick="gerald" cvs="yes" editor="yes" /> <person name="G<>rald Cro<72>s" email="gerald@php.net" nick="gerald" cvs="yes" editor="yes" />
<person name="Arnaud Cogolu<6C>gnes" email="arnaud@php.net" nick="nono" cvs="yes" /> <person name="Arnaud Cogolu<6C>gnes" email="arnaud@php.net" nick="nono" cvs="yes" />
<person name="Mehdi Achour" email="didou@php.net" nick="didou" cvs="yes" /> <person name="Mehdi Achour" email="didou@php.net" nick="didou" cvs="yes" />
<person name="Yannick Torres" email="yannick@php.net" nick="yannick" cvs="yes" />
<person name="Raoul Lourse" email="nobody@php.net" nick="nobody" cvs="yes" /> <person name="Raoul Lourse" email="nobody@php.net" nick="nobody" cvs="yes" />
</translators> </translators>