Zend_Layout-QuickStart.xml 11 KB

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