1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
|
<?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>
|