2
0

Zend_Layout-QuickStart.xml 11 KB

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