File: Zend_View-Introduction.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 (343 lines) | stat: -rw-r--r-- 12,340 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
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 21829 -->
<!-- Reviewed: no -->
<sect1 id="zend.view.introduction">

    <title>Wprowadzenie</title>

    <para>
        Zend_View jest klasą zapewniającą obsługę części widoku ("view")
        we wzorcu projektowym MVC (model-view-controller). Istnieje ona
        w celu oddzielenia wyglądu aplikacji od kontrolerów i danych.
        Zapewnia system skryptów helperów i filtrów.
    </para>

    <para>
        Zend_View jest bardzo prostym systemem; możesz użyć PHP jako
        języka szablonów lub utworzyć instancje innych systemów szablonów,
        a następnie manipulować nimi wewnątrz skryptu widoku.
    </para>

    <para>
        Zasadniczo użycie Zend_View składa się z dwóch kroków:

        1. Twój skrypt kontrolera tworzy instancję klasy
        Zend_View i przekazuje zmienne do tej instancji.

        2. Kontroler mówi obiektowi Zend_View aby przetworzył określony skrypt
        widoku, skutkiem tego jest wygenerowanie wyjściowego widoku.
    </para>

    <sect2 id="zend.view.introduction.controller">

        <title>Skrypt kontrolera</title>

        <para>
            Aby pokazać prosty przykład załóżmy, że kontroler ma dane w postaci
            listy książek i chcemy aby były one przetworzone jako widok. Skrypt
            kontrolera mógłby wyglądać tak:
        </para>

        <programlisting role="php"><![CDATA[
// użyjmy modelu aby uzyskać dane o autorach książek i ich tytułach
$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'
    )
);

// przekażmy dane o książkach do instancji Zend_View
Zend_Loader::loadClass('Zend_View');
$view = new Zend_View();
$view->books = $data;

// wygenerujemy wyjściowy widok o nazwie "booklist.php"
echo $view->render('booklist.php');
]]>
        </programlisting>

    </sect2>

    <sect2 id="zend.view.introduction.view">

        <title>Skrypt widoku</title>

        <para>
            Teraz potrzebujemy skryptu widoku "booklist.php". Jest
            to skrypt PHP jak każdy inny, z jednym wyjątkiem: jest on wykonywany
            w przestrzeni instancji Zend_View, co oznacza, że odnosi się on do
            właściwości i metod klasy Zend_View za pomocą $this. Zmienne
            przekazane do tej instancji przez kontroler są publicznymi
            właściwościami instancji Zend_View) więc bardzo prosty skrypt
            mógłby wyglądać tak:
        </para>

        <programlisting role="php"><![CDATA[
if ($this->books): ?>

    <!-- Tabela z książkami. -->
    <table>
        <tr>
            <th>Autor</th>
            <th>Tytuł</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>Nie ma żadnych książek do wyświetlenia.</p>

<?php endif;
]]>
        </programlisting>

        <para>
            Zauważ, że używamy metody "escape()" aby przefiltrować zmienne
            wyjściowe.
        </para>

    </sect2>

    <sect2 id="zend.view.introduction.options">
        <title>Opcje</title>

        <para>
            <code>Zend_View</code> posiada kilka opcji, które mogą być użyte do
            skonfigurowania zachowania skryptów widoków.
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <code>basePath:</code> określa bazową ścieżkę, wewnątrz
                    której znajdują się skrypty widoków, klasy helperów oraz
                    klasy filtrów. Zakładane jest, że struktura katalogów
                    wygląda tak:
                </para>

                <programlisting role="php"><![CDATA[
base/path/
    helpers/
    filters/
    scripts/
]]>
                </programlisting>

                <para>
                    Ta opcja może być ustawiona za pomocą metody
                    <code>setBasePath()</code>, metody <code>addBasePath()</code>,
                    lub jako opcja <code>basePath</code> przekazana do
                    konstruktora.
                </para>
            </listitem>

            <listitem><para>
                <code>encoding:</code> określa kodowanie znaków, które ma być
                użyte przez metody <code>htmlentities()</code>,
                <code>htmlspecialchars()</code> oraz w innych operacjach.
                Domyślnie jest to ISO-8859-1 (latin1). Może być ustawione za
                pomocą metody <code>setEncoding()</code> lub jako opcja
                <code>encoding</code> konstruktora.
            </para></listitem>

            <listitem><para>
                <code>escape:</code> określa funkcję używaną przez metodę
                <code>escape()</code>. Może być ustawiona za pomocą metody
                <code>setEscape()</code> lub za pomocą opcji <code>escape</code>
                konstruktora.
            </para></listitem>

            <listitem><para>
                <code>filter:</code> określa filtr, który ma być użyty po
                renderowaniu skryptu widoku. Może być ustawiony za pomocą
                metody <code>setFilter()</code>, metody <code>addFilter()</code>,
                lub za pomocą opcji <code>filter</code> konstruktora.
            </para></listitem>

            <listitem><para>
                <code>strictVars:</code> zmusza <code>Zend_View</code> do
                wyświetlania not i ostrzeżeń, wtedy gdy zdarzy się próba
                uzyskania dostępu do niezainicjowanych zmiennych widoków.
                Może to być ustawione przez wywołanie metody
                <code>strictVars(true)</code> lub przekazanie opcji
                <code>strictVars</code> do konstruktora.
            </para></listitem>
        </itemizedlist>
    </sect2>

    <sect2 id="zend.view.introduction.shortTags">
        <title>Krótkie znaczniki wewnątrz skryptów widoków</title>

        <para>
            W naszych przykładach i dokumentacji używamy krótkich znaczników PHP:
            <code>&lt;?</code> oraz <code>&lt;?=</code>.
            Dodatkowo używamy <ulink
                url="http://us.php.net/manual/en/control-structures.alternative-syntax.php">alternatywnej
                składni instrukcji kontrolnych</ulink>. Te wygodne skróty,
            których można użyć w skryptach widoków, pozwalają na zwiększenie
            czytelności kodu
        </para>

        <para>
            Jednak wielu programistów woli używać pełnych znaczników dla celów
            poprawności czy przenośności aplikacji. Przykładowo dyrektywa
            <code>short_open_tag</code> jest wyłączona w rekomendowanym pliku
            konfiguracyjnym php.ini.recommended, a także jeśli używasz w
            skryptach widoków języka XML, krótkie znaczniki mogłyby powodować
            błędy.
        </para>

        <para>
            Dodatkowo, jeśli użyjesz krótkich znaczników gdy ich obsługa jest
            wyłączona, to mogą wystąpić błędy w skryptach widoków lub po prostu
            kod może zostać wyświetlony użytkownikom.
        </para>

        <para>
            W przypadku gdy chcesz użyć krótkich znaczników, a ich obsługa jest
            wyłączona, masz dwa rozwiązania:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    Włączyć krótkie znaczniki w pliku <code>.htaccess</code>:
                </para>

                <programlisting role="apache"><![CDATA[
php_value "short_open_tag" "on"
]]>
                </programlisting>

                <para>
                    To będzie możliwe tylko jeśli posiadasz uprawnienia
                    pozwalające na tworzenie i użycie plików
                    <code>.htaccess</code>. Ta dyrektywa może być także dodana
                    do pliku <code>httpd.conf</code>.
                </para>
            </listitem>

            <listitem>
                <para>
                    Włączyć alternatywną obsługę strumienia danych, aby w locie
                    konwertować krótkie znaczniki na pełne:
                </para>

        <programlisting role="php"><![CDATA[
$view->setUseStreamWrapper(true);
]]>
                </programlisting>

                <para>
                    Rejestruje to klasę <code>Zend_View_Stream</code> jako klasę
                    obsługującą strumień danych dla skryptów widoków i umożliwia
                    dalsze działanie skryptów widoków, tak jakby obsługa krótkich
                    znaczników była aktywna.
                </para>
            </listitem>
        </itemizedlist>

        <note>
            <title>Alternatywna obsługa strumienia danych zmniejsza wydajność</title>

            <para>
                Użycie strumienia danych <emphasis>zmniejszy</emphasis> wydajność
                aplikacji, ale obecnie nie są dostępne testy które mogłyby pokazać
                jak bardzo zmniejszy. Zalecamy włączenie obsługi krótkich
                znaczników, konwersję skryptów widoków aby używały pełnych
                znaczników lub wprowadzenie dobrego buforowania części lub
                całości widoków.
            </para>
        </note>
    </sect2>

    <sect2 id="zend.view.introduction.accessors">
        <title>Narzędziowe metody dostępowe</title>

        <para>
            W większości przypadków będziesz używał tylko metod
            <code>assign()</code>, <code>render()</code>, lub jednej z metod
            do ustawiania/dodawania filtrów, klas helperów oraz ścieżek
            skryptów widoków. Jednak jeśli chcesz samodzielnie rozszerzyć klasę
            <code>Zend_View</code>, lub potrzebujesz dostępu do jej pewnych
            wewnętrznych funkcjonalności, to możesz użyć kilku istniejących
            metod dostępowych:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <code>getVars()</code> zwraca wszystkie przypisane zmienne.
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>clearVars()</code> wyczyści wszystkie przypisane
                    zmienne; użyteczne gdy chcesz ponownie użyć obiektu widoku,
                    ale chcesz zachować kontrolę nad tym, które zmienne mają
                    być dostępne.
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>getScriptPath($script)</code> zwraca ścieżkę dla
                    podanego skryptu widoku.
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>getScriptPaths()</code> zwraca wszystkie
                    zarejestrowane ścieżki skryptów widoków.
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>getHelperPath($helper)</code> zwraca ścieżkę dla
                    podanej klasy helpera.
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>getHelperPaths()</code> zwraca wszystkie
                    zarejestrowane ścieżki klas helperów.
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>getFilterPath($filter)</code> zwraca ścieżkę dla
                    podanej klasy filtra.
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>getFilterPaths()</code> zwraca wszystkie zarejestrowane
                    ścieżki klas filtrów.
                </para>
            </listitem>
        </itemizedlist>
    </sect2>
</sect1>