Zend_Layout-QuickStart.xml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15617 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.layout.quickstart">
  5. <title>Zend_Layout Schnellstart</title>
  6. <para>
  7. Es gibt zwei primäre Verwendungen für <classname>Zend_Layout</classname>: Mit dem Zend
  8. Framework MVC, und ohne.
  9. </para>
  10. <sect2 id="zend.layout.quickstart.layouts">
  11. <title>Layout Skripte</title>
  12. <para>
  13. In beiden Fällen, müssen trotzdem Layout Skripte erstellt werden. Layout Sktipte
  14. verwenden einfach Zend_View (oder welche View Implementation auch immer verwendet wird).
  15. Layout Variablen werden mit einem <classname>Zend_Layout</classname>
  16. <link linkend="zend.view.helpers.initial.placeholder">Platzhalter</link> registriert,
  17. und es kann auf Sie über den Platzhalter Helfer zugegriffen werden oder dadurch das Sie
  18. als Objekt Eigenschaften vom Layout Objekt über den Layout Helfer geholt werden.
  19. </para>
  20. <para>
  21. Als Beispiel:
  22. </para>
  23. <programlisting language="php"><![CDATA[
  24. <!DOCTYPE html
  25. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  26. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  27. <html>
  28. <head>
  29. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  30. <title>Meine Seite</title>
  31. </head>
  32. <body>
  33. <?php
  34. // Holt den 'content' Schlüssel durch Verwendung des Layout Helfers:
  35. echo $this->layout()->content;
  36. // Holt den 'foo' Schlüssel durch Verwendung des Platzhalter Helfers:
  37. echo $this->placeholder('Zend_Layout')->foo;
  38. // Holt das Layout Objekt und empfängt verschiedene Schlüssel von Ihm:
  39. $layout = $this->layout();
  40. echo $layout->bar;
  41. echo $layout->baz;
  42. ?>
  43. </body>
  44. </html>
  45. ]]></programlisting>
  46. <para>
  47. Weil <classname>Zend_Layout</classname> <classname>Zend_View</classname> für die
  48. Darstellung verwendet, kann auch jeder registrierte View Helfer verwendet werden, und
  49. auch auf jede zuvor zugeordnete View Variable kann zugegriffen werden. Sehr hilfreich
  50. sind die verschiedenen <link linkend="zend.view.helpers.initial.placeholder">Platzhalter
  51. Helfer</link>, da diese das Empfangen von Inhalt für einen Bereich wie die
  52. &lt;head&gt; Sektion, Navigation usw. erlauben:
  53. </para>
  54. <programlisting language="php"><![CDATA[
  55. <!DOCTYPE html
  56. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  57. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  58. <html>
  59. <head>
  60. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  61. <?php echo $this->headTitle() ?>
  62. <?php echo $this->headScript() ?>
  63. <?php echo $this->headStyle() ?>
  64. </head>
  65. <body>
  66. <?php echo $this->render('header.phtml') ?>
  67. <div id="nav"><?php echo $this->placeholder('nav') ?></div>
  68. <div id="content"><?php echo $this->layout()->content ?></div>
  69. <?php echo $this->render('footer.phtml') ?>
  70. </body>
  71. </html>
  72. ]]></programlisting>
  73. </sect2>
  74. <sect2 id="zend.layout.quickstart.mvc">
  75. <title>Zend_Layout mit dem Zend Framework MVC verwenden</title>
  76. <para>
  77. <classname>Zend_Controller</classname> bietet ein reiches Set von Funktionalitäten für
  78. Erweiterung mit seinen <link linkend="zend.controller.plugins">Front Kontroller
  79. Plugins</link> und <link linkend="zend.controller.actionhelpers">Action Kontroller
  80. Helfern</link>. <classname>Zend_View</classname> hat auch <link
  81. linkend="zend.view.helpers">Helfer</link>. <classname>Zend_Layout</classname> nimmt
  82. Vorteile wahr von diesen verschiedenen Erweiterungspunkten wenn es mit den MVC
  83. Komponenten verwendet wird.
  84. </para>
  85. <para>
  86. <classname>Zend_Layout::startMvc()</classname> erstellt eine Instanz von
  87. <classname>Zend_Layout</classname> mit jeder optionalen Konfiguration die angegeben
  88. wird. Anschließend wird ein Front Kontroller Plugin registriert das das Layout mit jedem
  89. Anwendungsinhalt darstellt sobald die Dispatch Schleife fertiggestellt ist, und
  90. registriert einen Action Helfer der den Zugriff auf das Layout Objekt vom Action
  91. Kontroller aus gestattet. Zusätzlich kann jederzeit die Layout Instanz vom View Skript
  92. geholt werden indem der <code>layout</code> View Helfer verwendet wird.
  93. </para>
  94. <para>
  95. Zuerst sehen wir uns an wie Zend_Layout initialisiert wird um es mit dem MVC zu
  96. verwenden:
  97. </para>
  98. <programlisting language="php"><![CDATA[
  99. // In der Bootstrap Datei:
  100. Zend_Layout::startMvc();
  101. ]]></programlisting>
  102. <para>
  103. <code>startMvc()</code> kann ein optionales Array von Optionen oder ein
  104. <classname>Zend_Config</classname> Objekt entgegennehmen um die Instanz anzupassen;
  105. diese Optionen werden detailiert in <xref linkend="zend.layout.options" /> beschrieben.
  106. </para>
  107. <para>
  108. In einem Action Controller, kann anschließend auf die Layout Instanz als Action Helfer
  109. zugegriffen werden:
  110. </para>
  111. <programlisting language="php"><![CDATA[
  112. class FooController extends Zend_Controller_Action
  113. {
  114. public function barAction()
  115. {
  116. // Layouts in dieser Aktion deaktivieren:
  117. $this->_helper->layout->disableLayout();
  118. }
  119. public function bazAction()
  120. {
  121. // Ein anderes Layout Skript in dieser Action verwenden:
  122. $this->_helper->layout->setLayout('foobaz');
  123. };
  124. }
  125. ]]></programlisting>
  126. <para>
  127. Im View Skript kann dann auf das Layout Objekt über den <code>layout</code> View Helfer
  128. zugegriffen werden. Dieser View Helfer ist etwas anders als andere da er keine Argumente
  129. entgegennimmt und ein Objekt statt einem Stringwert zurückgibt. Das erlaubt sofortige
  130. Methodenaufrufe auf dem Layout Objekt:
  131. </para>
  132. <programlisting language="php"><![CDATA[
  133. $this->layout()->setLayout('foo'); // alternatives Layout setzen
  134. ]]></programlisting>
  135. <para>
  136. Die im MVC registrierte <classname>Zend_Layout</classname> Instanz kann jederzeit über
  137. die statische <code>getMvcInstance()</code> Methode geholt werden:
  138. </para>
  139. <programlisting language="php"><![CDATA[
  140. // Gibt null zurück wenn startMvc() nicht zuerst aufgerufen wurde
  141. $layout = Zend_Layout::getMvcInstance();
  142. ]]></programlisting>
  143. <para>
  144. Letztendlich hat das Front Controller Plugin von <classname>Zend_Layout</classname> ein
  145. wichtiges Feature zusätzlich zur Darstellung des Layouts: Es empfängt alle benannte
  146. Segmente vom Antwortobjekt und ordnet diese als Layout Variablen zu, wobei das 'default'
  147. Segment der 'content' Variable zugeordnet wird. Das erlaubt es auf den Anwendungsinhalt
  148. zugreifen zu können und es in View Skripten darzustellen.
  149. </para>
  150. <para>
  151. Als Beispiel, nehmen wir an das der Code zuerst
  152. <code>FooController::indexAction()</code> auslöst, welches einige Inhalte im
  153. standardmäßigen Antwortobjekt darstellt, und dann zu
  154. <code>NavController::menuAction()</code> weiterleitet, welches Inhalt im 'nav'
  155. Antwortobjekt darstellt. Letztendlich wird auf
  156. <code>CommentController::fetchAction()</code> weitergeleitet und einige Kommentare
  157. geholt, aber diese werden auch im standard Antwortobjekt dargestellt. (was Inhalt zu
  158. diesem Segment anfügt). Das View Skript kann dann jedes separat darstellen:
  159. </para>
  160. <programlisting language="php"><![CDATA[
  161. <body>
  162. <!-- Darstellung von /nav/menu -->
  163. <div id="nav"><?php echo $this->layout()->nav ?></div>
  164. <!-- Darstellung von /foo/index + /comment/fetch -->
  165. <div id="content"><?php echo $this->layout()->content ?></div>
  166. </body>
  167. ]]></programlisting>
  168. <para>
  169. Dieses Feature ist teilweise nützlich wenn es in Verbindung mit dem ActionStack
  170. <link linkend="zend.controller.actionhelpers.actionstack">Action Helfer</link> und
  171. <link linkend="zend.controller.plugins.standard.actionstack">Plugin</link> verwendet
  172. wird, welche verwendet werden können um einen Stack von Aktionen zu definieren der
  173. durchgelaufen wird, und welcher angepasste Seiten erstellt.
  174. </para>
  175. </sect2>
  176. <sect2 id="zend.layout.quickstart.standalone">
  177. <title>Zend_Layout als eienständige Komponente verwenden</title>
  178. <para>
  179. Als eigenständige Komponente bietet Zend_Layout nicht annähernd so viele Features oder
  180. so viel Bequemlichkeit wie wenn es mit MVC verwendet wird. Trotzdem hat es zwei
  181. grundsätzliche Vorteile:
  182. </para>
  183. <itemizedlist>
  184. <listitem>
  185. <para>
  186. Abgrenzung von Layout Variablen.
  187. </para>
  188. </listitem>
  189. <listitem>
  190. <para>
  191. Isolation vom Layout View Skript von anderen View Skripten.
  192. </para>
  193. </listitem>
  194. </itemizedlist>
  195. <para>
  196. Wenn es als eigenständige Komponente verwendet wird, muß einfach das Layout Objekt
  197. instanziiert werden, die unterschiedlichen Zugriffsmethoden verwendet werden um Stati zu
  198. setzen, Variablen als Objekt Eigenschaften gesetzt, und das Layout dargestellt werden:
  199. </para>
  200. <programlisting language="php"><![CDATA[
  201. $layout = new Zend_Layout();
  202. // Einen Layout Skript Pfad setzen:
  203. $layout->setLayoutPath('/path/to/layouts');
  204. // Einige Variablen setzen:
  205. $layout->content = $content;
  206. $layout->nav = $nav;
  207. // Ein unterschiedliches Layout Skript auswählen:
  208. $layout->setLayout('foo');
  209. // Letztendlich das Layout darstellen
  210. echo $layout->render();
  211. ]]></programlisting>
  212. </sect2>
  213. <sect2 id="zend.layout.quickstart.example">
  214. <title>Beispiel Layout</title>
  215. <para>
  216. Machmal ist ein Bild mehr Wert als tausend Wörter. Das folgende ist ein Beispiel Layout
  217. Skript das zeigt wie alles zusammenkommen könnte.
  218. </para>
  219. <para>
  220. <inlinegraphic align="center" valign="middle"
  221. fileref="figures/zend.layout.quickstart.example.png" format="PNG" />
  222. </para>
  223. <para>
  224. Die aktuelle Reihenfolge der Elemente kann variieren, abhängig vom CSS das eingestellt
  225. wurde; zum Beispiel, wenn absolute Positionen verwendet werden, kann es möglich sein das
  226. die Navigation später im Dokument angezeigt wird, aber immer noch ganz oben gezeigt
  227. wird; das selbe könnte für die Sidebar oder den Header gelten. Der aktuelle Mechanismum
  228. des Holens von Inhalt bleibt trotzdem der selbe.
  229. </para>
  230. </sect2>
  231. </sect1>
  232. <!--
  233. vim:se ts=4 sw=4 et:
  234. -->