| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 21825 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.view.helpers" xmlns:xi="http://www.w3.org/2001/XInclude">
- <title>View Helfer</title>
- <para>
- In deinen View Skripten ist es oft notwendig, bestimmte komplexe Funktionen immer wieder
- auszuführen, z.B. Datum formatieren, Formularelemente erstellen oder Links für Aktionen
- anzuzeigen. Du kannst Helferklassen verwenden, um diese Aufgaben für dich durchführen zu
- lassen.
- </para>
- <para>
- Ein Helfer ist einfach eine Klasse. Nehmen wir an wir wollen einen Helfer der 'fooBar'
- heißt. Standardmäßig wird der Klasse 'Zend_View_Helper_' vorangestellt (Es kann ein
- eigener Prefix definiert werden wenn ein Pfad für die Helfer definiert wird), und das letzte
- Segment des Klassennamens ist der Name des Helfers; Dieses Segment sollte Titel
- Großgeschrieben sein; der volle Klassenname ist dann:
- <classname>Zend_View_Helper_FooBar</classname>. Diese Klasse sollte mindestens eine einzelne
- Methode enthalten, die nach dem Helfer benannt und camelCased ist:
- <methodname>fooBar()</methodname>.
- </para>
- <note>
- <title>Betrachte den Fall</title>
- <para>
- Namen von Helfern sind immer camelCased, bzw. beginnen Sie nie mit einem
- großgeschriebenen Zeichen. Der Klassenname selbst ist MixedCased, aber die Methode die
- aktuell ausgeführt wird ist camelCased.
- </para>
- </note>
- <note>
- <title>Standard Helfer Pfad</title>
- <para>
- Der Standard Helfer Pfad zeigt immer zu den View Helfern des Zend Frameworks,
- normalerweise 'Zend/View/Helper/'. Selbst wenn <methodname>setHelperPath()</methodname>
- ausgerufen wird um den existierenden Pfad zu überschreiben, wird dieser Pfad gesetzt um
- sicherzustellen das die Standard Helfer arbeiten.
- </para>
- </note>
- <para>
- Um einen Helfer in deinem View Skript zu verwenden, rufe ihn mittels
- <command>$this->helperName()</command> auf. Im Hintergrund wird
- <classname>Zend_View</classname> die Klasse
- <classname>Zend_View_Helper_HelperName</classname> laden, eine Objektinstanz der
- Klasse erstellen und deren Methode <methodname>helperName()</methodname> aufrufen. Die
- Objektinstanz bleibt innerhalb der <classname>Zend_View</classname> Instanz bestehen und
- wird bei allen weiteren Aufrufen von <command>$this->helperName()</command> wiederverwendet.
- </para>
- <sect2 id="zend.view.helpers.initial">
- <title>Vorhandene Helfer</title>
- <para>
- <classname>Zend_View</classname> enthält bereits einige vorhandene Helferklassen, die
- sich alle auf die Erstellung von Formularelementen beziehen und die notwendige
- Maskierung der Ausgaben automatisch vornehmen. Zusätzlich gibt es Helfer zum Erstellen
- Routen-basierter <acronym>URL</acronym>S and <acronym>HTML</acronym> Listen, genauso wie
- für das Deklarieren von Variablen. Die aktuell gelieferten Helfer beinhalten:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>declareVars()</methodname>: Primär benutzt mit
- <methodname>strictVars()</methodname>, kann dieser Helfer verwendet werden um
- template Variablen zu deklarieren welche bereits, oder noch nicht, im View
- Objekt bereits gesetzt sind, sowie auch Standard Werte. Arrays welche als
- Argument dieser Methode übergeben werden, werden verwendet um Standard Werte zu
- setzen; Andernfalls, wenn die Variable nicht existiert, wird diese mit einem
- leeren String gesetzt.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>fieldset($name, $content, $attribs)</methodname>: Erstellt ein
- <acronym>XHTML</acronym> Fieldset. Wenn <varname>$attribs</varname> einen
- 'legend' Schlüssel enthält, wird der Wert für die Fieldset Beschriftung
- verwendet. Das Fieldset wird <varname>$content</varname> umfassen wie vom Helfer
- angeboten.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>form($name, $attribs, $content)</methodname>: Erzeugt eine
- <acronym>XHTML</acronym> Form. Alle <varname>$attribs</varname> werden als
- <acronym>XHTML</acronym> Attribute des Form Tags escaped und dargestellt. Wenn
- <varname>$content</varname> vorhanden und kein boolsches
- <constant>FALSE</constant> ist, dann wird dieser Inhalt innerhalb der Start und
- End Form Tags dargestellt werden; wenn <varname>$content</varname> ein boolsches
- <constant>FALSE</constant> ist (der Standard), wird nur das beginnende Formtag
- erzeugt.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>formButton($name, $value, $attribs)</methodname>: Erstellt ein
- <button /> Element.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>formCheckbox($name, $value, $attribs, $options)</methodname>:
- Erstellt ein <input type="checkbox" /> Element.
- </para>
- <para>
- Standardmäßig, wenn kein $value angegeben und keine $options vorhanden sind,
- wird '0' als ungecheckter Wert, und '1' als gecheckter Wert angenommen. Wenn
- ein $value übergeben wird, aber keine $options vorhanden sind, wird der
- gecheckte Wert and der übergebene Wert angenommen.
- </para>
- <para>
- $options sollte ein Array sein. Wenn das Array indiziert ist, ist der erste
- Wert der gecheckte Wert, und der zweite der ungecheckte Wert; alle anderen
- Werte werden ignoriert. Es kann auch ein assoziatives Array mit den Schlüsseln
- 'checked' und 'unChecked' übergeben werden.
- </para>
- <para>
- Wenn $options übergeben wurden und $value mit dem gecheckten Wert
- übereinstimmt, dann wird das Element als gecheckt markiert. Das Element kann
- auch als gecheckt oder ungecheckt markiert werden indem ein boolscher Wert
- für das Attribut 'checked' übergeben wird.
- </para>
- <para>
- Das obige wird möglicherweise am besten mit einigen Beispielen zusammengefasst:
- </para>
- <programlisting language="php"><![CDATA[
- // '1' und '0' als gecheckte/ungecheckte Optionen; nicht gecheckt
- echo $this->formCheckbox('foo');
- // '1' und '0' als gecheckte/ungecheckte Optionen; gecheckt
- echo $this->formCheckbox('foo', null, array('checked' => true));
- // 'bar' und '0' als gecheckte/ungecheckte Optionen; nicht gecheckt
- echo $this->formCheckbox('foo', 'bar');
- // 'bar' und '0' als gecheckte/ungecheckte Optionen; gecheckt
- echo $this->formCheckbox('foo', 'bar', array('checked' => true));
- // 'bar' und 'baz' als gecheckte/ungecheckte Optionen; nicht gecheckt
- echo $this->formCheckbox('foo', null, null, array('bar', 'baz'));
- // 'bar' und 'baz' als gecheckte/ungecheckte Optionen; nicht gecheckt
- echo $this->formCheckbox('foo', null, null, array(
- 'checked' => 'bar',
- 'unChecked' => 'baz'
- ));
- // 'bar' und 'baz' als gecheckte/ungecheckte Optionen; gecheckt
- echo $this->formCheckbox('foo', 'bar', null, array('bar', 'baz'));
- echo $this->formCheckbox('foo',
- null,
- array('checked' => true),
- array('bar', 'baz'));
- // 'bar' und 'baz' als gecheckte/ungecheckte Optionen; nicht gecheckt
- echo $this->formCheckbox('foo', 'baz', null, array('bar', 'baz'));
- echo $this->formCheckbox('foo',
- null,
- array('checked' => false),
- array('bar', 'baz'));
- ]]></programlisting>
- <para>
- In allen Fällen, wird das Markup einem versteckten Element mit dem
- nicht gecheckten Wert vorangestellt; auf diesem Weg erhält man
- trotzdem einen gültigen Wert von der Form selbst wenn der Wert nicht
- gecheckt wird.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>formErrors($errors, $options)</methodname>: Erzeugt eine ungeordnete
- <acronym>XHTML</acronym> Liste und zeigt Fehler an. <varname>$errors</varname>
- sollte ein String oder ein Array von Strings sein; <varname>$options</varname>
- sollte irgendein Attribut sein das im beginnenden List Tag platziert werden
- soll.
- </para>
- <para>
- Es kann alternativer beginnender, schließender und seperierter Inhalt
- spezifiziert werden wenn Fehler dargestellt werden durch aufruf von
- verschiedenen Methoden auf dem Helfer:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setElementStart($string)</methodname>; Standard ist
- '<ul class="errors"%s"><li>', wobei %s mit den in
- <varname>$options</varname> spezifizierten Attributen ersetzt wird.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setElementSeparator($string)</methodname>; Standard ist
- '</li><li>'.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setElementEnd($string)</methodname>; Standard ist
- '</li></ul>'.
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>
- <methodname>formFile($name, $attribs)</methodname>: Erstellt ein
- <input type="file" /> Element.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>formHidden($name, $value, $attribs)</methodname>: Erstellt ein
- <input type="hidden" /> Element.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>formLabel($name, $value, $attribs)</methodname>: Erstellt ein
- <label> Element, setzt das <property>for</property> Attribut auf
- <varname>$name</varname>, und den aktuellen Labeltext auf
- <varname>$value</varname>. Wenn <emphasis>disable</emphasis> an
- <property>attribs</property> übergeben wird, wird nichts zurückgegeben.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>formMultiCheckbox($name, $value, $attribs, $options,
- $listsep)</methodname>: Erstellt eine Liste von Checkboxen.
- <varname>$options</varname> sollte ein assoziatives Array sein und kann beliebig
- tief werden. <varname>$value</varname> kann ein einzelner Wert oder ein Array
- von ausgewählten Werten sein die Schlüsseln im <varname>$options</varname> Array
- entsprechen. <varname>$listsep</varname> ist standardmäßig ein
- <acronym>HTML</acronym> Break ("<br />"). Standardmäßig wird dieses
- Element als Array behandelt; alle Checkboxen teilen den gleichen Namen, und
- werden als Array übertragen.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>formPassword($name, $value, $attribs)</methodname>: Erstellt ein
- <input type="password" /> Element.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>formRadio($name, $value, $attribs, $options)</methodname>: Erstellt
- eine Reihe von <input type="radio" /> Elementen, eine für jeden der
- $options Elemente. Im $options Array ist der Elementschlüssel der Wert und der
- Elementwert die Bezeichnung des Radio-Buttons. Der $value Radiobutton wird für
- dich vorgewählt.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>formReset($name, $value, $attribs)</methodname>: Erstellt ein
- <input type="reset" /> Element.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>formSelect($name, $value, $attribs, $options)</methodname>: Erstellt
- einen <select>...</select> block mit einer <option>one für
- jedes $options Element. Im $options Array ist der Elementschlüssel der
- Optionswert und der Elementwert die Optionsbezeichnung. Die $value Optionen
- werden für dich vorgewählt.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>formSubmit($name, $value, $attribs)</methodname>: Erstellt ein
- <input type="submit" /> Element.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>formText($name, $value, $attribs)</methodname>: Erstellt ein
- <input type="text" /> Element.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>formTextarea($name, $value, $attribs)</methodname>: Erstellt einen
- <textarea>...</textarea> Block.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>url($urlOptions, $name, $reset)</methodname>: Erstellt einen
- <acronym>URL</acronym> String basierend auf dem Namen der Route.
- <varname>$urlOptions</varname> sollte ein assoziatives Array von Schlüßel/Werte
- Paaren sein, welche bon der speziellen Route verwendet wird.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>htmlList($items, $ordered, $attribs, $escape)</methodname>: erzeugt
- ungeordnete und geordnete Listen welche auf den <varname>$items</varname>
- basieren die übergeben wurden. Wenn <varname>$items</varname> ein
- multidimensionales Array ist, wird eine verschachtelte Liste gebaut. Wenn das
- <varname>$escape</varname> Flag <constant>TRUE</constant> ist (standard), werden
- individuelle Abschnitte escaped durch Verwendung des Escaping Mechanismus der im
- View Objekt registriert wurde; ein <constant>FALSE</constant> Wert wird
- übergeben wenn Markups in den Listen gewünscht werden.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Die Verwendung dieser Helfer in deinem View Skript ist sehr einfach, hier ist ein
- Beispiel. Beachte, dass du diese Helfer nur aufzurufen brauchst; sie werden automatisch
- geladen und instanziiert, sobald sie benötigt werden.
- </para>
- <programlisting language="php"><![CDATA[
- // Innerhalb deines View Skriptes, verweist $this auf die Zend_View
- // Instanz.
- //
- // Sagen wir, dass du bereits eine Serie von Auswahlwerten der Variable
- // $countries in Form eines Arrays zugewiesen hast
- // ('us' => 'United States', 'il' => 'Israel', 'de' => 'Germany')
- ?>
- <form action="action.php" method="post">
- <p><label>Deine Email:
- <?php echo $this->formText('email', 'you@example.com', array('size' => 32)) ?>
- </label></p>
- <p><label>Dein Land:
- <?php echo $this->formSelect('country', 'us', null, $this->countries) ?>
- </label></p>
- <p><label>Möchtest Du hinzugefügt werden?
- <?php echo $this->formCheckbox('opt_in', 'yes', null, array('yes', 'no')) ?>
- </label></p>
- </form>
- ]]></programlisting>
- <para>
- Die Ausgabe des View Skriptes wird in etwa so aussehen:
- </para>
- <programlisting language="php"><![CDATA[
- <form action="action.php" method="post">
- <p><label>Deine Email:
- <input type="text" name="email" value="you@example.com" size="32" />
- </label></p>
- <p><label>Dein Land:
- <select name="country">
- <option value="us" selected="selected">Amerika</option>
- <option value="il">Israel</option>
- <option value="de">Deutschland</option>
- </select>
- </label></p>
- <p><label>Möchtest Du hinzugefügt werden?
- <input type="hidden" name="opt_in" value="no" />
- <input type="checkbox" name="opt_in" value="yes" checked="checked" />
- </label></p>
- </form>
- ]]></programlisting>
- <xi:include href="Zend_View-Helpers-Action.xml" />
- <xi:include href="Zend_View-Helpers-BaseUrl.xml" />
- <xi:include href="Zend_View-Helpers-Currency.xml" />
- <xi:include href="Zend_View-Helpers-Cycle.xml" />
- <xi:include href="Zend_View-Helpers-Partial.xml" />
- <xi:include href="Zend_View-Helpers-Placeholder.xml" />
- <xi:include href="Zend_View-Helpers-Doctype.xml" />
- <xi:include href="Zend_View-Helpers-HeadLink.xml" />
- <xi:include href="Zend_View-Helpers-HeadMeta.xml" />
- <xi:include href="Zend_View-Helpers-HeadScript.xml" />
- <xi:include href="Zend_View-Helpers-HeadStyle.xml" />
- <xi:include href="Zend_View-Helpers-HeadTitle.xml" />
- <xi:include href="Zend_View-Helpers-HtmlObject.xml" />
- <xi:include href="Zend_View-Helpers-InlineScript.xml" />
- <xi:include href="Zend_View-Helpers-Json.xml" />
- <xi:include href="Zend_View-Helpers-Navigation.xml" />
- <xi:include href="Zend_View-Helpers-Translate.xml" />
- </sect2>
- <sect2 id="zend.view.helpers.paths">
- <title>Helfer Pfade</title>
- <para>
- Wie bei den View Skripten kann der Controller für <classname>Zend_View</classname> auch
- einen Stapel an Pfaden festlegen, in dem nach Hilfsklassen gesucht werden soll.
- Standardmäßig sucht <classname>Zend_View</classname> in "Zend/View/Helper/*" nach
- Hilfsklassen. Du kannst <classname>Zend_View</classname> mit Hilfe der Methoden
- <methodname>setHelperPath()</methodname> und <methodname>addHelperPath()</methodname>
- mitteilen, auch in anderen Verzeichnissen zu suchen. Zusätzlich kann man einen
- Klassenpräfix angeben, um Helfer in dem bereit gestellten Pfad verwenden zu können, um
- eigene Namensräume für die Helferklassen zu verwenden. Standardmäßig wird
- 'Zend_View_Helper_' angenommen, wenn kein Präfix angegeben wird.
- </para>
- <programlisting language="php"><![CDATA[
- $view = new Zend_View();
- // Setze den Pfad auf /path/to/more/helpers, mit dem Präfix 'My_View_Helper'
- $view->setHelperPath('/path/to/more/helpers', 'My_View_Helper');
- ]]></programlisting>
- <para>
- Durch Verwendung der <methodname>addHelperPath()</methodname> Methode können die Pfade
- "gestapelt" werden. Wenn du Pfade zu diesem Stapelspeicher hinzufügst, wird
- <classname>Zend_View</classname> im zuletzt hinzugefügten Pfad nach der angeforderten
- Hilfsklasse schauen. Dies erlaubt dir, zu den vorhandenen Helfern weitere hinzufügen
- oder diese durch eigene zu ersetzen.
- </para>
- <programlisting language="php"><![CDATA[
- $view = new Zend_View();
- // Füge /path/to/some/helpers mit Klassenpräfix 'My_View_Helper' hinzu
- $view->addHelperPath('/path/to/some/helpers', 'My_View_Helper');
- // Füge /other/path/to/helpers mit Klassenpräfix 'Your_View_Helper' hinzu
- $view->addHelperPath('/other/path/to/helpers', 'Your_View_Helper');
- // wenn nun $this->helperName() aufgerufen wird, wird Zend_View zuerst nach
- // "/path/to/some/helpers/HelperName" mit dem Klassennamen
- // "Your_View_Helper_HelperName", dann nach
- // "/other/path/to/helpers/HelperName.php" mit dem Klassennamen
- // "My_View_Helper_HelperName", und zuletzt nach
- // "Zend/View/Helpers/HelperName.php" mit dem Klassennamen
- // "Zend_View_Helper_HelperName" schauen.
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.view.helpers.custom">
- <title>Eigene Helfer schreiben</title>
- <para>
- Eigene Helfer zu schreiben ist einfach; du mußt nur diese Regeln befolgen:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Wärend das nicht strikt notwendig ist, ist es empfohlen entweder
- <classname>Zend_View_Helper_Interface</classname> zu implementieren oder
- <classname>Zend_View_Helper_Abstract</classname> zu erweitern wenn eigene Helfer
- erstellt werden. Eingeführt mit 1.6.0, definieren diese einfach die
- <methodname>setView()</methodname> Methode; trotzdem, in kommenden Releases, ist
- es geplant ein Strategy Pattern zu implementieren das vieles der Namensschemas
- einfacher mach wie anbei beschrieben. Wenn darauf aufgebaut wird hilft das, das
- der eigene Code Zukunftssicher ist.
- </para>
- </listitem>
- <listitem>
- <para>
- Der Klassenname muss mindestens auf den Helfernamen unter Verwendung der
- MixedCaps selber enden. Wenn du z.B. einen Helfer mit Namen "specialPurpose"
- schreibst, muss der Klassenname mindestens "SpecialPurpose" lauten. Man kann,
- und sollte, dem Klassennamen einen Präfix geben und es wird empfohlen,
- 'View_Helper' als Teil des Präfix zu verwenden: "My_View_Helper_SpecialPurpose"
- (man muss den Präfix mit oder oder abschließenden Unterstrich an
- <methodname>addHelperPath()</methodname> oder
- <methodname>setHelperPath()</methodname> übergeben).
- </para>
- </listitem>
- <listitem>
- <para>
- Die Klasse muss eine öffentliche Methode mit dem Namen des Helfers haben. Dies
- ist die Methode, welche vom View Skript durch "$this->specialPurpose()"
- aufgerufen wird. In unserem "specialPurpose" Beispiel, würde die notwendige
- Deklaration dieser Methode "public function specialPurpose()" lauten.
- </para>
- </listitem>
- <listitem>
- <para>
- Im Allgemeinen sollte die Klasse keine Ausgaben durch echo(), print() oder auf
- andere Weise erstellen. Stattdessen sollte es die auszugebenen Werte
- zurückgeben. Die zurückgegebenen Werte sollten entsprechend maskiert werden.
- </para>
- </listitem>
- <listitem>
- <para>
- Diese Klasse muss sich in einer Datei befinden, die nach der Helfermethode
- benannt ist. Bezogen auf unser "specialPurpose" Beispiel, muss der Dateiname
- "SpecialPurpose.php" lauten.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Platziere die Hilfsklasse irgendwo in deinem Stapelspeicher für Hilfspfade und
- <classname>Zend_View</classname> wird den Helfer automatisch für dich laden,
- instanziieren, speichern und ausführen.
- </para>
- <para>
- Hier ist ein Beispiel für unseren <classname>SpecialPurpose</classname> Helfer:
- </para>
- <programlisting language="php"><![CDATA[
- class My_View_Helper_SpecialPurpose extends Zend_View_Helper_Abstract
- {
- protected $_count = 0;
- public function specialPurpose()
- {
- $this->_count++;
- $output = "Ich habe 'The Jerk' {$this->_count} Mal(e) gesehen.";
- return htmlspecialchars($output);
- }
- }
- ]]></programlisting>
- <para>
- Dann rufst du in einem View Skript den <classname>SpecialPurpose</classname> Helfer so
- oft auf, wie du möchtest; er wird einmal instanziiert und bleibt für die Lebensdauer der
- <classname>Zend_View</classname> Instanz bestehen.
- </para>
- <programlisting language="php"><![CDATA[
- // denke daran, dass $this in deinem View Skript auf die
- // Zend_View Instanz verweist.
- echo $this->specialPurpose();
- echo $this->specialPurpose();
- echo $this->specialPurpose();
- ]]></programlisting>
- <para>
- Die Ausgabe wird in etwa so aussehen:
- </para>
- <programlisting language="php"><![CDATA[
- Ich habe 'The Jerk' 1 Mal(e) gesehen.
- Ich habe 'The Jerk' 2 Mal(e) gesehen.
- Ich habe 'The Jerk' 3 Mal(e) gesehen.
- ]]></programlisting>
- <para>
- Hier und da ist es notwendig das aufrufende <classname>Zend_View</classname> Objekt
- aufzurufen -- zum Beispiel, wenn es notwendig ist die registrierte Verschöüsselung zu
- verwenden, oder wenn ein anderes View Skript gerendert werden soll, als Teil des eigenen
- Helfers. Um Zugriff zum View Objekt zu erhalten, sollte die eigene Helfer Klasse eine
- <methodname>setView($view)</methodname> Methode wie folgt besitzen:
- </para>
- <programlisting language="php"><![CDATA[
- class My_View_Helper_ScriptPath
- {
- public $view;
- public function setView(Zend_View_Interface $view)
- {
- $this->view = $view;
- }
- public function scriptPath($script)
- {
- return $this->view->getScriptPath($script);
- }
- }
- ]]></programlisting>
- <para>
- Wenn die Helfer Klasse eine <methodname>setView()</methodname> Methode hat, wird diese
- aufgerufen wenn die Helfer Klasse das erste Mal instanziert wird, und das aktuelle View
- Objekt übergeben wird. Es liegt an einem selbst das Objekt in der Klasse zu fixieren,
- genau so wie herauszufinden wie auf dieses zugegriffen werden sollte.
- </para>
- <para>
- Wenn <classname>Zend_View_Helper_Abstract</classname> erweitert wird, muß diese Methode
- nicht selbst definiert werden da Sie schon vordefiniert ist.
- </para>
- </sect2>
- <sect2 id="zend.view.helpers.registering-concrete">
- <title>Konkrete Helper registrieren</title>
- <para>
- Manchmal ist es bequem einen View Helfer zu instanzieren, und diesen dann in der View zu
- registrieren. Ab Version 1.10.0 ist es jetzt möglich die Methode
- <methodname>registerHelper()</methodname> zu verwenden, welche zwei Argumente erwartet:
- das Helfer Objekt, und den Namen mit dem es registriert wird.
- </para>
- <programlisting language="php"><![CDATA[
- $helper = new My_Helper_Foo();
- // ...etwas konfigurieren oder dependency injection durchführen...
- $view->registerHelper($helper, 'foo');
- ]]></programlisting>
- <para>
- Wenn der Helfer eine <methodname>setView()</methodname> Methode hat, wird das View
- Objekt diese aufrufen und sich selbst bei der Registrierung in den Helfer injizieren.
- </para>
- <note>
- <title>Helfer-Namen sollten einer Methode entsprechen</title>
- <para>
- Das zweite Argument von <methodname>registerHelper()</methodname> ist der Name des
- Helfers. Eine entsprechender Methodenname sollte im Helfer existieren; andernfalls
- ruft <classname>Zend_View</classname> eine nicht existierende Methode aus wenn der
- Helfer ausgeführt wird, was einen fatalen <acronym>PHP</acronym> Fehler verursacht.
- </para>
- </note>
- </sect2>
- </sect1>
|