| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.layout.quickstart">
- <title>Zend_Layout Schnellstart</title>
- <para>
- Es gibt zwei primäre Verwendungen für <classname>Zend_Layout</classname>: Mit dem Zend
- Framework <acronym>MVC</acronym>, und ohne.
- </para>
- <sect2 id="zend.layout.quickstart.layouts">
- <title>Layout Skripte</title>
- <para>
- In beiden Fällen, müssen trotzdem Layout Skripte erstellt werden. Layout Sktipte
- verwenden einfach <classname>Zend_View</classname> (oder welche View Implementation auch
- immer verwendet wird). Layout Variablen werden mit einem
- <classname>Zend_Layout</classname> <link
- linkend="zend.view.helpers.initial.placeholder">Platzhalter</link> registriert,
- und es kann auf Sie über den Platzhalter Helfer zugegriffen werden oder dadurch das Sie
- als Objekt Eigenschaften vom Layout Objekt über den Layout Helfer geholt werden.
- </para>
- <para>
- Als Beispiel:
- </para>
- <programlisting language="php"><![CDATA[
- <!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Meine Seite</title>
- </head>
- <body>
- <?php
- // Holt den 'content' Schlüssel durch Verwendung des Layout Helfers:
- echo $this->layout()->content;
- // Holt den 'foo' Schlüssel durch Verwendung des Platzhalter Helfers:
- echo $this->placeholder('Zend_Layout')->foo;
- // Holt das Layout Objekt und empfängt verschiedene Schlüssel von Ihm:
- $layout = $this->layout();
- echo $layout->bar;
- echo $layout->baz;
- ?>
- </body>
- </html>
- ]]></programlisting>
- <para>
- Weil <classname>Zend_Layout</classname> <classname>Zend_View</classname> für die
- Darstellung verwendet, kann auch jeder registrierte View Helfer verwendet werden, und
- auch auf jede zuvor zugeordnete View Variable kann zugegriffen werden. Sehr hilfreich
- sind die verschiedenen <link linkend="zend.view.helpers.initial.placeholder">Platzhalter
- Helfer</link>, da diese das Empfangen von Inhalt für einen Bereich wie die
- <head> Sektion, Navigation usw. erlauben:
- </para>
- <programlisting language="php"><![CDATA[
- <!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <?php echo $this->headTitle() ?>
- <?php echo $this->headScript() ?>
- <?php echo $this->headStyle() ?>
- </head>
- <body>
- <?php echo $this->render('header.phtml') ?>
- <div id="nav"><?php echo $this->placeholder('nav') ?></div>
- <div id="content"><?php echo $this->layout()->content ?></div>
- <?php echo $this->render('footer.phtml') ?>
- </body>
- </html>
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.layout.quickstart.mvc">
- <title>Zend_Layout mit dem Zend Framework MVC verwenden</title>
- <para>
- <classname>Zend_Controller</classname> bietet ein reiches Set von Funktionalitäten für
- Erweiterung mit seinen <link linkend="zend.controller.plugins">Front Controller
- Plugins</link> und <link linkend="zend.controller.actionhelpers">Action Controller
- Helfern</link>. <classname>Zend_View</classname> hat auch <link
- linkend="zend.view.helpers">Helfer</link>. <classname>Zend_Layout</classname> nimmt
- Vorteile wahr von diesen verschiedenen Erweiterungspunkten wenn es mit den
- <acronym>MVC</acronym> Komponenten verwendet wird.
- </para>
- <para>
- <methodname>Zend_Layout::startMvc()</methodname> erstellt eine Instanz von
- <classname>Zend_Layout</classname> mit jeder optionalen Konfiguration die angegeben
- wird. Anschließend wird ein Front Controller Plugin registriert welches das Layout mit
- jedem Anwendungsinhalt darstellt sobald die Dispatch Schleife fertiggestellt ist, und
- registriert einen Action Helfer der den Zugriff auf das Layout Objekt vom Action
- Controller aus gestattet. Zusätzlich kann jederzeit die Layout Instanz vom View Skript
- geholt werden indem der <classname>Layout</classname> View Helfer verwendet wird.
- </para>
- <para>
- Zuerst sehen wir uns an wie <classname>Zend_Layout</classname> initialisiert wird um es
- mit dem <acronym>MVC</acronym> zu verwenden:
- </para>
- <programlisting language="php"><![CDATA[
- // In der Bootstrap Datei:
- Zend_Layout::startMvc();
- ]]></programlisting>
- <para>
- <methodname>startMvc()</methodname> kann ein optionales Array von Optionen oder ein
- <classname>Zend_Config</classname> Objekt entgegennehmen um die Instanz anzupassen;
- diese Optionen werden detailiert in <link linkend="zend.layout.options">diesem
- Abschnitt</link> beschrieben.
- </para>
- <para>
- In einem Action Controller, kann anschließend auf die Layout Instanz als Action Helfer
- zugegriffen werden:
- </para>
- <programlisting language="php"><![CDATA[
- class FooController extends Zend_Controller_Action
- {
- public function barAction()
- {
- // Layouts in dieser Aktion deaktivieren:
- $this->_helper->layout->disableLayout();
- }
- public function bazAction()
- {
- // Ein anderes Layout Skript in dieser Action verwenden:
- $this->_helper->layout->setLayout('foobaz');
- };
- }
- ]]></programlisting>
- <para>
- Im View Skript kann dann auf das Layout Objekt über den <classname>Layout</classname>
- View Helfer zugegriffen werden. Dieser View Helfer ist etwas anders als andere da er
- keine Argumente entgegennimmt und ein Objekt statt einem Stringwert zurückgibt. Das
- erlaubt sofortige Methodenaufrufe auf dem Layout Objekt:
- </para>
- <programlisting language="php"><![CDATA[
- $this->layout()->setLayout('foo'); // alternatives Layout setzen
- ]]></programlisting>
- <para>
- Die im <acronym>MVC</acronym> registrierte <classname>Zend_Layout</classname> Instanz
- kann jederzeit über die statische <methodname>getMvcInstance()</methodname> Methode
- geholt werden:
- </para>
- <programlisting language="php"><![CDATA[
- // Gibt null zurück wenn startMvc() nicht zuerst aufgerufen wurde
- $layout = Zend_Layout::getMvcInstance();
- ]]></programlisting>
- <para>
- Letztendlich hat das Front Controller Plugin von <classname>Zend_Layout</classname> ein
- wichtiges Feature zusätzlich zur Darstellung des Layouts: Es empfängt alle benannte
- Segmente vom Antwortobjekt und ordnet diese als Layout Variablen zu, wobei das 'default'
- Segment der 'content' Variable zugeordnet wird. Das erlaubt es auf den Anwendungsinhalt
- zugreifen zu können und es in View Skripten darzustellen.
- </para>
- <para>
- Als Beispiel, nehmen wir an das der Code zuerst
- <methodname>FooController::indexAction()</methodname> auslöst, welches einige Inhalte im
- standardmäßigen Antwortobjekt darstellt, und dann zu
- <methodname>NavController::menuAction()</methodname> weiterleitet, welches Inhalt im
- 'nav' Antwortobjekt darstellt. Letztendlich wird auf
- <methodname>CommentController::fetchAction()</methodname> weitergeleitet und einige
- Kommentare geholt, aber diese werden auch im standard Antwortobjekt dargestellt. (was
- Inhalt zu diesem Segment anfügt). Das View Skript kann dann jedes separat darstellen:
- </para>
- <programlisting language="php"><![CDATA[
- <body>
- <!-- Darstellung von /nav/menu -->
- <div id="nav"><?php echo $this->layout()->nav ?></div>
- <!-- Darstellung von /foo/index + /comment/fetch -->
- <div id="content"><?php echo $this->layout()->content ?></div>
- </body>
- ]]></programlisting>
- <para>
- Dieses Feature ist teilweise nützlich wenn es in Verbindung mit dem ActionStack
- <link linkend="zend.controller.actionhelpers.actionstack">Action Helfer</link> und
- <link linkend="zend.controller.plugins.standard.actionstack">Plugin</link> verwendet
- wird, welche verwendet werden können um einen Stack von Aktionen zu definieren der
- durchgelaufen wird, und welcher angepasste Seiten erstellt.
- </para>
- </sect2>
- <sect2 id="zend.layout.quickstart.standalone">
- <title>Zend_Layout als eienständige Komponente verwenden</title>
- <para>
- Als eigenständige Komponente bietet <classname>Zend_Layout</classname> nicht annähernd
- so viele Features oder so viel Bequemlichkeit wie wenn es mit <acronym>MVC</acronym>
- verwendet wird. Trotzdem hat es zwei grundsätzliche Vorteile:
- </para>
- <itemizedlist>
- <listitem><para>Abgrenzung von Layout Variablen.</para></listitem>
- <listitem>
- <para>Isolation vom Layout View Skript von anderen View Skripten.</para>
- </listitem>
- </itemizedlist>
- <para>
- Wenn es als eigenständige Komponente verwendet wird, muß einfach das Layout Objekt
- instanziiert werden, die unterschiedlichen Zugriffsmethoden verwendet werden um Stati zu
- setzen, Variablen als Objekt Eigenschaften gesetzt, und das Layout dargestellt werden:
- </para>
- <programlisting language="php"><![CDATA[
- $layout = new Zend_Layout();
- // Einen Layout Skript Pfad setzen:
- $layout->setLayoutPath('/path/to/layouts');
- // Einige Variablen setzen:
- $layout->content = $content;
- $layout->nav = $nav;
- // Ein unterschiedliches Layout Skript auswählen:
- $layout->setLayout('foo');
- // Letztendlich das Layout darstellen
- echo $layout->render();
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.layout.quickstart.example">
- <title>Beispiel Layout</title>
- <para>
- Machmal ist ein Bild mehr Wert als tausend Wörter. Das folgende ist ein Beispiel Layout
- Skript das zeigt wie alles zusammenkommen könnte.
- </para>
- <para>
- <inlinegraphic align="center" valign="middle"
- fileref="figures/zend.layout.quickstart.example.png" format="PNG" />
- </para>
- <para>
- Die aktuelle Reihenfolge der Elemente kann variieren, abhängig vom
- <acronym>CSS</acronym> das eingestellt wurde; zum Beispiel, wenn absolute Positionen
- verwendet werden, kann es möglich sein das die Navigation später im Dokument angezeigt
- wird, aber immer noch ganz oben gezeigt wird; das selbe könnte für die Sidebar oder den
- Header gelten. Der aktuelle Mechanismum des Holens von Inhalt bleibt trotzdem der selbe.
- </para>
- </sect2>
- </sect1>
|