[ZF-10089] Zend_Log
[zend.git] / documentation / manual / pl / module_specs / Zend_View-Helpers.xml
blob9fe563de4ac2602598dfd422d9132890ab3b1bb1
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 21825 -->
3 <!-- Reviewed: no -->
4 <sect1 id="zend.view.helpers" xmlns:xi="http://www.w3.org/2001/XInclude">
6     <title>Klasy helperów</title>
8     <para>
9         W skryptach widoków często potrzebne jest przeprowadzanie złożonych
10         funkcji: na przykład formatowanie daty, generowanie elementów
11         formularzy, czy wyświetlanie odnośników akcji. Możesz użyć klas
12         helperów w tym celu.
13     </para>
15     <para>
16         Klasa helpera jest prostą klasą. Powiedzmy, że potrzebujemy klasę
17         helpera o nazwie 'fooBar'. Domyślnie nazwa klasy jest poprzedzona
18         przedrostkiem <code>'Zend_View_Helper_'</code> (możesz określić własny
19         przedrostek podczas ustawiania ścieżki do klas helperów), a ostatni
20         segment nazwy klasy jest nazwą klasy helpera; ten segment powinien
21         być w postaci TitleCapped; pełna nazwa klasy wygląda więc tak:
22         <code>Zend_View_Helper_FooBar</code>. Ta klasa powinna zawierać
23         przynajmniej jedną metodę, nazwaną tak jak klasa helpera, ale już w
24         postaci camelCased: <code>fooBar()</code>.
25     </para>
27     <note>
28         <title>Zwróć uwagę na wielkość liter</title>
29         <para>
30             Nazwy klas helperów są zawsze w postaci camelCased, czyli nigdy
31             nie zaczynają się wielką literą. Nazwa klasy jest w postaci
32             MixedCased, ale wywoływana metoda zawsze ma postać camelCased.
33         </para>
34     </note>
36     <note>
37         <title>Domyślne ścieżki helperów</title>
39         <para>
40             Domyślna ścieżka helperów zawsze wskazuje na ścieżkę helperów
41             widoków Zend Framework np., 'Zend/View/Helper/'. Nawet jeśli
42             wywołasz metodę <code>setHelperPath()</code> aby nadpisać istniejące
43             ścieżki, domyślna ścieżka zawsze będzie ustawiona aby być pewnym, że
44             domyślne helpery będą zawsze działać.
45         </para>
46     </note>
48     <para>
49         Aby użyć helpera w swoim skrypcie widoku, wywołaj go za pomocą
50         <code>$this->nazwaHelpera()</code>. Obiekt <code>Zend_View</code>
51         załaduje klasę <code>Zend_View_Helper_NazwaHelpera</code>, utworzy
52         obiekt tej klasy i wywoła metodę <code>nazwaHelpera()</code>.
53         Instancja obiektu istnieje teraz w instancji <code>Zend_View</code> i
54         będzie ona ponownie używana przy następnych wywołaniach
55         <code>$this->nazwaHelpera()</code>.
56     </para>
58     <sect2 id="zend.view.helpers.initial">
59         <title>Wbudowane klasy helperów</title>
61         <para>
62             <code>Zend_View</code> posiada wbudowany zbiór klas helperów, z
63             których większość odnosi się do generowania formularzy, a każda z
64             nich automatycznie filtruje dane wyjściowe. Dodatkowo dostępne są
65             klasy helperów służące do tworzenia adresów URL na podstawie tras,
66             do tworzenia list HTML oraz do deklarowania zmiennych. Obecnie
67             dostępne klasy helperów to:
68         </para>
70         <itemizedlist>
72             <listitem><para>
73                 <code>declareVars():</code> Głównie używana gdy używamy metody
74                 <code>strictVars()</code>, ta klasa helpera może być użyta
75                 do zadeklarowania zmiennych szablonu, które zostały ustawione
76                 lub nie, w obiekcie widoku. Możemy też użyć jej do ustawienia
77                 domyślnych wartości. Tablice przekazane do metody jako argumenty
78                 zostaną użyte do ustawienia domyślnych wartości; w przeciwnym
79                 razie, gdy zmienna nie istnieje, zostanie ustawiona jako pusty
80                 łańcuch znaków.
81             </para></listitem>
83             <listitem><para>
84                 <code>fieldset($name, $content, $attribs):</code> Tworzy element
85                 fieldset. Jeśli tablica <code>$attribs</code> zawiera
86                 klucz 'legend', ta wartość zostanie użyta jako legenda pola
87                 fieldset. Pole fieldset będzie zawierać zawartość przekazaną do
88                 tego helpera przez zmienną <code>$content</code>.
89             </para></listitem>
91             <listitem><para>
92                 <code>form($name, $attribs, $content):</code> Generuje formularz.
93                 Wszystkie atrybuty z tablicy <code>$attribs</code> będą
94                 zabezpieczone i renderowane jako atrybuty XHTML znacznika form.
95                 Jeśli przekazana jest zmienna <code>$content</code> i ma inną
96                 wartość niż false, to zawartość tej zmiennej zostanie
97                 renderowana wraz ze znacznikiem otwierającym i zamykającym
98                 formularz; jeśli zmienna <code>$content</code> ma wartość false
99                 (domyślnie), zostanie zrenderowany tylko znacznik otwierający.
100             </para></listitem>
102             <listitem><para>
103                 <code>formButton($name, $value, $attribs):</code> Tworzy element
104                 &lt;button /&gt;.
105             </para></listitem>
107             <listitem>
108                 <para>
109                     <code>formCheckbox($name, $value, $attribs,
110                         $options):</code> Tworzy element &lt;input type="checkbox"
111                     /&gt;.
112                 </para>
114                 <para>
115                     Domyślnie, jeśli zmienne $value oraz $options nie są
116                     przekazane, dla pola niezaznaczonego zostanie przyjęta
117                     wartość '0', a dla zaznaczonego wartość '1'.
118                     Jeśli zostanie przekazana zmienna $value, ale nie zostanie
119                     przekazana zmienna $options, dla pola zaznaczonego zostanie
120                     przyjęta wartość zmiennej $value.
121                 </para>
123                 <para>
124                     Zmienna $options powinna być tablicą. Jeśli tablica jest
125                     indeksowana, dla pola zaznaczonego zostanie przyjęta pierwsza
126                     wartość, a druga wartość dla pola niezaznaczonego; wszystkie
127                     inne wartości zostaną zignorowane. Możesz także przekazać
128                     tablicę asocjacyjną z kluczami 'checked' oraz 'unChecked'.
129                 </para>
131                 <para>
132                     Jeśli zmienna $options zostanie przekazana, a wartość
133                     $value jest równa wartości określonej dla pola zaznaczonego,
134                     to element zostanie zaznaczony. Możesz także określić czy
135                     element ma być zaznaczony przekazując logiczną wartość dla
136                     atrybutu 'checked'.
137                 </para>
139                 <para>
140                     Powyższe najlepiej podsumować za pomocą przykładów:
141                 </para>
143                 <programlisting role="php"><![CDATA[
144 // '1' oraz '0' jako opcje dla pola zaznaczonego/niezaznaczonego;
145 // pole jest niezaznaczone
146 echo $this->formCheckbox('foo');
148 // '1' oraz '0' jako opcje dla pola zaznaczonego/niezaznaczonego;
149 // pole jest zaznaczone
150 echo $this->formCheckbox('foo', null, array('checked' => true));
152 // 'bar' oraz '0' jako opcje dla pola zaznaczonego/niezaznaczonego;
153 // pole jest niezaznaczone
154 echo $this->formCheckbox('foo', 'bar');
156 // 'bar' oraz '0' jako opcje dla pola zaznaczonego/niezaznaczonego;
157 // pole jest zaznaczone
158 echo $this->formCheckbox('foo', 'bar', array('checked' => true));
160 // 'bar' oraz 'baz' jako opcje dla pola zaznaczonego/niezaznaczonego;
161 // pole jest niezaznaczone
162 echo $this->formCheckbox('foo', null, null, array('bar', 'baz');
164 // 'bar' oraz 'baz' jako opcje dla pola zaznaczonego/niezaznaczonego;
165 // pole jest niezaznaczone
166 echo $this->formCheckbox('foo', null, null, array(
167     'checked' => 'bar',
168     'unChecked' => 'baz'
171 // 'bar' oraz 'baz' jako opcje dla pola zaznaczonego/niezaznaczonego;
172 // pole jest zaznaczone
173 echo $this->formCheckbox('foo', 'bar', null, array('bar', 'baz');
174 echo $this->formCheckbox('foo',
175                          null,
176                          array('checked' => true),
177                          array('bar', 'baz');
179 // 'bar' oraz 'baz' jako opcje dla pola zaznaczonego/niezaznaczonego;
180 // pole jest niezaznaczone
181 echo $this->formCheckbox('foo', 'baz', null, array('bar', 'baz');
182 echo $this->formCheckbox('foo',
183                          null,
184                          array('checked' => false),
185                          array('bar', 'baz');
187                 </programlisting>
189                 <para>
190                     We wszystkich przypadkach zostanie dołączony ukryty element
191                     z wartością dla pola niezaznaczonego; w ten sposób uzyskamy
192                     pewność, że nawet jeśli pole nie będzie zaznaczone, to do
193                     formularza zostanie przekazana poprawna wartość.
194                 </para>
195             </listitem>
197             <listitem>
198                 <para>
199                     <code>formErrors($errors, $options):</code> Generuje listę
200                     nieuporządkowaną zawierająca informacje o błędach. Zmienna
201                     <code>$errors</code> powinna być łańcuchem znaków lub
202                     tablicą łańcuchów znaków; Zmienna <code>$options</code>
203                     powinna zawierać atrybuty jakie chcesz umieścić w znaczniku
204                     otwierającym listę.
205                 </para>
207                 <para>
208                     Możesz określić alternatywny sposób otwarcia, zamknięcia i
209                     oddzielania informacji o błędach wywołując metody helpera:
210                 </para>
212                 <itemizedlist>
213                     <listitem><para>
214                             <code>setElementStart($string)</code>; domyślną
215                             wartością jest '&lt;ul class="errors"%s"&gt;&lt;li&gt;', gdzie %s
216                             jest zastąpione atrybutami zdefiniowanymi w zmiennej
217                             <code>$options</code>.
218                     </para></listitem>
220                     <listitem><para>
221                             <code>setElementSeparator($string)</code>; domyślną
222                             wartością jest '&lt;/li&gt;&lt;li&gt;'.
223                     </para></listitem>
225                     <listitem><para>
226                             <code>setElementEnd($string)</code>; domyślną
227                             wartością jest '&lt;/li&gt;&lt;/ul&gt;'.
228                     </para></listitem>
229                 </itemizedlist>
230             </listitem>
232             <listitem><para>
233                 <code>formFile($name, $value, $attribs):</code> Tworzy element
234                 &lt;input type="file" /&gt;.
235             </para></listitem>
237             <listitem><para>
238                 <code>formHidden($name, $value, $attribs):</code> Tworzy element
239                 &lt;input type="hidden" /&gt;.
240             </para></listitem>
242             <listitem><para>
243                 <code>formLabel($name, $value, $attribs):</code> Tworzy element
244                 &lt;label&gt;, nadając atrybutowi <code>for</code> wartość
245                 zmiennej <code>$name</code> i ustawiając jako etykietę wartość
246                 zmiennej <code>$value</code>.
247                 Jeśli opcja <code>disable</code> zostanie przekazana w zmiennej
248                 <code>$attribs</code>, żaden kod nie zostanie zwrócony.
249             </para></listitem>
251             <listitem><para>
252                 <code>formMultiCheckbox($name, $value, $attribs, $options,
253                 $listsep):</code> Tworzy listę elementów checkbox. Zmienna
254                 <code>$options</code> powinna być asocjacyjną tablicą, i może
255                 mieć dowolne rozmiary. Zmienna <code>$value</code> może być
256                 pojedynczą wartością lub tablicą wartości, które odpowiadają
257                 kluczom tablicy <code>$options</code>. Zmienna
258                 <code>$listsep</code> jest separatorem elementów, domyślnie ma
259                 wartość &lt;br /&gt;. Domyślnie ten element jest traktowany jako
260                 tablica; wszystkie pola mają te samą nazwę i będą wysłane jako
261                 tablica.
262             </para></listitem>
264             <listitem><para>
265                 <code>formPassword($name, $value, $attribs):</code> Tworzy
266                 element &lt;input type="password" /&gt;.
267             </para></listitem>
269             <listitem><para>
270                 <code>formRadio($name, $value, $attribs, $options):</code>
271                 Tworzy serię elementów &lt;input type="radio" /&gt;, po jednym
272                 dla każdego elementu tablicy $options. W tablicy $options, klucz
273                 jest wartością przycisku radio, a wartość elementu tablicy
274                 jest etykietą przycisku radio. Zmienna $value określa wartość
275                 przycisku, który ma być początkowo zaznaczony.
276             </para></listitem>
278             <listitem><para>
279                 <code>formReset($name, $value, $attribs):</code> Tworzy element
280                 &lt;input type="reset" /&gt;.
281             </para></listitem>
283             <listitem><para>
284                 <code>formSelect($name, $value, $attribs, $options):</code>
285                 Tworzy blok &lt;select&gt;...&lt;/select&gt;, z elementami
286                 &lt;option&gt; po jednym dla każdego elementu tablicy $options.
287                 W tablicy $options klucz jest wartością elementu, a wartość
288                 jest etykietą. Zmienna $value określa wartość elementu (lub
289                 elementów), który ma być początkowo zaznaczony.
290             </para></listitem>
292             <listitem><para>
293                 <code>formSubmit($name, $value, $attribs):</code> Tworzy element
294                 &lt;input type="submit" /&gt;.
295             </para></listitem>
297             <listitem><para>
298                 <code>formText($name, $value, $attribs):</code> Tworzy element
299                 &lt;input type="text" /&gt;.
300             </para></listitem>
302             <listitem><para>
303                 <code>formTextarea($name, $value, $attribs):</code> Tworzy
304                 element &lt;textarea&gt;...&lt;/textarea&gt;.
305             </para></listitem>
307             <listitem><para>
308                 <code>url($urlOptions, $name, $reset):</code> Tworzy adres URL
309                 na podstawie nazwy trasy. Parametr <code>$urlOptions</code>
310                 powinien być tablicą asocjacyjną zawierającą pary klucz/wartość
311                 używane przez daną trasę.
312             </para></listitem>
314             <listitem><para>
315                 <code>htmlList($items, $ordered, $attribs, $escape):</code> generuje
316                 uporządkowane oraz nieuporządkowane listy na podstawie
317                 przekazanego do niej parametru <code>$items</code>.
318                 Jeśli parametr <code>$items</code> jest wielowymiarową tablicą,
319                 zostanie zbudowana lista zagnieżdżona. Jeśli flaga <code>$escape</code>
320                 ma wartość true (domyślnie), każdy z elementów zostanie
321                 zabezpieczony za pomocą mechanizmu zarejestrowanego w obiekcie
322                 widoku; przekaż wartość false aby zezwolić na wyświetlanie kodu
323                 html wewnątrz elementów list.
324             </para></listitem>
326         </itemizedlist>
328         <para>
329             Użycie tych metod w Twoim skrypcie jest bardzo łatwe, poniżej
330             znajduje się przykład. Zauważ, że wszystko czego potrzebujesz
331             to wywołanie tych metod; załadowanie ich i utworzenie instancji
332             odbędzie się automatycznie.
333         </para>
335         <programlisting role="php"><![CDATA[
336 // wewnątrz skryptu widoku, $this odnosi się do instancji Zend_View.
338 // załóżmy, że już przypisałeś serię elementów opcji jako tablicę
339 // o nazwie $countries = array('us' => 'United States', 'il' =>
340 // 'Israel', 'de' => 'Germany').
342 <form action="action.php" method="post">
343     <p><label>Adres Email:
344 <?php echo $this->formText('email', 'you@example.com', array('size' => 32)) ?>
345     </label></p>
346     <p><label>Kraj:
347 <?php echo $this->formSelect('country', 'us', null, $this->countries) ?>
348     </label></p>
349     <p><label>Czy zgadzasz się?
350 <?php echo $this->formCheckbox('opt_in', 'yes', null, array('yes', 'no')) ?>
351     </label></p>
352 </form>
354         </programlisting>
356         <para>
357             Rezultat wyglądałby w ten sposób:
358         </para>
360         <programlisting role="php"><![CDATA[
361 <form action="action.php" method="post">
362     <p><label>Adres Email:
363         <input type="text" name="email" value="you@example.com" size="32" />
364     </label></p>
365     <p><label>Kraj:
366         <select name="country">
367             <option value="us" selected="selected">United States</option>
368             <option value="il">Israel</option>
369             <option value="de">Germany</option>
370         </select>
371     </label></p>
372     <p><label>Czy zgadzasz się?
373         <input type="hidden" name="opt_in" value="no" />
374         <input type="checkbox" name="opt_in" value="yes" checked="checked" />
375     </label></p>
376 </form>
378         </programlisting>
380         <xi:include href="Zend_View-Helpers-Action.xml">
381             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Action.xml" /></xi:fallback>
382         </xi:include>
383         <xi:include href="Zend_View-Helpers-Partial.xml">
384             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Partial.xml" /></xi:fallback>
385         </xi:include>
386         <xi:include href="Zend_View-Helpers-Placeholder.xml">
387             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Placeholder.xml" /></xi:fallback>
388         </xi:include>
389         <xi:include href="Zend_View-Helpers-Doctype.xml">
390             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Doctype.xml" /></xi:fallback>
391         </xi:include>
392         <xi:include href="Zend_View-Helpers-HeadLink.xml">
393             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadLink.xml" /></xi:fallback>
394         </xi:include>
395         <xi:include href="Zend_View-Helpers-HeadMeta.xml">
396             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadMeta.xml" /></xi:fallback>
397         </xi:include>
398         <xi:include href="Zend_View-Helpers-HeadScript.xml">
399             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadScript.xml" /></xi:fallback>
400         </xi:include>
401         <xi:include href="Zend_View-Helpers-HeadStyle.xml">
402             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadStyle.xml" /></xi:fallback>
403         </xi:include>
404         <xi:include href="Zend_View-Helpers-HeadTitle.xml">
405             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadTitle.xml" /></xi:fallback>
406         </xi:include>
407         <xi:include href="Zend_View-Helpers-HtmlObject.xml">
408             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HtmlObject.xml" /></xi:fallback>
409         </xi:include>
410         <xi:include href="Zend_View-Helpers-InlineScript.xml">
411             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-InlineScript.xml" /></xi:fallback>
412         </xi:include>
413         <xi:include href="Zend_View-Helpers-Json.xml">
414             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Json.xml" /></xi:fallback>
415         </xi:include>
416         <xi:include href="Zend_View-Helpers-Translate.xml">
417             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Translate.xml" /></xi:fallback>
418         </xi:include>
420     </sect2>
422     <sect2 id="zend.view.helpers.paths">
424         <title>Ścieżki klas helperów</title>
426         <para>
427             Tak jak ze skryptami widoków, kontroler może określić stos ścieżek,
428             w których <code>Zend_View</code> ma szukać klas helperów.
429             Domyślnie <code>Zend_View</code> szuka klas helperów w katalogu
430             "Zend/View/Helper/*". Możesz wybrać inny katalog używając metod
431             <code>setHelperPath()</code> oraz <code>addHelperPath()</code>.
432             Dodatkowo możesz określić przedrostek klas helperów znajdujących
433             się w podanej ścieżce aby utworzyć przestrzenie nazw dla klas
434             helperów. Domyślnie, gdy żaden przedrostek nie zostanie określony,
435             przyjęty zostanie przedrostek 'Zend_View_Helper_'.
436         </para>
438         <programlisting role="php"><![CDATA[
439 $view = new Zend_View();
440 // Ustaw ścieżkę na /path/to/more/helpers, z przedrostkiem 'My_View_Helper'
441 $view->setHelperPath('/path/to/more/helpers', 'My_View_Helper');
443         </programlisting>
445         <para>
446             Oczywiście możesz dodawać ścieżki na stos używając metody
447             <code>addHelperPath()</code>. Gdy dodajesz ścieżki na stos,
448             <code>Zend_View</code> będzie szukać klasy helpera począwszy od
449             ostatnio dodanej ścieżki. To pozwala na dodanie (lub nawet
450             nadpisanie) podstawowego pakietu klas helperów swoimi własnymi
451             klasami.
452         </para>
454         <programlisting role="php"><![CDATA[
455 $view = new Zend_View();
457 // Dodaj ścieżkę /path/to/some/helpers z przedrostkiem
458 // klasy 'My_View_Helper'
459 $view->addHelperPath('/path/to/some/helpers', 'My_View_Helper');
461 // Dodaj ścieżkę /other/path/to/helpers z przedrostkiem
462 // klasy 'Your_View_Helper'
463 $view->addHelperPath('/other/path/to/helpers', 'Your_View_Helper');
465 // teraz kiedy wywołasz $this->helperName(), Zend_View będzie
466 // wpierw szukał w "/path/to/some/helpers/HelperName" używając
467 // nazwy klasy "Your_View_Helper_HelperName",
468 // następnie w "/other/path/to/helpers/HelperName.php" używając
469 // nazwy klasy "My_View_Helper_HelperName"
470 // i ostatecznie w "Zend/View/Helper/HelperName.php" używając
471 // nazwy klasy "Zend_View_Helper_HelperName".
473         </programlisting>
475     </sect2>
477     <sect2 id="zend.view.helpers.custom">
479         <title>Pisanie własnych klas helperów</title>
481         <para>
482             Pisanie własnych klas helperów jest łatwe; po prostu pisz według
483             poniższych zasad:
484         </para>
486         <itemizedlist>
488             <listitem><para>
489                 Minimalna nazwa klasy musi kończyć się nazwą helpera przy
490                 użyciu MixedCaps. Przykładowo, jeśli piszesz klasę helpera
491                 zwaną "twojHelper", minimalną nazwą klasy musi być
492                 "TwojHelper". Możesz, a nawet powinieneś nadać nazwie klasy
493                 przedrostek i jest zalecane, abyś użył 'View_Helper' jako
494                 części przedrostka: "My_View_Helper_TwojHelper". (Przedrostek
495                 będziesz musiał przekazać wraz z końcowym znakiem podkreślenia
496                 lub bez niego, do metod <code>addHelperPath()</code> oraz
497                 <code>setHelperPath()</code>).
498             </para></listitem>
500             <listitem><para>
501                 Nazwa klasy musi przynajmniej składać się z nazwy helpera,
502                 używając formy MixedCaps. Np. jeśli tworzysz helper nazwany
503                 "twojHelper", nazwą klasy musi być przynajmniej "TwojHelper".
504                 Możesz, a nawet powinieneś dać nazwie klasy przedrostek i jest
505                 zalecane aby znalazła się w nim część 'View_Helper' aby cała
506                 nazwa klasy wyglądała mniej więcej tak: "My_View_Helper_TwojHelper".
507                 (Będziesz musiał przekazać ten przedrostek, ze końcowym znakiem
508                 podkreślenia lub bez, do jednej z metod <code>addHelperPath()</code>
509                 lub <code>setHelperPath()</code>).
510             </para></listitem>
512             <listitem><para>
513                 Klasa musi posiadać publiczną metodę która jest taka jak nazwa
514                 helpera; jest to metoda która zostanie wywołana gdy skrypt
515                 widoku wywoła "$this->twojHelper()". W przykładzie helpera
516                 "twojHelper", wymaganą deklaracją metody powinno być
517                 "public function twojHelper()".
518             </para></listitem>
520             <listitem><para>
521                 Klasa nie powinna wyświetlać ani w inny sposób generować danych
522                 wyjściowych. Zamiast tego powinna zwrócić dane do wyświetlenia.
523                 Zwracane wartości powinny być odpowiednio przefiltrowane.
524             </para></listitem>
526             <listitem><para>
527                 Klasa musi znajdować się w pliku odpowiednio do nazwy metody
528                 helpera. Przykładowo dla helpera o nazwie "twojHelper",
529                 plik powinien nazywać się "TwojHelper.php".
530             </para></listitem>
531         </itemizedlist>
533         <para>
534             Umieść plik klasy helpera w katalogu który był dodany do stosu
535             ścieżek, a <code>Zend_View</code> automatycznie załaduje klasę,
536             utworzy instancję, i uruchomi metodę.
537         </para>
539         <para>
540             Poniżej przykład kodu naszego przykładowego helpera
541             <code>twojHelper</code>:
542         </para>
544         <programlisting role="php"><![CDATA[
545 class My_View_Helper_TwojHelper extends Zend_View_Helper_Abstract
547     protected $_count = 0;
548     public function twojHelper()
549     {
550         $this->_count++;
551         $output = "I have seen 'The Jerk' {$this->_count} time(s).";
552         return htmlspecialchars($output);
553     }
556         </programlisting>
558         <para>
559             Teraz w skrypcie widoku możesz wywołać helpera
560             <code>TwojHelper</code> tyle razy ile zechcesz; instancja zostanie
561             utworzona raz i będzie ona istniała przez cały okres istnienia
562             instancji <code>Zend_View</code>.
563         </para>
565         <programlisting role="php"><![CDATA[
566 // pamiętaj, że w skrypcie widoku $this odnosi się do instancji Zend_View.
567 echo $this->twojHelper();
568 echo $this->twojHelper();
569 echo $this->twojHelper();
571         </programlisting>
573         <para>
574             Dane wyjściowe wyglądałyby w ten sposób:
575         </para>
576         <programlisting role="php"><![CDATA[
577 I have seen 'The Jerk' 1 time(s).
578 I have seen 'The Jerk' 2 time(s).
579 I have seen 'The Jerk' 3 time(s).
581         </programlisting>
583         <para>
584             Czasem możesz potrzebować uzyskać dostęp do obiektu
585             <code>Zend_View</code> -- na przykład, jeśli potrzebujesz użyć
586             zarejestrowanego kodowania, lub chcesz renderować inny skrypt
587             widoku jako część klasy helpera. Aby uzyskać dostęp do obiektu
588             widoku, klasa helpera powinna posiadać metodę
589             <code>setView($view)</code>, tak jak poniżej:
590         </para>
592         <programlisting role="php"><![CDATA[
593 class My_View_Helper_ScriptPath
595     public $view;
597     public function setView(Zend_View_Interface $view)
598     {
599         $this->view = $view;
600     }
602     public function scriptPath($script)
603     {
604         return $this->view->getScriptPath($script);
605     }
608         </programlisting>
610         <para>
611             Jeśli twoja klasa helpera posiada metodę <code>setView()</code>,
612             będzie ona wywołana wtedy, gdy po raz pierwszy zostanie utworzona
613             instancja klasy helpera i przekazany zostanie obecny obiekt
614             widoku. Jest to po to, aby przechować obiekt widoku w klasie helpera,
615             a także po to, aby określić w jaki sposób powinno się uzyskiwać do
616             tego obiektu dostęp.
617         </para>
619         <para>
620             Jeśli rozszerzasz klasę <code>Zend_View_Helper_Abstract</code>
621             nie musisz definiować tej metody, ponieważ jest ona zdefiniowana
622             przez klasę rozszerzaną.
623         </para>
624     </sect2>
625 </sect1>