Files
smarty/docs/fr/appendixes/tips.xml

366 lines
11 KiB
XML
Raw Normal View History

2004-03-28 15:18:13 +00:00
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
2004-04-19 17:08:12 +00:00
<!-- EN-Revision: 1.4 Maintainer: didou Status: ready -->
2004-03-28 15:18:13 +00:00
<chapter id="tips">
2004-04-19 17:08:12 +00:00
<title>Trucs et astuces</title>
<para></para>
<sect1 id="tips.blank.var.handling">
<title>Gestion des variables non-assign<67>es</title>
<para>
Peut-<2D>tre voudrez-vous des fois afficher une valeur par
d<>faut pour une variable qui n'a pas <20>t<EFBFBD> assign<67>e, comme
pour afficher "&amp;nbsp;" afin que les couleurs de fond
des tableaux fonctionnent. Beaucoup utiliseraient une
instruction {if} pour g<>rer cela, mais il existe un moyen
plus facile dans Smarty : l'utilisation du modificateur
de variable <emphasis>default</emphasis>.
</para>
<example>
<title>afficher &amp;nbsp; quand une variable est vide</title>
<programlisting>
<![CDATA[
2004-03-28 15:18:13 +00:00
{* la m<>thode pas adapt<70>e *}
{if $title eq ""}
2004-04-19 17:08:12 +00:00
&nbsp;
2004-03-28 15:18:13 +00:00
{else}
2004-04-19 17:08:12 +00:00
{$title}
2004-03-28 15:18:13 +00:00
{/if}
{* la bonne m<>thode *}
2004-04-19 17:08:12 +00:00
{$title|default:"&nbsp;"}
]]>
</programlisting>
</example>
</sect1>
2004-03-28 15:18:13 +00:00
<sect1 id="tips.default.var.handling">
2004-04-19 17:08:12 +00:00
<title>Gestion des variables par d<>faut</title>
<para>
Si une variable est utilis<69>e fr<66>quemment dans vos templates,
lui appliquer le modificateur par d<>faut peut <20>tre un peu fastidieux.
Vous pouvez rem<65>dier <20> cela en lui assignant une valeur par d<>faut
avec la fonction <link linkend="language.function.assign">assign</link>.
</para>
2004-03-28 15:18:13 +00:00
<example>
<title>assigner une valeur par d<>faut <20> une variable de template</title>
<programlisting>
{* faites cela qq part en haut de votre template *}
{assign var="title" value=$title|default:"no title"}
{* si $title est vide, il contiendra alors no "no title" *}
{$title}</programlisting>
</example>
2004-04-19 17:08:12 +00:00
</sect1>
2004-03-28 15:18:13 +00:00
<sect1 id="tips.passing.vars">
2004-04-19 17:08:12 +00:00
<title>Passage du titre <20> un template d'en-t<>te</title>
<para>
Quand la majorit<69> de vos templates utilisent les m<>mes en-t<>te et pied-de-page,
il est d'usage de les mettre dans leurs propres templates et de les inclure.
Mais comment faire si l'en-t<>te doit avoir un titre diff<66>rent, selon la page
d'o<> on vient ? Vous pouvez passer le titre <20> l'en-t<>te quand il est inclus.
</para>
2004-03-28 15:18:13 +00:00
<example>
<title>passer le titre au template d'en-t<>te</title>
<programlisting>
mainpage.tpl
------------
{include file="header.tpl" title="Main Page"}
{* le corps du template va ici *}
{include file="footer.tpl"}
archives.tpl
------------
{config_load file="archive_page.conf"}
{include file="header.tpl" title=#archivePageTitle#}
{* le corps du template va ici *}
{include file="footer.tpl"}
header.tpl
----------
&lt;HTML&gt;
&lt;HEAD&gt;
&lt;TITLE&gt;{$title|default:"BC News"}&lt;/TITLE&gt;
&lt;/HEAD&gt;
&lt;BODY&gt;
footer.tpl
----------
&lt;/BODY&gt;
&lt;/HTML&gt;</programlisting>
</example>
2004-04-19 17:08:12 +00:00
<para>
Quand la page principale est con<6F>ue, le titre "Main page" est pass<73> <20> header.tpl
et sera donc utilis<69> pour le titre. Quand la page d'archive est con<6F>ue,
le titre sera "Archives". Notez que dans l'exemple des archives, on utilise
le fichier archives_page.conf plut<75>t que des variables cod<6F>es en dur.
Remarquez aussi que "BC News" est affich<63>e si la variable $title
n'est pas d<>finie, gr<67>ce au modificateur de variable <emphasis>default</emphasis>.
</para>
</sect1>
2004-03-28 15:18:13 +00:00
<sect1 id="tips.dates">
<title>Dates</title>
<para>
De fa<66>on g<>n<EFBFBD>rale, essayez de toujours passer les dates <20> Smarty
sous forme de timestamp. Cela permet aux designers de templates d'utiliser
<link linkend="language.modifier.date.format">date_format</link>
pour avoir un contr<74>le total sur le formatage des dates et de comparer
facilement les dates entre elles.
</para>
<para>
NOTE : <20> partir Smarty 1.4.0, vous pouvez passer les dates <20> Smarty
sous la forme de timestamps Unix ou MySQL, ou tout autre format de dates
que comprend strtotime().
</para>
<example>
<title>utilisation de date_format</title>
<programlisting>
{$startDate|date_format}
OUTPUT:
Jan 4, 2001
{$startDate|date_format:"%Y/%m/%d"}
OUTPUT:
2001/01/04
{if $date1 &lt; $date2}
2004-04-19 17:08:12 +00:00
...
2004-03-28 15:18:13 +00:00
{/if}</programlisting>
</example>
<para>
En utilisant la fonction {html_select_date} dans un template, le programmeur
veut en g<>n<EFBFBD>ral convertir le r<>sultat d'un formulaire en un timestamp.
Voici une fonction qui devrait vous <20>tre utile.
</para>
<example>
<title>conversion des <20>l<EFBFBD>ments date d'un formulaire en timestamp</title>
<programlisting>
// cela suppose que vos <20>l<EFBFBD>ments de formulaire soient nomm<6D>s
// startDate_Day, startDate_Month, startDate_Year
$startDate = makeTimeStamp($startDate_Year,$startDate_Month,$startDate_Day);
function makeTimeStamp($year="",$month="",$day="")
{
2004-04-19 17:08:12 +00:00
if(empty($year))
$year = strftime("%Y");
if(empty($month))
$month = strftime("%m");
if(empty($day))
$day = strftime("%d");
return mktime(0,0,0,$month,$day,$year);
2004-03-28 15:18:13 +00:00
}</programlisting>
</example>
2004-04-19 17:08:12 +00:00
</sect1>
2004-03-28 15:18:13 +00:00
<sect1 id="tips.wap">
2004-04-19 17:08:12 +00:00
<title>WAP/WML</title>
<para>
Les templates WAP/WML n<>cessitent un en-t<>te "Content-Type" qui doit <20>tre
pass<73> avec le template. Le moyen le plus facile de faire cela est d'<27>crire
une fonction utilisateur qui <20>crit l'en-t<>te. Si vous utilisez le cache,
cela ne fonctionnera pas. Nous utiliserons donc une balise d'insertion
2004-03-28 15:18:13 +00:00
(rappelez-vous que les balises d'insertion ne sont pas mises en cache !).
Assurez-vous qu'aucune sortie
2004-04-19 17:08:12 +00:00
rien n'est transmise au navigateur avant l'appel du template, sans quoi
2004-03-28 15:18:13 +00:00
la modification de l'en-t<>te <20>chouera.
2004-04-19 17:08:12 +00:00
</para>
2004-03-28 15:18:13 +00:00
<example>
<title>utilisation d'insert pour <20>crire un en-t<>te Content-Type WML</title>
<programlisting>
// assurez-vous que Apache est configur<75> pour les extensions .wml !
// mettez cette fonction qq part dans votre applications
// ou dans Smarty.addons.php
function insert_header() {
// cette fonction attend un argument $content
extract(func_get_arg(0));
if(empty($content))
return;
header($content);
return;
}
// votre template Smarty DOIT commencer avec la balise d'insertion
&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt;
&lt;!-- begin new wml deck --&gt;
&lt;wml&gt;
&lt;!-- begin first card --&gt;
&lt;card&gt;
&lt;do type="accept"&gt;
&lt;go href="#two"/&gt;
&lt;/do&gt;
&lt;p&gt;
Welcome to WAP with Smarty!
Press OK to continue...
&lt;/p&gt;
&lt;/card&gt;
&lt;!-- begin second card --&gt;
&lt;card id="two"&gt;
&lt;p&gt;
Pretty easy isn't it?
&lt;/p&gt;
&lt;/card&gt;
&lt;/wml&gt;</programlisting>
</example>
2004-04-19 17:08:12 +00:00
</sect1>
<sect1 id="tips.componentized.templates">
<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>
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
2004-03-28 15:18:13 +00:00
dans l'application PHP (peut-<2D>tre avec des requ<71>tes en base de donn<6E>es), puis
vous instanciez votre objet Smarty, assignez les variables et affichez le
template. Disons par exemple que nous avons un t<>l<EFBFBD>scripteur dans
notre template. Nous r<>cup<75>rerions les donn<6E>es dans notre application,
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
en incluant directement le template sans avoir <20> se soucier de la r<>cup<75>ration
des donn<6E>es.
2004-04-19 17:08:12 +00:00
</para>
<para>
Vous pouvez int<6E>grer du PHP dans vos templates avec les balises
{php}{/php}. Avec cette m<>thode, vous pouvez inclure des templates complets,
2004-03-28 15:18:13 +00:00
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.
2004-04-19 17:08:12 +00:00
</para>
2004-03-28 15:18:13 +00:00
<example>
<title>template composant</title>
<programlisting>
{* Smarty *}
{php}
// notre fonction pour r<>cup<75>rer les donn<6E>es
2004-04-19 17:08:12 +00:00
function fetch_ticker($symbol,&amp;$ticker_name,&amp;$ticker_price) {
2004-03-28 15:18:13 +00:00
// du traitement qui r<>cup<75>re $ticker_name
// $ticker_price
2004-04-19 17:08:12 +00:00
}
2004-03-28 15:18:13 +00:00
// appelle la fonction
2004-04-19 17:08:12 +00:00
fetch_ticker("YHOO",$ticker_name,$ticker_price);
// assigne les variables
2004-03-28 15:18:13 +00:00
$this->assign("ticker_name",$ticker_name);
$this->assign("ticker_price",$ticker_price);
{/php}
Stock Name: {$ticker_name} Stock Price: {$ticker_price}</programlisting>
</example>
<para>
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
2004-04-19 17:08:12 +00:00
linkend="language.function.include.php">include_php</link> pour plus
d'informations.
2004-03-28 15:18:13 +00:00
</para>
<example>
<title>template composant avec include_php</title>
<programlisting>
load_ticker.php
---------------
&lt;?php
2004-04-19 17:08:12 +00:00
// 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
2004-03-28 15:18:13 +00:00
$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>
2004-04-19 17:08:12 +00:00
</sect1>
<sect1 id="tips.obfuscating.email">
<title>Dissimuler les adresses email</title>
<para>
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
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>
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.
</para>
2004-03-28 15:18:13 +00:00
<example>
<title>exemple de dissimulation d'une adresse email</title>
<programlisting>
index.tpl
---------
Send inquiries to
{mailto address=$EmailAddress encode="javascript" subject="Hello"}
</programlisting>
</example>
2004-04-19 17:08:12 +00:00
<note>
<title>Note technique</title>
<para>
Cette m<>thode n'est pas infaillible. Un spammer peut programmer son
collecteur d'email pour passer outre cette astuce, mais c'est cependant
peu probable.
</para>
</note>
</sect1>
2004-03-28 15:18:13 +00:00
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
2004-04-19 17:08:12 +00:00
-->