Zend_Layout-QuickStart.xml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  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 <acronym>MVC</acronym>, 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
  84. <acronym>MVC</acronym> 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 welches das Layout mit
  90. jedem 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 <classname>Layout</classname> 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 <acronym>MVC</acronym> 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 <link linkend="zend.layout.options">diesem
  107. Abschnitt</link> beschrieben.
  108. </para>
  109. <para>
  110. In einem Action Controller, kann anschließend auf die Layout Instanz als Action Helfer
  111. zugegriffen werden:
  112. </para>
  113. <programlisting language="php"><![CDATA[
  114. class FooController extends Zend_Controller_Action
  115. {
  116. public function barAction()
  117. {
  118. // Layouts in dieser Aktion deaktivieren:
  119. $this->_helper->layout->disableLayout();
  120. }
  121. public function bazAction()
  122. {
  123. // Ein anderes Layout Skript in dieser Action verwenden:
  124. $this->_helper->layout->setLayout('foobaz');
  125. };
  126. }
  127. ]]></programlisting>
  128. <para>
  129. Im View Skript kann dann auf das Layout Objekt über den <classname>Layout</classname>
  130. View Helfer zugegriffen werden. Dieser View Helfer ist etwas anders als andere da er
  131. keine Argumente entgegennimmt und ein Objekt statt einem Stringwert zurückgibt. Das
  132. erlaubt sofortige Methodenaufrufe auf dem Layout Objekt:
  133. </para>
  134. <programlisting language="php"><![CDATA[
  135. $this->layout()->setLayout('foo'); // alternatives Layout setzen
  136. ]]></programlisting>
  137. <para>
  138. Die im <acronym>MVC</acronym> registrierte <classname>Zend_Layout</classname> Instanz
  139. kann jederzeit über die statische <methodname>getMvcInstance()</methodname> Methode
  140. geholt werden:
  141. </para>
  142. <programlisting language="php"><![CDATA[
  143. // Gibt null zurück wenn startMvc() nicht zuerst aufgerufen wurde
  144. $layout = Zend_Layout::getMvcInstance();
  145. ]]></programlisting>
  146. <para>
  147. Letztendlich hat das Front Controller Plugin von <classname>Zend_Layout</classname> ein
  148. wichtiges Feature zusätzlich zur Darstellung des Layouts: Es empfängt alle benannte
  149. Segmente vom Antwortobjekt und ordnet diese als Layout Variablen zu, wobei das 'default'
  150. Segment der 'content' Variable zugeordnet wird. Das erlaubt es auf den Anwendungsinhalt
  151. zugreifen zu können und es in View Skripten darzustellen.
  152. </para>
  153. <para>
  154. Als Beispiel, nehmen wir an das der Code zuerst
  155. <methodname>FooController::indexAction()</methodname> auslöst, welches einige Inhalte im
  156. standardmäßigen Antwortobjekt darstellt, und dann zu
  157. <methodname>NavController::menuAction()</methodname> weiterleitet, welches Inhalt im
  158. 'nav' Antwortobjekt darstellt. Letztendlich wird auf
  159. <methodname>CommentController::fetchAction()</methodname> weitergeleitet und einige
  160. Kommentare geholt, aber diese werden auch im standard Antwortobjekt dargestellt. (was
  161. Inhalt zu diesem Segment anfügt). Das View Skript kann dann jedes separat darstellen:
  162. </para>
  163. <programlisting language="php"><![CDATA[
  164. <body>
  165. <!-- Darstellung von /nav/menu -->
  166. <div id="nav"><?php echo $this->layout()->nav ?></div>
  167. <!-- Darstellung von /foo/index + /comment/fetch -->
  168. <div id="content"><?php echo $this->layout()->content ?></div>
  169. </body>
  170. ]]></programlisting>
  171. <para>
  172. Dieses Feature ist teilweise nützlich wenn es in Verbindung mit dem ActionStack
  173. <link linkend="zend.controller.actionhelpers.actionstack">Action Helfer</link> und
  174. <link linkend="zend.controller.plugins.standard.actionstack">Plugin</link> verwendet
  175. wird, welche verwendet werden können um einen Stack von Aktionen zu definieren der
  176. durchgelaufen wird, und welcher angepasste Seiten erstellt.
  177. </para>
  178. </sect2>
  179. <sect2 id="zend.layout.quickstart.standalone">
  180. <title>Zend_Layout als eienständige Komponente verwenden</title>
  181. <para>
  182. Als eigenständige Komponente bietet <classname>Zend_Layout</classname> nicht annähernd
  183. so viele Features oder so viel Bequemlichkeit wie wenn es mit <acronym>MVC</acronym>
  184. verwendet wird. Trotzdem hat es zwei grundsätzliche Vorteile:
  185. </para>
  186. <itemizedlist>
  187. <listitem><para>Abgrenzung von Layout Variablen.</para></listitem>
  188. <listitem>
  189. <para>Isolation vom Layout View Skript von anderen View Skripten.</para>
  190. </listitem>
  191. </itemizedlist>
  192. <para>
  193. Wenn es als eigenständige Komponente verwendet wird, muß einfach das Layout Objekt
  194. instanziiert werden, die unterschiedlichen Zugriffsmethoden verwendet werden um Stati zu
  195. setzen, Variablen als Objekt Eigenschaften gesetzt, und das Layout dargestellt werden:
  196. </para>
  197. <programlisting language="php"><![CDATA[
  198. $layout = new Zend_Layout();
  199. // Einen Layout Skript Pfad setzen:
  200. $layout->setLayoutPath('/path/to/layouts');
  201. // Einige Variablen setzen:
  202. $layout->content = $content;
  203. $layout->nav = $nav;
  204. // Ein unterschiedliches Layout Skript auswählen:
  205. $layout->setLayout('foo');
  206. // Letztendlich das Layout darstellen
  207. echo $layout->render();
  208. ]]></programlisting>
  209. </sect2>
  210. <sect2 id="zend.layout.quickstart.example">
  211. <title>Beispiel Layout</title>
  212. <para>
  213. Machmal ist ein Bild mehr Wert als tausend Wörter. Das folgende ist ein Beispiel Layout
  214. Skript das zeigt wie alles zusammenkommen könnte.
  215. </para>
  216. <para>
  217. <inlinegraphic align="center" valign="middle"
  218. fileref="figures/zend.layout.quickstart.example.png" format="PNG" />
  219. </para>
  220. <para>
  221. Die aktuelle Reihenfolge der Elemente kann variieren, abhängig vom
  222. <acronym>CSS</acronym> das eingestellt wurde; zum Beispiel, wenn absolute Positionen
  223. verwendet werden, kann es möglich sein das die Navigation später im Dokument angezeigt
  224. wird, aber immer noch ganz oben gezeigt wird; das selbe könnte für die Sidebar oder den
  225. Header gelten. Der aktuelle Mechanismum des Holens von Inhalt bleibt trotzdem der selbe.
  226. </para>
  227. </sect2>
  228. </sect1>