| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 21825 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.view.introduction">
- <title>Einführung</title>
- <para>
- <classname>Zend_View</classname> ist eine Klasse für die Verarbeitung des "View" Teils des
- Model-View-Controller Entwurfsmusters. Er existiert, um das View Skript von den Model und
- Controller Skripten zu trennen. Es stellt ein System an Helfern, Ausgabefiltern und
- Variablenmaskierung bereit.
- </para>
- <para>
- <classname>Zend_View</classname> ist unabhängig von einem Template System. Du kannst
- <acronym>PHP</acronym> als Template Sprache verwenden oder Instanzen anderer Template
- Systeme erstellen und diese in deinem View Skript verarbeiten.
- </para>
- <para>
- Im Wesentlichen verläuft die Verwendung von <classname>Zend_View</classname> in zwei
- Hauptschritten: 1. Dein Controller Skript erstellt eine Instanz von
- <classname>Zend_View</classname> und übergibt Variablen an diese Instanz. 2. Der Controller
- teilt <classname>Zend_View</classname> mit, ein bestimmtes View Skript zu verarbeiten. Dabei
- wird die Kontrolle an das View Skript übergeben, welches die Ausgabe erstellt.
- </para>
- <sect2 id="zend.view.introduction.controller">
- <title>Controller Skript</title>
- <para>
- In einem einfachen Beispiel hat dein Controller Skript eine Liste von Buchdaten, die
- von einem View Skript verarbeitet werden sollen. Dieses Controller Skript kann ungefähr
- so aussehen:
- </para>
- <programlisting language="php"><![CDATA[
- // verwende ein Modell, um die Daten der Bücher und Autoren zu erhalten
- $data = array(
- array(
- 'author' => 'Hernando de Soto',
- 'title' => 'The Mystery of Capitalism'
- ),
- array(
- 'author' => 'Henry Hazlitt',
- 'title' => 'Economics in One Lesson'
- ),
- array(
- 'author' => 'Milton Friedman',
- 'title' => 'Free to Choose'
- )
- );
- // nun übergebe die Buchdaten an die Zend_View Instanz
- Zend_Loader::loadClass('Zend_View');
- $view = new Zend_View();
- $view->books = $data;
- // und verarbeite ein View Skript mit Namen "booklist.php"
- echo $view->render('booklist.php');
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.view.introduction.view">
- <title>View Skript</title>
- <para>
- Nun benötigen wir das zugehörige View Skript "booklist.php". Dies ist ein
- <acronym>PHP</acronym> Skript wie jedes andere mit einer Ausnahme: es wird innerhalb der
- <classname>Zend_View</classname> Instanz ausgeführt, was bedeutet, dass Referenzen auf
- $this auf die Eigenschaften und Methoden der <classname>Zend_View</classname> Instanz
- weisen. (Variablen, die vom Controller an die Instanz übergeben wurden, sind öffentliche
- (public) Eigenschaften der <classname>Zend_View</classname> Instanz). Dadurch kann ein
- sehr einfaches View Skript wie folgt aussehen:
- </para>
- <programlisting language="php"><![CDATA[
- <?php if ($this->books): ?>
- <!-- Eine Tabelle mit einigen Büchern. -->
- <table>
- <tr>
- <th>Autor</th>
- <th>Titel</th>
- </tr>
- <?php foreach ($this->books as $key => $val): ?>
- <tr>
- <td><?php echo $this->escape($val['author']) ?></td>
- <td><?php echo $this->escape($val['title']) ?></td>
- </tr>
- <?php endforeach; ?>
- </table>
- <?php else: ?>
- <p>Es gibt keine Bücher zum Anzeigen.</p>
- <?php endif;?>
- ]]></programlisting>
- <para>
- Beachte, wie wir die "escape()" Methode verwenden, um die Variablen für die Ausgabe zu
- maskieren.
- </para>
- </sect2>
- <sect2 id="zend.view.introduction.options">
- <title>Optionen</title>
- <para>
- <classname>Zend_View</classname> hat einige Optionen die gesetzt werden können um
- das Verhalten deiner View-Skripte zu konfigurieren.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <property>basePath</property>: zeigt den Basispfad von dem der Skript-, Helfer-
- und Filterpfad gesetzt wird. Es nimmt folgende Verzeichnisstruktur an:
- </para>
- <programlisting language="php"><![CDATA[
- base/path/
- helpers/
- filters/
- scripts/
- ]]></programlisting>
- <para>
- Das kann über <methodname>setBasePath()</methodname>,
- <methodname>addBasePath()</methodname>, oder die <property>basePath</property>
- Option dem Konstruktor gesetzt werden.
- </para>
- </listitem>
- <listitem>
- <para>
- <property>encoding</property>: zeigt das Verschlüsseln der Zeichen für die
- Verwendung mit <methodname>htmlentities()</methodname>,
- <methodname>htmlspecialchars()</methodname>, und anderen Operationen.
- Standardwert ist ISO-8859-1 (latin1). Kann über
- <methodname>setEncoding()</methodname>, oder die <property>encoding</property>
- Option im Constructor, gesetzt werden.
- </para>
- </listitem>
- <listitem>
- <para>
- <property>escape</property>: zeigt einen Rückruf welche durch
- <methodname>escape()</methodname> benutzt wird. Kann über
- <methodname>setEscape()</methodname>, oder die <property>escape</property>
- Option im Konstruktor, gesetzt werden.
- </para>
- </listitem>
- <listitem>
- <para>
- <property>filter</property>: zeigt einen Filter welcher nach dem Rendern des
- View Skripts verwendet wird. Kann über <methodname>setFilter()</methodname>,
- <methodname>addFilter()</methodname>, oder die <property>filter</property>
- Option im Konstruktor, gesetzt werden.
- </para>
- </listitem>
- <listitem>
- <para>
- <property>strictVars:</property> zwingt <classname>Zend_View</classname> Notizen
- und Warnungen auszugeben wenn auf nicht initialisierte View Variablen
- zugegriffen wird. Das kann durch den Aufruf von
- <methodname>strictVars(true)</methodname>, oder der Übergabe der
- <property>strictVars</property> Option im Konstruktor, gesetzt werden.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- <sect2 id="zend.view.introduction.shortTags">
- <title>View Skripte mit Short Tags</title>
- <para>
- In unseren Beispielen verwenden wir <acronym>PHP</acronym> Long
- Tags: <emphasis><?php</emphasis>. Wir empfehlen auch die <ulink
- url="http://us.php.net/manual/en/control-structures.alternative-syntax.php">
- alternative Syntax für Kontrollstrukturen</ulink>. Diese sind übliche Abkürzungen
- die Verwendet werden wenn View Skripte geschrieben werden, da Sie Konstrukte
- verständlicher machen, die Anweisungen auf einer einzelnen Zeile belassen und die
- Notwendigkeit eleminieren nach Klammern im <acronym>HTML</acronym> zu suchen.
- </para>
- <para>
- In vorhergehenden Versionen haben wir oft die Verwendung von Short Tags empfohlen
- (<emphasis><?</emphasis> und <emphasis><?=</emphasis>), da Sie die View Skripte
- weniger kompliziert machen. Trotzdem ist der Standardwert der
- <filename>php.ini</filename> Option <constant>short_open_tag</constant> typischerweise
- in Produktion oder bei Shared Hosts deaktiviert -- was deren Verwendung nicht wicklich
- portabel macht. Wenn man <acronym>XML</acronym> in View Skripten als Template verwendet,
- werden Short Open Tags dazu führen das die Prüfung der Templates fehlschlägt.
- Letztendlich, wenn man Short Tags verwendet, wärend <constant>short_open_tag</constant>
- ausgeschaltet ist, werden die View Skripte entweder Fehler verursachen oder einfach den
- <acronym>PHP</acronym> Code an den Betrachter zurücksenden.
- </para>
- <para>
- Wenn man, trotz der Warnungen, Short Tags verwenden will diese aber ausgeschaltet sind,
- hat man zwei Optionen:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Die Short Tags in der <filename>.htaccess</filename> Datei einschalten:
- </para>
- <programlisting language="apache"><![CDATA[
- php_value "short_open_tag" "on"
- ]]></programlisting>
- <para>
- Das ist nur dann möglich wenn es erlaubt ist <filename>.htaccess</filename>
- Dateien zu erstellen und anzupassen. Diese Direktive kann auch in der
- <filename>httpd.conf</filename> Datei hinzugefügt werden.
- </para>
- </listitem>
- <listitem>
- <para>
- Einen optionalen Stream Wrapper einschalten um Short Tags zu Long Tags on the
- fly zu konvertieren:
- </para>
- <programlisting language="php"><![CDATA[
- $view->setUseStreamWrapper(true);
- ]]></programlisting>
- <para>
- Das registriert <classname>Zend_View_Stream</classname> als Steam Wrapper für
- View Skripte, und stellt sicher das der Code weiterhin funktioniert wie wenn
- Short Tags eingeschaltet wären.
- </para>
- </listitem>
- </itemizedlist>
- <warning>
- <title>View Stream Wrapper verringert die Geschwindigkeit</title>
- <para>
- Die Verwendung des Stream Wrapper <emphasis>wird</emphasis> die Geschwindigkeit der
- Anwendung verringern, auch wenn es nicht möglich ist Benchmarks durchzuführen um
- den Grad der Verlangsamung festzustellen. Wir empfehlen das entweder Short Tags
- aktiviert werden, die Skripte volle Tags verwenden, oder eine gute Strategie für
- das Cachen von partiellen, und/oder volle Seiteninhalten vorhanden ist.
- </para>
- </warning>
- </sect2>
- <sect2 id="zend.view.introduction.accessors">
- <title>Zugriff auf Dienstprogramme</title>
- <para>
- Typischerweise ist es nur notwendig <methodname>assign()</methodname>,
- <methodname>render()</methodname>, oder eine der Methoden für das Setzen/Hinzufügen von
- Filtern, Helfern und Skript-Pfade aufzurufen. Trotzdem, wenn
- <classname>Zend_View</classname> selbst erweitert werden soll, oder auf einige der
- Internas zugegriffen werden soll, existieren hierfür einige Zugriffsmöglichkeiten:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>getVars()</methodname> gibt alle zugeordneten Variablen zurück.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>clearVars()</methodname> löscht alle zugeordneten Variablen;
- Nützlich wenn ein View-Objekt wiederverwendet werden, aber auch kontrolliert
- werden soll welche Variablen vorhanden sind.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getScriptPath($script)</methodname> empfängt den aufgelösten Pfad zu
- einem gegebenen View Skript.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getScriptPaths()</methodname> empfängt alle registrierten
- Skript-Pfade.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getHelperPath($helper)</methodname> empfängt den aufgelösten Pfad
- zur angegebenen Helferklasse.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getHelperPaths()</methodname> empfängt alle registrierten
- Helferpfade.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getFilterPath($filter)</methodname> empfängt den aufgelösten Pfad
- zur angegebenen Filterklasse.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getFilterPaths()</methodname> empfängt alle registrierten
- Filterpfade.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- </sect1>
|