File: Zend_View-Helpers-Partial.xml

package info (click to toggle)
zendframework 1.12.9%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 133,584 kB
  • sloc: xml: 1,311,829; php: 570,173; sh: 170; makefile: 125; sql: 121
file content (226 lines) | stat: -rw-r--r-- 8,550 bytes parent folder | download | duplicates (2)
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>