| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect3 id="zend.view.helpers.initial.partial">
- <title>Partielle Helfer</title>
- <para>
- Der <classname>Partial</classname> (Partielle) View Helfer wird verwendet um ein spezielles
- Template innerhalb seines eigenen variablen Bereichs zu rendern. Primär wird er für
- wiederverwendbare Templatefragmente verwendet bei denen man keine Vorsorge wegen variablen
- Namenskonflikten aufpassen muß. Zusätzlich erlauben Sie es Teile von View Skripten von
- speziellen Modulen zu spezifizieren.
- </para>
- <para>
- Ein Geschwisterteil zum <classname>Partial</classname> ist der
- <classname>PartialLoop</classname> View Helfer der es erlaubt Daten zu übergeben die
- durchlaufen werden können, und einen Abschnitt für jedes Teil auszugeben.
- </para>
- <note>
- <title>PartialLoop Zähler</title>
- <para>
- Der <classname>PartialLoop</classname> View Helfer fügt der View eine Variable hinzu die
- <emphasis>partialCounter</emphasis> heißt und welche die aktuelle Position des Arrays
- zum View Skript übergibt. Das bietet einen einfachen Weg um alternative Farbgebungen zum
- Bespiel bei Tabellenzeilen zu haben.
- </para>
- </note>
- <example id="zend.view.helpers.initial.partial.usage">
- <title>Grundsätzliche Verwendung von Partials</title>
- <para>
- Die grundsätzliche Verwendung von Partials ist die Ausgabe von Templatefragmenten im
- eigenen Viewbereich. Es wird das folgende teilweise Skript angenommen:
- </para>
- <programlisting language="php"><![CDATA[
- <?php // partial.phtml ?>
- <ul>
- <li>Von: <?php echo $this->escape($this->from) ?></li>
- <li>Subjekt: <?php echo $this->escape($this->subject) ?></li>
- </ul>
- ]]></programlisting>
- <para>
- Dieses würde dann vom View Skript aufgerufen indem das folgende verwendet wird:
- </para>
- <programlisting language="php"><![CDATA[
- <?php echo $this->partial('partial.phtml', array(
- 'from' => 'Team Framework',
- 'subject' => 'Teil der View')); ?>
- ]]></programlisting>
- <para>
- Was dann das folgende ausgibt:
- </para>
- <programlisting language="html"><![CDATA[
- <ul>
- <li>From: Team Framework</li>
- <li>Subject: Teil der View</li>
- </ul>
- ]]></programlisting>
- </example>
- <note>
- <title>Was ist ein Modell?</title>
- <para>
- Ein Modell das mit dem <classname>Partial</classname> View Helfer verwendet wird kann
- eines der folgenden sein:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>Array</emphasis>. Wenn ein Array übergeben wird, sollte es assoziativ
- sein, und seine Schlüssel/Werte Paare werden der View mit dem Schlüssel als View
- Variable zugeordnet.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>Objekt das die toArray() Methode implementiert</emphasis>. Wenn ein
- Objekt übergeben wird das eine <methodname>toArray()</methodname> Methode
- besitzt, wird das Ergebnis von <methodname>toArray()</methodname> dem View
- Objekt als View Variablen zugeordnet.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>Standard Objekt</emphasis>. Jedes andere Objekt wird die Ergebnisse
- von <methodname>object_get_vars()</methodname> (essentiell alle öffentlichen
- Eigenschaften des Objektes) dem View Objekt zuordnen.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Wenn das eigene Modell ein Objekt ist, kann es gewünscht sein, es <emphasis>als
- Objekt</emphasis> an das Partielle Skript zu übergeben, statt es in ein Array von
- Variablen zu serialisieren. Das kann durch das Setzen der 'objectKey' Eigenschaft des
- betreffenden Helfers getan werden:
- </para>
- <programlisting language="php"><![CDATA[
- // Dem Partiellen mitteilen das ein Objekt als 'model' Variable übergeben wird
- $view->partial()->setObjectKey('model');
- // Dem Partiellen mitteilen das ein Objekt von partialLoop als 'model'
- // Variable im letzten Partiellen View Skript übergeben wird
- $view->partialLoop()->setObjectKey('model');
- ]]></programlisting>
- <para>
- Diese Technik ist speziell dann sinnvoll wenn
- <classname>Zend_Db_Table_Rowset</classname>s an <methodname>partialLoop()</methodname>
- übergeben werden, da man dann kompletten Zugriff auf die Zeilenobjekte im View Skript
- hat, was es einem erlaubt Ihre Methoden auszurufen (wie das empfangen von Werten bei
- Eltern- oder abhängigen Zeilen).
- </para>
- </note>
- <example id="zend.view.helpers.initial.partial.partialloop">
- <title>Verwendung von PartialLoop um iterierbare Modelle darzustellen</title>
- <para>
- Typischerweise, wird man Partials in einer Schleife verwenden um das selbe
- Inhaltsfragment, viele Male, darzustellen; auf diesem Weg können große Blöcke von
- wiederholenden Inhalten oder komplexe Anzeigelogik auf einen einzelnen Platz gegeben
- werden. Trotzdem hat das einen Geschwindigkeitsnachteil, da der partielle Helfer einmal
- für jede Iteration aufgerufen werden
- muß.
- </para>
- <para>
- Der <classname>PartialLoop</classname> View Helfer hilft bei der Lösung dieses Problems.
- Er erlaubt es einen wiederholenden Teil (Array oder Objekt das einen
- <emphasis>Iterator</emphasis> implementiert) als Modell zu übergeben. Er iteriert dann
- darüber, und übergibt dessen Teile dem Partial Skript als Modell. Teil in diesem
- Iterator kann jedes Modell sein das der <classname>Partial</classname> View Helfer
- erlaubt.
- </para>
- <para>
- Es wird das folgende teilweise View Skript angenommen:
- </para>
- <programlisting language="php"><![CDATA[
- <?php // partialLoop.phtml ?>
- <dt><?php echo $this->key ?></dt>
- <dd><?php echo $this->value ?></dd>
- ]]></programlisting>
- <para>
- Und das folgende "Modell":
- </para>
- <programlisting language="php"><![CDATA[
- $model = array(
- array('key' => 'Säugetier', 'value' => 'Kamel'),
- array('key' => 'Vogel', 'value' => 'Pinguin'),
- array('key' => 'Reptil', 'value' => 'Viper'),
- array('key' => 'Fisch', 'value' => 'Flunder'),
- );
- ]]></programlisting>
- <para>
- Im View Skript wird dann der <classname>PartialLoop</classname> Helfer aufgerufen:
- </para>
- <programlisting language="php"><![CDATA[
- <dl>
- <?php echo $this->partialLoop('partialLoop.phtml', $model) ?>
- </dl>
- ]]></programlisting>
- <programlisting language="html"><![CDATA[
- <dl>
- <dt>Säugetier</dt>
- <dd>Kamel</dd>
- <dt>Vogel</dt>
- <dd>Pinguin</dd>
- <dt>Reptil</dt>
- <dd>Viper</dd>
- <dt>Fisch</dt>
- <dd>Flunder</dd>
- </dl>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.partial.modules">
- <title>Partials in anderen Modulen darstellen</title>
- <para>
- Zeitweise existiert ein Parial in einem anderen Modul. Wenn der Name des Moduls bekannt
- ist, kann dieses als zweites Argument entweder <methodname>partial()</methodname> oder
- <methodname>partialLoop()</methodname> übergeben werden, indem das
- <varname>$model</varname> Argument an dritte Stelle verschoben wird.
- </para>
- <para>
- Wenn zum Beispiel, eine Teilseite existiert im 'list' Modul existiert die verwendet
- werden soll, kann diese wie folgt genommen werden:
- </para>
- <programlisting language="php"><![CDATA[
- <?php echo $this->partial('pager.phtml', 'list', $pagerData) ?>
- ]]></programlisting>
- <para>
- Auf diesem Weg, können Teile wiederverwendet werden die speziell für andere Module
- erstellt wurden. Deshalb ist es besser, wiederverwendbare Teile in einen Pfad für
- geteilt View Skripte zu geben.
- </para>
- </example>
- </sect3>
|