PageRenderTime 107ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/documentation/fr/getting-started.xml

https://bitbucket.org/hallgrennetworks/smarty
XML | 600 lines | 519 code | 59 blank | 22 comment | 0 complexity | d0cd683d8e7856ccc97db55143b2bc74 MD5 | raw file
Possible License(s): LGPL-3.0
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- $Revision: 2972 $ -->
  3. <!-- EN-Revision: 1.15 Maintainer: yannick Status: ready -->
  4. <part id="getting.started">
  5. <title>Pour commencer</title>
  6. <chapter id="what.is.smarty">
  7. <title>Qu'est-ce que Smarty ?</title>
  8. <para>
  9. Smarty est un moteur de template pour PHP. Plus précisément, il facilite
  10. la séparation entre la logique applicative et la présentation.
  11. Celà s'explique plus facilement dans une situation où le
  12. programmeur et le designer de templates jouent des rôles différents, ou,
  13. comme la plupart du temps, sont deux personnes distinctes.
  14. </para>
  15. <para>
  16. Supposons par exemple que vous concevez une page Web qui affiche un
  17. article de newsletter. Le titre, le sous-titre, l'auteur et le corps
  18. sont des éléments de contenu, ils ne contiennent aucune information
  19. concernant la présentation. Ils sont transmis à Smarty par l'application,
  20. puis le designer de templates éditent les templates et utilisent une
  21. combinaison de balises HTML et de balises de templates pour formater
  22. la présentation de ces éléments (tableaux HTML, couleurs d'arrière-plan,
  23. tailles des polices, feuilles de styles, etc.). Un beau jour le programmeur
  24. a besoin de changer la façon dont le contenu de l'article
  25. est récupéré (un changement dans la logique applicative). Ce
  26. changement n'affecte pas le designer de templates, le contenu
  27. arrivera toujours au template de la même façon. De même, si le
  28. le designer de templates veut changer complétement l'apparence
  29. du template, aucun changement dans la logique de l'application
  30. n'est nécessaire. Ainsi le programmeur peut changer la logique
  31. de l'application sans restructurer les templates, et le designer
  32. de templates peut changer les templates sans briser la logique
  33. applicative.
  34. </para>
  35. <para>
  36. Un des objectifs de Smarty est la séparation de la logique métier de la
  37. logique de présentation. Celà signifie que les templates peuvent contenir
  38. des traitements, du moment qu'il soit relatif à de la présentation.
  39. Inclure d'autres templates, alterner les couleurs des lignes
  40. d'un tableau, mettre du texte en majuscule, parcourir un tableau de données
  41. pour l'afficher, etc. sont toutes des actions relatives à du traitement
  42. de présentation. Celà ne signifie pas que Smarty requiert une telle séparation
  43. de votre part. Smarty ne sais pas quoi est quoi, c'est donc à vous de placer
  44. la logique de présentation dans vos templates. Ainsi, si vous
  45. <emphasis>ne désirez pas</emphasis>
  46. disposer de logique métier dans vos templates, placez tous vos contenus
  47. dans des variables au format texte uniquement.
  48. </para>
  49. <para>
  50. L'un des aspects unique de Smarty est la compilation des templates.
  51. Celà signifie que Smarty lit les templates et crée des scripts PHP à partir
  52. de ces derniers. Une fois créés, ils sont exécutés.
  53. Il n'y a donc pas d'analyse coûteuse de template à chaque requête,
  54. et les templates peuvent bénéficier des solutions de cache PHP
  55. comme Zend Accelerator (<ulink url="&url.zend;">&url.zend;</ulink>) ou
  56. PHP Accelerator.
  57. </para>
  58. <para>
  59. Quelques caractéristiques de Smarty :
  60. </para>
  61. <itemizedlist>
  62. <listitem>
  63. <para>
  64. Il est très rapide.
  65. </para>
  66. </listitem>
  67. <listitem>
  68. <para>
  69. Il est efficace, le parser PHP s'occupe du sale travail.
  70. </para>
  71. </listitem>
  72. <listitem>
  73. <para>
  74. Pas d'analyse de template coûteuse, une seule compilation.
  75. </para>
  76. </listitem>
  77. <listitem>
  78. <para>
  79. Il sait ne recompiler que les fichiers de templates qui ont été modifiés.
  80. </para>
  81. </listitem>
  82. <listitem>
  83. <para>
  84. Vous pouvez créer des <link linkend="language.custom.functions">
  85. fonctions utilisateurs</link> et des <link linkend="language.modifiers">
  86. modificateurs de variables</link> personnalisés, le langage de
  87. template est donc extrémement extensible.
  88. </para>
  89. </listitem>
  90. <listitem>
  91. <para>
  92. Syntaxe des templates configurable, vous
  93. pouvez utiliser {}, {{}}, &lt;!--{}--&gt;, etc. comme
  94. <link linkend="variable.left.delimiter">délimiteurs tag</link>.
  95. </para>
  96. </listitem>
  97. <listitem>
  98. <para>
  99. Les instructions <link
  100. linkend="language.function.if">if/elseif/else/endif</link>
  101. sont passées au parser PHP, la syntaxe de l'expression {if...}
  102. peut être aussi simple ou aussi complexe que vous
  103. le désirez.
  104. </para>
  105. </listitem>
  106. <listitem>
  107. <para>
  108. Imbrication illimitée de <link linkend="language.function.section">sections</link>, de 'if', etc. autorisée.
  109. </para>
  110. </listitem>
  111. <listitem>
  112. <para>
  113. Il est possible d'inclure du <link linkend="language.function.php">code PHP</link>
  114. directement dans vos templates, bien que celà ne soit pas obligatoire
  115. (ni conseillé), que le moteur est extensible.
  116. </para>
  117. </listitem>
  118. <listitem>
  119. <para>
  120. Support de <link linkend="caching">cache</link> intégré.
  121. </para>
  122. </listitem>
  123. <listitem>
  124. <para>
  125. Sources de <link
  126. linkend="template.resources">templates</link> arbitraires.
  127. </para>
  128. </listitem>
  129. <listitem>
  130. <para>
  131. Fonctions de <link
  132. linkend="section.template.cache.handler.func">gestion de cache</link> personnalisables.
  133. </para>
  134. </listitem>
  135. <listitem>
  136. <para>
  137. Architecture de <link linkend="plugins">plugins</link>
  138. </para>
  139. </listitem>
  140. </itemizedlist>
  141. </chapter>
  142. <chapter id="installation">
  143. <title>Installation</title>
  144. <sect1 id="installation.requirements">
  145. <title>Ce dont vous avez besoin</title>
  146. <para>
  147. Smarty nécessite un serveur Web utilisant PHP 4.0.6 ou supérieur.
  148. </para>
  149. </sect1>
  150. <sect1 id="installing.smarty.basic">
  151. <title>Installation de base</title>
  152. <para>
  153. Copiez les fichiers bibliothèques de Smarty du sous-dossier
  154. <filename>/libs/</filename> de la distribution à un emplacement
  155. accessible à PHP. Ce sont des fichiers PHP que vous NE DEVEZ PAS
  156. modifier. Ils sont partagés par toutes les applications et ne seront
  157. mis à jour que lorsque vous installerez une nouvelle version de
  158. Smarty.
  159. </para>
  160. <example>
  161. <title>fichiers nécessaires de la bibliothèque SMARTY</title>
  162. <screen>
  163. <![CDATA[
  164. Smarty.class.php
  165. Smarty_Compiler.class.php
  166. Config_File.class.php
  167. debug.tpl
  168. /internals/*.php (tous)
  169. /plugins/*.php (tous doivent être sûr, peut-être votre site n'a besoin seulement que d'un sous-ensemble)
  170. ]]>
  171. </screen>
  172. </example>
  173. <para>
  174. Smarty utilise une <ulink url="&url.php-manual;define">constante</ulink> PHP appelée <link
  175. linkend="constant.smarty.dir"><constant>SMARTY_DIR</constant></link> qui
  176. représente le <emphasis role="bold">chemin complet</emphasis> de la bibliothèque Smarty.
  177. En fait, si votre application trouve le fichier
  178. <filename>Smarty.class.php</filename>, vous n'aurez pas
  179. besoin de définir la variable
  180. <link linkend="constant.smarty.dir"><constant>SMARTY_DIR</constant></link>,
  181. Smarty s'en chargera pour vous.
  182. En revanche, si <filename>Smarty.class.php</filename>
  183. n'est pas dans votre répertoire d'inclusion ou que vous ne
  184. donnez pas un chemin absolu à votre application, vous
  185. devez définir <constant>SMARTY_DIR</constant> explicitement.
  186. <constant>SMARTY_DIR</constant>
  187. <emphasis role="bold">doit</emphasis> avoir être terminé par un slash.
  188. </para>
  189. <example>
  190. <title>Créer une instance de Smarty</title>
  191. <para>
  192. Voici comment créer une instance de Smarty dans vos scripts PHP :
  193. </para>
  194. <programlisting role="php">
  195. <![CDATA[
  196. <?php
  197. // Note : Smarty a un 'S' majuscule
  198. require_once('Smarty.class.php');
  199. $smarty = new Smarty();
  200. ?>
  201. ]]>
  202. </programlisting>
  203. </example>
  204. <para>
  205. Essayez de lancer le script ci-dessus. Si vous obtenez une erreur indiquant
  206. que le fichier <filename>Smarty.class.php</filename> n'est pas trouvé,
  207. tentez l'une des actions suivantes :
  208. </para>
  209. <example>
  210. <title>Définition manuelle de la constante SMARTY_DIR</title>
  211. <programlisting role="php">
  212. <![CDATA[
  213. <?php
  214. // Style *nix (notez le 'S' majuscule)
  215. define('SMARTY_DIR', '/usr/local/lib/php/Smarty-v.e.r/libs/');
  216. // Style Windows
  217. define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');
  218. require_once(SMARTY_DIR . 'Smarty.class.php');
  219. $smarty = new Smarty();
  220. ?>
  221. ]]>
  222. </programlisting>
  223. </example>
  224. <example>
  225. <title>Définir le chemin absolu au fichier de la bibliothèque</title>
  226. <programlisting role="php">
  227. <![CDATA[
  228. <?php
  229. // Style *nix (notez le 'S' majuscule)
  230. require_once('/usr/local/lib/php/Smarty-v.e.r/libs/Smarty.class.php');
  231. // Style Windows
  232. require_once('c:/webroot/libs/Smarty-v.e.r/libs/Smarty.class.php');
  233. $smarty = new Smarty();
  234. ?>
  235. ]]>
  236. </programlisting>
  237. </example>
  238. <example>
  239. <title>Ajout du dossier contenant la bibliothèque à l'include_path de PHP</title>
  240. <programlisting role="php">
  241. <![CDATA[
  242. <?php
  243. // Editez votre fichier php.ini, ajoutez le dossier contenant la
  244. // bibliothèque Smarty à l'include_path et redémarrez le serveur web.
  245. // Puis, ce qui suit devrait fonctionner :
  246. require_once('Smarty.class.php');
  247. $smarty = new Smarty();
  248. ?>
  249. ]]>
  250. </programlisting>
  251. </example>
  252. <para>
  253. Maintenant que les fichiers de la librairie sont en place,
  254. il est temps de définir les répertoires de Smarty, pour votre application.
  255. </para>
  256. <para>
  257. Smarty a besoin de quatre répertoires qui sont, par défaut,
  258. <filename class="directory">'templates/'</filename>,
  259. <filename class="directory">'templates_c/'</filename>,
  260. <filename class="directory">'configs/'</filename> et
  261. <filename class="directory">'cache/'</filename>.
  262. </para>
  263. <para>
  264. Chacun d'entre eux peut être défini
  265. via les attributs <link linkend="variable.template.dir">
  266. <varname>$template_dir</varname></link>,
  267. <link linkend="variable.compile.dir">
  268. <varname>$compile_dir</varname></link>, <link linkend="variable.config.dir">
  269. <varname>$config_dir</varname></link> et
  270. <link linkend="variable.cache.dir">
  271. <varname>$cache_dir</varname></link> respectivement. Il est vivement
  272. conseillé que vous régliez ces répertoires séparément pour chaque
  273. application qui utilise Smarty.
  274. </para>
  275. <para>
  276. Assurez-vous de bien connaître chemin de la racine
  277. de votre arborescence Web. Dans notre exemple, la racine
  278. est <filename
  279. class="directory">/web/www.example.com/docs/</filename>. Seul Smarty
  280. accède aux répertoires en question, et jamais le serveur Web.
  281. Pour des raisons de sécurité, il est donc conseillé de
  282. sortir ces répertoires dans un répertoire
  283. <emphasis>en dehors</emphasis> de l'arborescence
  284. Web.
  285. </para>
  286. <para>
  287. Dans notre exemple d'installation, nous allons régler l'environnement
  288. de Smarty pour une application de livre d'or. Nous avons ici choisi
  289. une application principalement pour mettre en évidence une
  290. convention de nommage des répertoires. Vous pouvez utiliser le même
  291. environnement pour n'importe quelle autre application, il suffit de
  292. remplacer <quote>livredor</quote> avec le nom de votre application.
  293. Nous allons mettre nos répertoires Smarty dans
  294. <filename
  295. class="directory">/web/www.example.com/smarty/livredor/</filename>.
  296. </para>
  297. <para>
  298. Vous allez avoir besoin d'au moins un fichier à la racine de
  299. l'arborescence Web,
  300. il s'agit du script auquel l'internaute a accès. Nous allons l'appeler
  301. <emphasis>'index.php'</emphasis> et le placer dans un sous-répertoire
  302. appelé <filename class="directory">/livredor/</filename>.
  303. </para>
  304. <note>
  305. <title>Technical Note</title>
  306. <para>
  307. Il est pratique de configurer le serveur Web de
  308. sorte que <filename>index.php</filename> soit identifié comme fichier
  309. par défaut de ce répertoire. Aicnsi, si l'on tape
  310. <literal>http://www.example.com/livredor/</literal>, le script
  311. <filename>index.php</filename> soit exécuté sans que
  312. <filename>index.php</filename> ne soit spécifié dans l'URL. Avec
  313. Apache, vous pouvez régler cela en ajoutant <filename>index.php</filename>
  314. à la ligne où se trouve <literal>DirectoryIndex</literal> (séparez chaque entrée
  315. par un espace) dans le <filename>httpd.conf</filename>.
  316. <informalexample>
  317. <programlisting>
  318. <![CDATA[DirectoryIndex index.htm index.html index.cgi index.php]]>
  319. </programlisting>
  320. </informalexample>
  321. </para>
  322. </note>
  323. <para>
  324. Jetons un coup d'oeil à la structure de fichier obtenue :
  325. </para>
  326. <example>
  327. <title>Structure de fichiers</title>
  328. <screen>
  329. <![CDATA[
  330. /usr/local/lib/php/Smarty-v.e.r/libs/Smarty.class.php
  331. /usr/local/lib/php/Smarty-v.e.r/libs/Smarty_Compiler.class.php
  332. /usr/local/lib/php/Smarty-v.e.r/libs/Config_File.class.php
  333. /usr/local/lib/php/Smarty-v.e.r/libs/debug.tpl
  334. /usr/local/lib/php/Smarty-v.e.r/libs/internals/*.php
  335. /usr/local/lib/php/Smarty-v.e.r/libs/plugins/*.php
  336. /web/www.example.com/smarty/guestbook/templates/
  337. /web/www.example.com/smarty/guestbook/templates_c/
  338. /web/www.example.com/smarty/guestbook/configs/
  339. /web/www.example.com/smarty/guestbook/cache/
  340. /web/www.example.com/docs/guestbook/index.php
  341. ]]>
  342. </screen>
  343. </example>
  344. <para>
  345. Smarty a besoin d'<emphasis role="bold">accéder en écriture</emphasis>
  346. aux répertoires <link linkend="variable.compile.dir">
  347. <parameter>$compile_dir</parameter></link> et <link linkend="variable.cache.dir">
  348. <parameter>$cache_dir</parameter></link>,
  349. assurez-vous donc que le serveur Web dispose de ces droits d'accès.
  350. Il s'agit généralement de l'utilisateur "nobody" et du group
  351. "nobody". Pour les utilisateurs de OS X, l'utilisateur par défaut
  352. est "web" et le group "web". Si vous utilisez Apache, vous pouvez
  353. parcourir le fichier <filename>httpd.conf</filename> (en général dans
  354. "/usr/local/apache/conf/") pour déterminer quel est l'utilisateur
  355. et le groupe auquel il appartient.
  356. </para>
  357. <example>
  358. <title>régler les permissions d'accès</title>
  359. <programlisting role="shell">
  360. <![CDATA[
  361. chown nobody:nobody /web/www.example.com/smarty/livredor/templates_c/
  362. chmod 770 /web/www.example.com/smarty/livredor/templates_c/
  363. chown nobody:nobody /web/www.example.com/smarty/livredor/cache/
  364. chmod 770 /web/www.example.com/smarty/livredor/cache/
  365. ]]>
  366. </programlisting>
  367. </example>
  368. <note>
  369. <title>Note</title>
  370. <para>
  371. La commande chmod 770 est relativement bien sécurisée, elle donne
  372. à l'utilisateur "nobody" et au groupe "nobody" les accès en
  373. lecture/écriture aux répertoires. Si vous voulez donner le droit d'accès
  374. en lecture à tout le monde (principalement pour pouvoir accéder
  375. vous-même à ces fichiers), vous pouvez lui préférer chmod 775.
  376. </para>
  377. </note>
  378. <para>
  379. Nous devons créer le fichier <filename>index.tpl</filename> que Smarty va charger.
  380. Il va se trouver dans le dossier
  381. <link linkend="variable.template.dir"><parameter>$template_dir</parameter></link>.
  382. </para>
  383. <example>
  384. <title>Notre /web/www.example.com/smarty/templates/index.tpl</title>
  385. <screen>
  386. <![CDATA[
  387. {* Smarty *}
  388. Bonjour, {$name}, Bienvenue dans Smarty !
  389. ]]>
  390. </screen>
  391. </example>
  392. <note>
  393. <title>Note technique</title>
  394. <para>
  395. <literal>{* Smarty *}</literal> est un
  396. <link linkend="language.syntax.comments">commentaire</link>
  397. de template. Il n'est pas obligatoire mais il est bon de commencer tous vos templates
  398. avec ce commentaire. Celà rend le fichier facilement
  399. reconnaissable en plus de son extension. Les éditeurs
  400. de texte peuvent par exemple reconnaître le fichier et
  401. adapter la coloration syntaxique.
  402. </para>
  403. </note>
  404. <para>
  405. Maintenant passons à l'édition du fichier <filename>index.php</filename>. Nous allons
  406. créer une instance de Smarty,
  407. <link linkend="api.assign"><varname>assigner</varname></link>
  408. une valeur à une variable de template et
  409. <link linkend="api.display">afficher</link> le résultat avec <filename>index.tpl</filename>.
  410. </para>
  411. <example>
  412. <title>Édition de /web/www.example.com/docs/livredor/index.php</title>
  413. <programlisting role="php">
  414. <![CDATA[
  415. <?php
  416. // charge la bibliothèque Smarty
  417. require_once(SMARTY_DIR . 'Smarty.class.php');
  418. $smarty = new Smarty();
  419. $smarty->template_dir = '/web/www.example.com/smarty/livredor/templates/';
  420. $smarty->compile_dir = '/web/www.example.com/smarty/livredor/templates_c/';
  421. $smarty->config_dir = '/web/www.example.com/smarty/livredor/configs/';
  422. $smarty->cache_dir = '/web/www.example.com/smarty/livredor/cache/';
  423. $smarty->assign('name','Ned');
  424. $smarty->display('index.tpl');
  425. ?>
  426. ]]>
  427. </programlisting>
  428. </example>
  429. <note>
  430. <title>Note techique</title>
  431. <para>
  432. Dans notre exemple, nous avons configuré les chemins absolus
  433. pour chacun des répertoires Smarty. Si
  434. <filename
  435. class="directory">/web/www.example.com/smarty/livredor/</filename>
  436. est dans votre include_path PHP alors ces réglages ne sont pas nécessaires.
  437. Quoi qu'il en soit, il est plus efficace et (par expérience)
  438. moins générateur d'erreurs de les définir avec des chemins
  439. absolus. Celà nous garantit que Smarty récupèrera les bons fichiers.
  440. </para>
  441. </note>
  442. <para>
  443. Et maintenant appelez le fichier <filename>index.php</filename> avec navigateur
  444. Web. Vous devriez voir "Bonjour, Ned, Bienvenue dans Smarty !".
  445. </para>
  446. <para>
  447. Vous venez de terminer l'installation de base de Smarty !
  448. </para>
  449. </sect1>
  450. <sect1 id="installing.smarty.extended">
  451. <title>Configuration avancée</title>
  452. <para>
  453. Ceci est la suite de <link
  454. linkend="installing.smarty.basic">l'installation de base</link>, veuillez
  455. lire cette dernière avant de poursuivre.
  456. </para>
  457. <para>
  458. Une manière un peu plus commode de configurer Smarty est de faire votre
  459. propre classe fille et de l'initialiser selon votre environnement.
  460. De la sorte, nous n'aurons plus besoin de configurer à chaques fois les
  461. chemins de notre environnement. Créons un nouveau répertoire
  462. <filename>/php/includes/livredor/</filename> et un nouveau fichier
  463. appelé <filename>setup.php</filename>.
  464. Dans notre exemple d'environnement, <filename>/php/includes</filename> est notre
  465. include_path PHP. Assurez-vous de faire la même chose ou alors d'utiliser
  466. des chemins absolus.
  467. </para>
  468. <example>
  469. <title>Édition de /php/includes/livredor/setup.php</title>
  470. <programlisting role="php">
  471. <![CDATA[
  472. <?php
  473. // charge la librairie Smarty
  474. require('Smarty.class.php');
  475. // le fichier setup.php est un bon
  476. // endroit pour charger les fichiers
  477. // de librairies de l'application et vous pouvez
  478. // faire celà juste ici. Par exemple :
  479. // require('livredor/livredor.lib.php');
  480. class Smarty_livredor extends Smarty {
  481. function Smarty_livredor() {
  482. // Constructeur de la classe.
  483. // Appelé automatiquement à l'instanciation de la classe.
  484. $this->Smarty();
  485. $this->template_dir = '/web/www.example.com/smarty/livredor/templates/';
  486. $this->compile_dir = '/web/www.example.com/smarty/livredor/templates_c/';
  487. $this->config_dir = '/web/www.example.com/smarty/livredor/configs/';
  488. $this->cache_dir = '/web/www.example.com/smarty/livredor/cache/';
  489. $this->caching = true;
  490. $this->assign('app_name', 'Guest Book');
  491. }
  492. }
  493. ?>
  494. ]]>
  495. </programlisting>
  496. </example>
  497. <para>
  498. Modifions maintenant le fichier <filename>index.php</filename> pour qu'il utilise
  499. <filename>setup.php</filename>
  500. </para>
  501. <example>
  502. <title>Édition de /web/www.example.com/docs/livredor/index.php</title>
  503. <programlisting role="php">
  504. <![CDATA[
  505. <?php
  506. require('livredor/setup.php');
  507. $smarty = new Smarty_livredor();
  508. $smarty->assign('name','Ned');
  509. $smarty->display('index.tpl');
  510. ?>
  511. ]]>
  512. </programlisting>
  513. </example>
  514. <para>
  515. Vous savez maintenant qu'il est facile de créer une instance de Smarty,
  516. correctement configurée, en utilisant <literal>Smarty_livredor()</literal>
  517. qui initialise automatiquement tout ce qu'il faut pour votre application.
  518. </para>
  519. </sect1>
  520. </chapter>
  521. </part>
  522. <!-- Keep this comment at the end of the file
  523. Local variables:
  524. mode: sgml
  525. sgml-omittag:t
  526. sgml-shorttag:t
  527. sgml-minimize-attributes:nil
  528. sgml-always-quote-attributes:t
  529. sgml-indent-step:1
  530. sgml-indent-data:t
  531. indent-tabs-mode:nil
  532. sgml-parent-document:nil
  533. sgml-default-dtd-file:"../../../../manual.ced"
  534. sgml-exposed-tags:nil
  535. sgml-local-catalogs:nil
  536. sgml-local-ecat-files:nil
  537. End:
  538. vim600: syn=xml fen fdm=syntax fdl=2 si
  539. vim: et tw=78 syn=sgml
  540. vi: ts=1 sw=1
  541. -->