Zend_Layout-QuickStart.xml 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 12116 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.layout.quickstart">
  5. <title>Zend_Layout - Démarrage rapide</title>
  6. <para>Il y a deux modes d'utilisation de <classname>Zend_Layout</classname> : avec Zend Framework MVC, et sans.</para>
  7. <sect2 id="zend.layout.quickstart.layouts">
  8. <title>Scripts de layout</title>
  9. <para>Dans tous les cas, un script de layout est nécessaire. Les scripts de layout utilisent simplement
  10. Zend_View (ou une implémentation particulière personnalisée). Les variables de layout sont enregistrées dans le
  11. <link linkend="zend.view.helpers.initial.placeholder">placeholder</link> <code>Layout</code>, et peuvent être
  12. accédées via l'aide de vue placeholder ou directement en tant que propriétés de l'objet layout.</para>
  13. <para>Par exemple :</para>
  14. <programlisting role="php"><![CDATA[
  15. <!DOCTYPE html
  16. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  17. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  18. <html>
  19. <head>
  20. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  21. <title>Mon Site</title>
  22. </head>
  23. <body>
  24. <?php
  25. // récupère la clé "content" via l'aide de vue layout :
  26. echo $this->layout()->content;
  27. // récupère la clé "foo" via l'aide de vue placeholder :
  28. echo $this->placeholder('Zend_Layout')->foo;
  29. // récupère l'objet layout, et accède à diverses clés :
  30. $layout = $this->layout();
  31. echo $layout->bar;
  32. echo $layout->baz;
  33. ?>
  34. </body>
  35. </html>
  36. ]]></programlisting>
  37. <para>Toutes les aides de vue enregistrées sont accessibles dans <classname>Zend_Layout</classname> car il utilise
  38. <classname>Zend_View</classname> pour son propre rendu. Vous pouvez aussi accéder aux variables de la vue. Les aides <link
  39. linkend="zend.view.helpers.initial.placeholder">placeholder </link> sont très pratiques pour l'accès aux
  40. éléments tels que &lt;head&gt;, les scripts, les méta, etc. :</para>
  41. <programlisting role="php"><![CDATA[
  42. <!DOCTYPE html
  43. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  44. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  45. <html>
  46. <head>
  47. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  48. <?= $this->headTitle() ?>
  49. <?= $this->headScript() ?>
  50. <?= $this->headStyle() ?>
  51. </head>
  52. <body>
  53. <?= $this->render('header.phtml') ?>
  54. <div id="nav"><?= $this->placeholder('nav') ?></div>
  55. <div id="content"><= $this->layout()->content ?></div>
  56. <?= $this->render('footer.phtml') ?>
  57. </body>
  58. </html>
  59. ]]></programlisting>
  60. </sect2>
  61. <sect2 id="zend.layout.quickstart.mvc">
  62. <title>Utilisation de Zend_Layout avec le système MVC de Zend Framework</title>
  63. <para><classname>Zend_Controller</classname> propose une manière d'étendre ses fonctionnalités au travers de <link
  64. linkend="zend.controller.plugins">plugins de contrôleur frontal</link> et <link
  65. linkend="zend.controller.actionhelpers">d'aides d'action</link>. <classname>Zend_View</classname> propose aussi des <link
  66. linkend="zend.view.helpers">aides</link>. <classname>Zend_Layout</classname> utilise toutes ces possibilités
  67. lorsqu'employé avec les composants MVC.</para>
  68. <para><classname>Zend_Layout::startMvc()</classname> crée une instance de <classname>Zend_Layout</classname> avec des paramètres de
  69. configuration optionnels. Cette méthode enregistre aussi un plugin de contrôleur frontal qui s'occupe du rendu
  70. du layout rempli, lorsque la boucle de distribution est terminée. Elle enregistre également une aide d'action qui
  71. permet aux actions d'accéder à l'objet <code>layout</code>. Enfin, l'aide de vue layout, elle, donne accès à
  72. l'objet layout depuis la vue.</para>
  73. <para>Regardons d'abord comment initialiser Zend_Layout afin de l'utiliser dans un contexte MVC </para>
  74. <programlisting role="php"><![CDATA[
  75. // Dans le fichier de démarrage (bootstrap)
  76. Zend_Layout::startMvc();
  77. ]]></programlisting>
  78. <para><code>startMvc()</code> peut prendre en paramètre un tableau d'options ou un objet
  79. <classname>Zend_Config</classname> pour personnaliser l'instance. Ces options sont détaillées dans <xref
  80. linkend="zend.layout.options" />.</para>
  81. <para>Dans le contrôleur d'action, vous pouvez donc accéder à l'instance de layout via l'aide d'action :</para>
  82. <programlisting role="php"><![CDATA[
  83. class FooController extends Zend_Controller_Action
  84. {
  85. public function barAction()
  86. {
  87. // désactive les layouts pour cette action
  88. $this->_helper->layout->disableLayout();
  89. }
  90. public function bazAction()
  91. {
  92. // utilise un script de layout différent pour
  93. // cette action
  94. $this->_helper->layout->setLayout('foobaz');
  95. };
  96. }
  97. ]]></programlisting>
  98. <para>Dans vos scripts de vue, utiliser l'aide <code>layout</code> pour accéder à l'instance de
  99. <classname>Zend_Layout</classname>. Notez que cette aide est différente des autres car elle ne retourne pas une chaîne,
  100. mais bien un objet. Vous pouvez donc enchaîner une méthode immédiatement :</para>
  101. <programlisting role="php"><![CDATA[
  102. <?php $this->layout()->setLayout('foo'); // utilise un script de layout spécifique
  103. ]]></programlisting>
  104. <para>Autrement, vous pouvez n'importe où accéder à votre instance de <classname>Zend_Layout</classname> via la méthode
  105. statique <code>getMvcInstance()</code> :</para>
  106. <programlisting role="php"><![CDATA[
  107. // Retourne null si startMvc() n'a pas été appelée auparavant
  108. $layout = Zend_Layout::getMvcInstance();
  109. ]]></programlisting>
  110. <para>Enfin, le plugin de contrôleur frontal <classname>Zend_Layout</classname> dispose d'une caractéristique annexe au
  111. rendu automatique du layout : il analyse les segments de l'objet de réponse et les assigne en tant que variables
  112. de layout dans vos scripts de layout. Le segment "default" est assigné à la variable "content". Ceci permet de
  113. mettre la main sur le contenu rendu dans l'action principale.</para>
  114. <para>Par exemple, supposons que votre code rencontre d'abord <code>FooController::indexAction()</code>, qui va
  115. rendre du contenu dans le segment par défaut de la réponse. Ensuite il forward vers
  116. <code>NavController::menuAction()</code>, qui rend son contenu dans un segment nommé 'nav'. Enfin, vous
  117. forwardez vers <code>CommentController::fetchAction()</code> pour récupérer des commentaires, mais vous les
  118. rendez aussi dans le segment par défaut de la réponse (ce qui va rajouter du contenu). Votre script de layout
  119. peut alors rendre chaque segment de manière séparée :</para>
  120. <programlisting role="php"><![CDATA[
  121. <body>
  122. <!-- rend /nav/menu -->
  123. <div id="nav"><?= $this->layout()->nav ?></div>
  124. <!-- rend /foo/index + /comment/fetch -->
  125. <div id="content"><?= $this->layout()->content ?></div>
  126. </body>
  127. ]]></programlisting>
  128. <para>Cette approche est particulièrement utile avec <link
  129. linkend="zend.controller.actionhelpers.actionstack">l'aide d'action</link> ActionStack et son <link
  130. linkend="zend.controller.plugins.standard.actionstack"> plugin</link> du même nom. Vous pouvez les utiliser pour
  131. gérer une pile d'actions et ainsi décomposer vos processus.</para>
  132. </sect2>
  133. <sect2 id="zend.layout.quickstart.standalone">
  134. <title>Utilisation de Zend_Layout en composant indépendant</title>
  135. <para>Pris indépendamment des composants MVC, Zend_Layout n'offre pas tout à fait les mêmes possibilités et la
  136. même flexibilité. Cependant, vous bénéficiez de deux avantages :</para>
  137. <itemizedlist>
  138. <listitem>
  139. <para>Des variables propres aux layouts.</para>
  140. </listitem>
  141. <listitem>
  142. <para>Isolation du script de layout, de son contenu issu des scripts de vue.</para>
  143. </listitem>
  144. </itemizedlist>
  145. <para>En tant que composant indépendant, instanciez un objet <classname>Zend_Layout</classname>, configurez le au moyen
  146. d'accesseurs, passez vos variables comme des propriétés de l'objet, et rendez le layout :</para>
  147. <programlisting role="php"><![CDATA[
  148. $layout = new Zend_Layout();
  149. // Spécification du chemin des scripts layout:
  150. $layout->setLayoutPath('/chemin/vers/layouts');
  151. // passage de quelques variables :
  152. $layout->content = $content;
  153. $layout->nav = $nav;
  154. // Utilisation d'un script de layout "foo" :
  155. $layout->setLayout('foo');
  156. // rendu du layout :
  157. echo $layout->render();
  158. ]]></programlisting>
  159. </sect2>
  160. <sect2 id="zend.layout.quickstart.example">
  161. <title>Layout d'exemple</title>
  162. <para>Une image valant mieux qu'un paragraphe, voyez donc celle-ci qui décrit l'utilisation :</para>
  163. <para><inlinegraphic align="center" fileref="figures/zend.layout.quickstart.example.png" format="PNG"
  164. valign="middle" /></para>
  165. <para>Avec cette approche, vous pouvez régler vos mises en forme CSS. En positionnement absolu, par exemple,
  166. vous pourriez rendre la barre de navigation plus tard, en fin. Le mécanisme d'obtention du contenu reste le même
  167. cependant.</para>
  168. </sect2>
  169. </sect1>