Zend_Layout-QuickStart.xml 9.2 KB

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