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