| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: 22917 -->
- <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
- Instanz <classname>Zend_View</classname> ausgeführt, was bedeutet, dass Referenzen auf
- $this auf die Eigenschaften und Methoden der Instanz <classname>Zend_View</classname>
- 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>: gibt das Verschlüsseln der Zeichen für die
- Verwendung mit <methodname>htmlentities()</methodname>,
- <methodname>htmlspecialchars()</methodname>, und anderen Operationen an.
- Standardwert ist UTF-8. Kann über
- <methodname>setEncoding()</methodname>, oder die Option <property>encoding</property>
- im Constructor, gesetzt werden.
- </para>
- </listitem>
- <listitem>
- <para>
- <property>escape</property>: gibt eine Callback-Funktion an, welche durch
- <methodname>escape()</methodname> benutzt wird. Kann über
- <methodname>setEscape()</methodname>, oder die Option <property>escape</property>
- im Konstruktor, gesetzt werden.
- </para>
- </listitem>
- <listitem>
- <para>
- <property>filter</property>: gibt einen Filter an, welcher nach dem Rendern des
- View Skripts verwendet wird. Kann über <methodname>setFilter()</methodname>,
- <methodname>addFilter()</methodname>, oder die Option <property>filter</property>
- 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
- Option <property>strictVars</property> 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 wirklich
- 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ährend <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
- Datei <filename>httpd.conf</filename> 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 Stream Wrapper für
- View-Skripte, und stellt sicher, dass 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, dass 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. Wenn <classname>Zend_View</classname>
- trotzdem 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> ruft den aufgelösten Pfad zu
- einem gegebenen View-Skript ab.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getScriptPaths()</methodname> ruft alle registrierten
- Skript-Pfade ab.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getHelperPath($helper)</methodname> ruft den aufgelösten Pfad
- zur angegebenen Helferklasse ab.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getHelperPaths()</methodname> ruft alle registrierten
- Helferpfade ab.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getFilterPath($filter)</methodname> ruft den aufgelösten Pfad
- zur angegebenen Filterklasse ab.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getFilterPaths()</methodname> ruft alle registrierten
- Filterpfade ab.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- </sect1>
|