layout-usage.xml 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.layout.usage">
  5. <title>Zend_Layout verwenden</title>
  6. <para>
  7. Die grundsätzliche Verwendung von <classname>Zend_Layout</classname> ist recht trivial.
  8. Angenommen man verwendet bereits <classname>Zend_Application</classname>, dann kann man
  9. einfach ein paar Konfigurations Optionen übergeben und ein Layout View Skript erstellen.
  10. </para>
  11. <sect2 id="learning.layout.usage.configuration">
  12. <title>Layout Konfiguration</title>
  13. <para>
  14. Der empfohlene Ort für Layouts ist im Unterverzeichnis
  15. "<filename>layouts/scripts/</filename>" in der eigenen Anwendung:
  16. </para>
  17. <programlisting language="text"><![CDATA[
  18. application
  19. |-- Bootstrap.php
  20. |-- configs
  21. | `-- application.ini
  22. |-- controllers
  23. |-- layouts
  24. | `-- scripts
  25. | |-- layout.phtml
  26. ]]></programlisting>
  27. <para>
  28. Um <classname>Zend_Layout</classname> zu initialisieren muss das folgende in die eigene
  29. Konfigurationsdatei eingefügt werden
  30. ("<filename>application/configs/application.ini</filename>"):
  31. </para>
  32. <programlisting language="dosini"><![CDATA[
  33. resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
  34. resources.layout.layout = "layout"
  35. ]]></programlisting>
  36. <para>
  37. Die erste Zeile zeigt wo nach Layout Skripten nachgesehen werden soll; die zweite Zeile
  38. gibt den Namen des Layouts an, welches verwendet werden soll, abzüglich der
  39. Erweiterung für View Skripts (welche standardmäßig mit "<filename>.phtml</filename>"
  40. angenommen wird).
  41. </para>
  42. </sect2>
  43. <sect2 id="learning.layout.usage.layout-script">
  44. <title>Ein Layout Skript erstellen</title>
  45. <para>
  46. Jetzt da man die Konfiguration gesetzt hat, muss man sein Layout Skript erstellen.
  47. Zuerst muss man sicherstellen dass das Verzeichnis
  48. "<filename>application/layouts/scripts</filename>" erstelt wurde; dann ist ein Editor
  49. zu öffnen und das Markup für das eigene Layout zu erstellen. Layout Skripte sind einfach
  50. View Skripte, mit einigen kleinen Unterschieden.
  51. </para>
  52. <programlisting language="php"><![CDATA[
  53. <html>
  54. <head>
  55. <title>Meine Site</title>
  56. </head>
  57. <body>
  58. <?php echo $this->layout()->content ?>
  59. </body>
  60. </html>
  61. ]]></programlisting>
  62. <para>
  63. Im obigen Beispiel ist der Aufruf zum <methodname>layout()</methodname> View Helper zu
  64. sehen. Wenn man die <classname>Zend_Layout</classname> Ressource registriert, erhält man
  65. auch Zugriff zum Action und zum View Helper welche es erlauben die
  66. <classname>Zend_Layout</classname> Instanz anzusprechen; man kann anschließend
  67. Befehle auf dem Layout Objekt aufrufen. In diesem Fall wird eine benannte Variable,
  68. <varname>$content</varname>, empfangen und ausgegeben. Standardmäßig wird die Variable
  69. <varname>$content</varname> vom Anwendungs-View Skript dargestellt. Andererseits ist
  70. alles was man normalerweise in einem View Skript macht perfekt gültig -- aufrufen von
  71. Helfern oder View Methoden wie man es will.
  72. </para>
  73. <para>
  74. An diesem Punkt hat man ein funktionierendes Layout Skript, und die eigene Anwendung ist
  75. über seinen Ort informiert und weis wie es darzustellen ist.
  76. </para>
  77. </sect2>
  78. <sect2 id="learning.layout.usage.access">
  79. <title>Auf das Layout Objekt zugreifen</title>
  80. <para>
  81. Manchmal ist ein Direktzugriff auf das Layout Objekt notwendig. Es gibt drei Wege wie
  82. man das tun kann:
  83. </para>
  84. <itemizedlist>
  85. <listitem>
  86. <para>
  87. <emphasis>In den View Skripten:</emphasis> der <methodname>layout()</methodname>
  88. View Helfer ist zu verwenden, der die Instanz von
  89. <classname>Zend_Layout</classname> zurückgibt welche im Front Controller Plugin
  90. registriert ist.
  91. </para>
  92. <programlisting language="php"><![CDATA[
  93. <?php $layout = $this->layout(); ?>
  94. ]]></programlisting>
  95. <para>
  96. Da er die Layout Instanz zurückgibt, kann man also einfach Methoden auf Ihm
  97. aufrufen statt Ihn einer Variablen zuordnen zu müssen.
  98. </para>
  99. </listitem>
  100. <listitem>
  101. <para>
  102. <emphasis>In Action Controllern</emphasis>: der
  103. <methodname>layout()</methodname> Action Helfer ist zu verwenden, welcher wie
  104. der View Helfer arbeitet.
  105. </para>
  106. <programlisting language="php"><![CDATA[
  107. // Aufruf des Helfers als eine Methode auf dem Helfer Broker:
  108. $layout = $this->_helper->layout();
  109. // Oder etwas komplizierter:
  110. $helper = $this->_helper->getHelper('Layout');
  111. $layout = $helper->getLayoutInstance();
  112. ]]></programlisting>
  113. <para>
  114. Wie mit dem View Helfer gibt der Action Helfer die Instanz des Layouts zurück,
  115. man kann also einfach Methoden auf Ihm aufrufen, statt diese einer Variable
  116. zuordnen zu müssen.
  117. </para>
  118. </listitem>
  119. <listitem>
  120. <para>
  121. <emphasis>Andernorts</emphasis>: verwenden der statischen Methode
  122. <methodname>getMvcInstance()</methodname>. Das gibt die Layout Instanz zurück,
  123. welche durch die Bootstrap Ressource registriert wurde.
  124. </para>
  125. <programlisting language="php"><![CDATA[
  126. $layout = Zend_Layout::getMvcInstance();
  127. ]]></programlisting>
  128. </listitem>
  129. <listitem>
  130. <para>
  131. <emphasis>Über die Bootstrap</emphasis>: empfangen der Layout Ressource, welche
  132. die <classname>Zend_Layout</classname> Instanz ist.
  133. </para>
  134. <programlisting language="php"><![CDATA[
  135. $layout = $bootstrap->getResource('Layout');
  136. ]]></programlisting>
  137. <para>
  138. Überall wo man auf das Bootstrap Objekt Zugriff hat, wird diese Methode
  139. empfohlen und nicht die statische <methodname>getMvcInstance()</methodname>
  140. Methode.
  141. </para>
  142. </listitem>
  143. </itemizedlist>
  144. </sect2>
  145. <sect2 id="learning.layout.usage.other-operations">
  146. <title>Andere Operationen</title>
  147. <para>
  148. In den meisten Fällen empfängt die obige Konfiguration und das Layout Skript (mit
  149. Änderungen) das, was benötigt wird. Trotzdem existieren einigen andere Funktionalitäten
  150. die man früher oder später verwenden wird. In allen der folgenden Beispiele kann man
  151. eine der <link
  152. linkend="learning.layout.usage.access">oben aufgeführten Methoden</link> verwenden
  153. um das Layout Objekt zu erhalten.
  154. </para>
  155. <itemizedlist>
  156. <listitem>
  157. <para>
  158. <emphasis>Setzen von Layout Variablen</emphasis>:
  159. <classname>Zend_Layout</classname> hat seine eigene Registry von
  160. Layout-spezifischen View Variablen auf die man zugreifen kann; der
  161. <varname>$content</varname> Schlüssel welche im ursprünglichen Layout Skript
  162. gezeigt wird, ist so ein Beispiel. Man kann diese zuweisen und empfangen indem
  163. ein normaler Zugriff auf Eigenschaften verwendet wird, oder über die
  164. <methodname>assign()</methodname> Methode.
  165. </para>
  166. <programlisting language="php"><![CDATA[
  167. // Inhalt setzen:
  168. $layout->somekey = "foo"
  169. // Den selben Inhalt ausgeben:
  170. echo $layout->somekey; // 'foo'
  171. // Verwenden der assign() Methode:
  172. $layout->assign('someotherkey', 'bar');
  173. // Der Zugriff auf assign()'ed Variablen bleibt der gleiche:
  174. echo $layout->someotherkey; // 'bar'
  175. ]]></programlisting>
  176. </listitem>
  177. <listitem>
  178. <para>
  179. <methodname>disableLayout()</methodname>: Üblicherweise wird man Layouts
  180. ausschalten wollen; zum Beispiel wenn eine Ajax Anfrage beantwortet wird, oder
  181. eine RESTvolle Darstellung einer Ressource angeboten wird. In diesem Fällen kann
  182. man die <methodname>disableLayout()</methodname> Methode auf dem Layout Objekt
  183. ausführen.
  184. </para>
  185. <programlisting language="php"><![CDATA[
  186. $layout->disableLayout();
  187. ]]></programlisting>
  188. <para>
  189. Das Gegenteil dieser Methode ist natürlich
  190. <methodname>enableLayout()</methodname>, welches jederzeit aufgerufen werden
  191. kann um Layouts für die angefragte Aktion wieder einzuschalten.
  192. </para>
  193. </listitem>
  194. <listitem>
  195. <para>
  196. <emphasis>Ein alternatives Layout auswählen</emphasis>: Wenn man mehrere Layouts
  197. für die eigene Site oder Anwendung hat, kann das Layout welches verwendet werden
  198. soll jederzeit ausgewählt werden indem einfach die
  199. <methodname>setLayout()</methodname> Methode aufgerufen wird. Es ist
  200. aufzurufen indem der Name des Layout Skripts ohne die Dateiendung spezifiziert
  201. wird.
  202. </para>
  203. <programlisting language="php"><![CDATA[
  204. // Verwendung des Layout Skripts "alternate.phtml":
  205. $layout->setLayout('alternate');
  206. ]]></programlisting>
  207. <para>
  208. Das Layout Skript sollte im <varname>$layoutPath</varname> Verzeichnis enthalten
  209. sein, welche in der eigenen Konfiguration spezifiziert ist.
  210. <classname>Zend_Layout</classname> wird anschließend dieses neue Layout bei der
  211. Darstellung verwenden.
  212. </para>
  213. </listitem>
  214. </itemizedlist>
  215. </sect2>
  216. </sect1>