| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 21825 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.view.helpers" xmlns:xi="http://www.w3.org/2001/XInclude">
- <title>Klasy helperów</title>
- <para>
- W skryptach widoków często potrzebne jest przeprowadzanie złożonych
- funkcji: na przykład formatowanie daty, generowanie elementów
- formularzy, czy wyświetlanie odnośników akcji. Możesz użyć klas
- helperów w tym celu.
- </para>
- <para>
- Klasa helpera jest prostą klasą. Powiedzmy, że potrzebujemy klasę
- helpera o nazwie 'fooBar'. Domyślnie nazwa klasy jest poprzedzona
- przedrostkiem <code>'Zend_View_Helper_'</code> (możesz określić własny
- przedrostek podczas ustawiania ścieżki do klas helperów), a ostatni
- segment nazwy klasy jest nazwą klasy helpera; ten segment powinien
- być w postaci TitleCapped; pełna nazwa klasy wygląda więc tak:
- <code>Zend_View_Helper_FooBar</code>. Ta klasa powinna zawierać
- przynajmniej jedną metodę, nazwaną tak jak klasa helpera, ale już w
- postaci camelCased: <code>fooBar()</code>.
- </para>
- <note>
- <title>Zwróć uwagę na wielkość liter</title>
- <para>
- Nazwy klas helperów są zawsze w postaci camelCased, czyli nigdy
- nie zaczynają się wielką literą. Nazwa klasy jest w postaci
- MixedCased, ale wywoływana metoda zawsze ma postać camelCased.
- </para>
- </note>
- <note>
- <title>Domyślne ścieżki helperów</title>
- <para>
- Domyślna ścieżka helperów zawsze wskazuje na ścieżkę helperów
- widoków Zend Framework np., 'Zend/View/Helper/'. Nawet jeśli
- wywołasz metodę <code>setHelperPath()</code> aby nadpisać istniejące
- ścieżki, domyślna ścieżka zawsze będzie ustawiona aby być pewnym, że
- domyślne helpery będą zawsze działać.
- </para>
- </note>
- <para>
- Aby użyć helpera w swoim skrypcie widoku, wywołaj go za pomocą
- <code>$this->nazwaHelpera()</code>. Obiekt <code>Zend_View</code>
- załaduje klasę <code>Zend_View_Helper_NazwaHelpera</code>, utworzy
- obiekt tej klasy i wywoła metodę <code>nazwaHelpera()</code>.
- Instancja obiektu istnieje teraz w instancji <code>Zend_View</code> i
- będzie ona ponownie używana przy następnych wywołaniach
- <code>$this->nazwaHelpera()</code>.
- </para>
- <sect2 id="zend.view.helpers.initial">
- <title>Wbudowane klasy helperów</title>
- <para>
- <code>Zend_View</code> posiada wbudowany zbiór klas helperów, z
- których większość odnosi się do generowania formularzy, a każda z
- nich automatycznie filtruje dane wyjściowe. Dodatkowo dostępne są
- klasy helperów służące do tworzenia adresów URL na podstawie tras,
- do tworzenia list HTML oraz do deklarowania zmiennych. Obecnie
- dostępne klasy helperów to:
- </para>
- <itemizedlist>
- <listitem><para>
- <code>declareVars():</code> Głównie używana gdy używamy metody
- <code>strictVars()</code>, ta klasa helpera może być użyta
- do zadeklarowania zmiennych szablonu, które zostały ustawione
- lub nie, w obiekcie widoku. Możemy też użyć jej do ustawienia
- domyślnych wartości. Tablice przekazane do metody jako argumenty
- zostaną użyte do ustawienia domyślnych wartości; w przeciwnym
- razie, gdy zmienna nie istnieje, zostanie ustawiona jako pusty
- łańcuch znaków.
- </para></listitem>
- <listitem><para>
- <code>fieldset($name, $content, $attribs):</code> Tworzy element
- fieldset. Jeśli tablica <code>$attribs</code> zawiera
- klucz 'legend', ta wartość zostanie użyta jako legenda pola
- fieldset. Pole fieldset będzie zawierać zawartość przekazaną do
- tego helpera przez zmienną <code>$content</code>.
- </para></listitem>
- <listitem><para>
- <code>form($name, $attribs, $content):</code> Generuje formularz.
- Wszystkie atrybuty z tablicy <code>$attribs</code> będą
- zabezpieczone i renderowane jako atrybuty XHTML znacznika form.
- Jeśli przekazana jest zmienna <code>$content</code> i ma inną
- wartość niż false, to zawartość tej zmiennej zostanie
- renderowana wraz ze znacznikiem otwierającym i zamykającym
- formularz; jeśli zmienna <code>$content</code> ma wartość false
- (domyślnie), zostanie zrenderowany tylko znacznik otwierający.
- </para></listitem>
- <listitem><para>
- <code>formButton($name, $value, $attribs):</code> Tworzy element
- <button />.
- </para></listitem>
- <listitem>
- <para>
- <code>formCheckbox($name, $value, $attribs,
- $options):</code> Tworzy element <input type="checkbox"
- />.
- </para>
- <para>
- Domyślnie, jeśli zmienne $value oraz $options nie są
- przekazane, dla pola niezaznaczonego zostanie przyjęta
- wartość '0', a dla zaznaczonego wartość '1'.
- Jeśli zostanie przekazana zmienna $value, ale nie zostanie
- przekazana zmienna $options, dla pola zaznaczonego zostanie
- przyjęta wartość zmiennej $value.
- </para>
- <para>
- Zmienna $options powinna być tablicą. Jeśli tablica jest
- indeksowana, dla pola zaznaczonego zostanie przyjęta pierwsza
- wartość, a druga wartość dla pola niezaznaczonego; wszystkie
- inne wartości zostaną zignorowane. Możesz także przekazać
- tablicę asocjacyjną z kluczami 'checked' oraz 'unChecked'.
- </para>
- <para>
- Jeśli zmienna $options zostanie przekazana, a wartość
- $value jest równa wartości określonej dla pola zaznaczonego,
- to element zostanie zaznaczony. Możesz także określić czy
- element ma być zaznaczony przekazując logiczną wartość dla
- atrybutu 'checked'.
- </para>
- <para>
- Powyższe najlepiej podsumować za pomocą przykładów:
- </para>
- <programlisting role="php"><![CDATA[
- // '1' oraz '0' jako opcje dla pola zaznaczonego/niezaznaczonego;
- // pole jest niezaznaczone
- echo $this->formCheckbox('foo');
- // '1' oraz '0' jako opcje dla pola zaznaczonego/niezaznaczonego;
- // pole jest zaznaczone
- echo $this->formCheckbox('foo', null, array('checked' => true));
- // 'bar' oraz '0' jako opcje dla pola zaznaczonego/niezaznaczonego;
- // pole jest niezaznaczone
- echo $this->formCheckbox('foo', 'bar');
- // 'bar' oraz '0' jako opcje dla pola zaznaczonego/niezaznaczonego;
- // pole jest zaznaczone
- echo $this->formCheckbox('foo', 'bar', array('checked' => true));
- // 'bar' oraz 'baz' jako opcje dla pola zaznaczonego/niezaznaczonego;
- // pole jest niezaznaczone
- echo $this->formCheckbox('foo', null, null, array('bar', 'baz');
- // 'bar' oraz 'baz' jako opcje dla pola zaznaczonego/niezaznaczonego;
- // pole jest niezaznaczone
- echo $this->formCheckbox('foo', null, null, array(
- 'checked' => 'bar',
- 'unChecked' => 'baz'
- ));
- // 'bar' oraz 'baz' jako opcje dla pola zaznaczonego/niezaznaczonego;
- // pole jest zaznaczone
- echo $this->formCheckbox('foo', 'bar', null, array('bar', 'baz');
- echo $this->formCheckbox('foo',
- null,
- array('checked' => true),
- array('bar', 'baz');
- // 'bar' oraz 'baz' jako opcje dla pola zaznaczonego/niezaznaczonego;
- // pole jest niezaznaczone
- echo $this->formCheckbox('foo', 'baz', null, array('bar', 'baz');
- echo $this->formCheckbox('foo',
- null,
- array('checked' => false),
- array('bar', 'baz');
- ]]>
- </programlisting>
- <para>
- We wszystkich przypadkach zostanie dołączony ukryty element
- z wartością dla pola niezaznaczonego; w ten sposób uzyskamy
- pewność, że nawet jeśli pole nie będzie zaznaczone, to do
- formularza zostanie przekazana poprawna wartość.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>formErrors($errors, $options):</code> Generuje listę
- nieuporządkowaną zawierająca informacje o błędach. Zmienna
- <code>$errors</code> powinna być łańcuchem znaków lub
- tablicą łańcuchów znaków; Zmienna <code>$options</code>
- powinna zawierać atrybuty jakie chcesz umieścić w znaczniku
- otwierającym listę.
- </para>
- <para>
- Możesz określić alternatywny sposób otwarcia, zamknięcia i
- oddzielania informacji o błędach wywołując metody helpera:
- </para>
- <itemizedlist>
- <listitem><para>
- <code>setElementStart($string)</code>; domyślną
- wartością jest '<ul class="errors"%s"><li>', gdzie %s
- jest zastąpione atrybutami zdefiniowanymi w zmiennej
- <code>$options</code>.
- </para></listitem>
- <listitem><para>
- <code>setElementSeparator($string)</code>; domyślną
- wartością jest '</li><li>'.
- </para></listitem>
- <listitem><para>
- <code>setElementEnd($string)</code>; domyślną
- wartością jest '</li></ul>'.
- </para></listitem>
- </itemizedlist>
- </listitem>
- <listitem><para>
- <code>formFile($name, $value, $attribs):</code> Tworzy element
- <input type="file" />.
- </para></listitem>
- <listitem><para>
- <code>formHidden($name, $value, $attribs):</code> Tworzy element
- <input type="hidden" />.
- </para></listitem>
- <listitem><para>
- <code>formLabel($name, $value, $attribs):</code> Tworzy element
- <label>, nadając atrybutowi <code>for</code> wartość
- zmiennej <code>$name</code> i ustawiając jako etykietę wartość
- zmiennej <code>$value</code>.
- Jeśli opcja <code>disable</code> zostanie przekazana w zmiennej
- <code>$attribs</code>, żaden kod nie zostanie zwrócony.
- </para></listitem>
- <listitem><para>
- <code>formMultiCheckbox($name, $value, $attribs, $options,
- $listsep):</code> Tworzy listę elementów checkbox. Zmienna
- <code>$options</code> powinna być asocjacyjną tablicą, i może
- mieć dowolne rozmiary. Zmienna <code>$value</code> może być
- pojedynczą wartością lub tablicą wartości, które odpowiadają
- kluczom tablicy <code>$options</code>. Zmienna
- <code>$listsep</code> jest separatorem elementów, domyślnie ma
- wartość <br />. Domyślnie ten element jest traktowany jako
- tablica; wszystkie pola mają te samą nazwę i będą wysłane jako
- tablica.
- </para></listitem>
- <listitem><para>
- <code>formPassword($name, $value, $attribs):</code> Tworzy
- element <input type="password" />.
- </para></listitem>
- <listitem><para>
- <code>formRadio($name, $value, $attribs, $options):</code>
- Tworzy serię elementów <input type="radio" />, po jednym
- dla każdego elementu tablicy $options. W tablicy $options, klucz
- jest wartością przycisku radio, a wartość elementu tablicy
- jest etykietą przycisku radio. Zmienna $value określa wartość
- przycisku, który ma być początkowo zaznaczony.
- </para></listitem>
- <listitem><para>
- <code>formReset($name, $value, $attribs):</code> Tworzy element
- <input type="reset" />.
- </para></listitem>
- <listitem><para>
- <code>formSelect($name, $value, $attribs, $options):</code>
- Tworzy blok <select>...</select>, z elementami
- <option> po jednym dla każdego elementu tablicy $options.
- W tablicy $options klucz jest wartością elementu, a wartość
- jest etykietą. Zmienna $value określa wartość elementu (lub
- elementów), który ma być początkowo zaznaczony.
- </para></listitem>
- <listitem><para>
- <code>formSubmit($name, $value, $attribs):</code> Tworzy element
- <input type="submit" />.
- </para></listitem>
- <listitem><para>
- <code>formText($name, $value, $attribs):</code> Tworzy element
- <input type="text" />.
- </para></listitem>
- <listitem><para>
- <code>formTextarea($name, $value, $attribs):</code> Tworzy
- element <textarea>...</textarea>.
- </para></listitem>
- <listitem><para>
- <code>url($urlOptions, $name, $reset):</code> Tworzy adres URL
- na podstawie nazwy trasy. Parametr <code>$urlOptions</code>
- powinien być tablicą asocjacyjną zawierającą pary klucz/wartość
- używane przez daną trasę.
- </para></listitem>
- <listitem><para>
- <code>htmlList($items, $ordered, $attribs, $escape):</code> generuje
- uporządkowane oraz nieuporządkowane listy na podstawie
- przekazanego do niej parametru <code>$items</code>.
- Jeśli parametr <code>$items</code> jest wielowymiarową tablicą,
- zostanie zbudowana lista zagnieżdżona. Jeśli flaga <code>$escape</code>
- ma wartość true (domyślnie), każdy z elementów zostanie
- zabezpieczony za pomocą mechanizmu zarejestrowanego w obiekcie
- widoku; przekaż wartość false aby zezwolić na wyświetlanie kodu
- html wewnątrz elementów list.
- </para></listitem>
- </itemizedlist>
- <para>
- Użycie tych metod w Twoim skrypcie jest bardzo łatwe, poniżej
- znajduje się przykład. Zauważ, że wszystko czego potrzebujesz
- to wywołanie tych metod; załadowanie ich i utworzenie instancji
- odbędzie się automatycznie.
- </para>
- <programlisting role="php"><![CDATA[
- // wewnątrz skryptu widoku, $this odnosi się do instancji Zend_View.
- //
- // załóżmy, że już przypisałeś serię elementów opcji jako tablicę
- // o nazwie $countries = array('us' => 'United States', 'il' =>
- // 'Israel', 'de' => 'Germany').
- ?>
- <form action="action.php" method="post">
- <p><label>Adres Email:
- <?php echo $this->formText('email', 'you@example.com', array('size' => 32)) ?>
- </label></p>
- <p><label>Kraj:
- <?php echo $this->formSelect('country', 'us', null, $this->countries) ?>
- </label></p>
- <p><label>Czy zgadzasz się?
- <?php echo $this->formCheckbox('opt_in', 'yes', null, array('yes', 'no')) ?>
- </label></p>
- </form>
- ]]>
- </programlisting>
- <para>
- Rezultat wyglądałby w ten sposób:
- </para>
- <programlisting role="php"><![CDATA[
- <form action="action.php" method="post">
- <p><label>Adres Email:
- <input type="text" name="email" value="you@example.com" size="32" />
- </label></p>
- <p><label>Kraj:
- <select name="country">
- <option value="us" selected="selected">United States</option>
- <option value="il">Israel</option>
- <option value="de">Germany</option>
- </select>
- </label></p>
- <p><label>Czy zgadzasz się?
- <input type="hidden" name="opt_in" value="no" />
- <input type="checkbox" name="opt_in" value="yes" checked="checked" />
- </label></p>
- </form>
- ]]>
- </programlisting>
- <xi:include href="Zend_View-Helpers-Action.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Action.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-Partial.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Partial.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-Placeholder.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Placeholder.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-Doctype.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Doctype.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-HeadLink.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadLink.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-HeadMeta.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadMeta.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-HeadScript.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadScript.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-HeadStyle.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadStyle.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-HeadTitle.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadTitle.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-HtmlObject.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HtmlObject.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-InlineScript.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-InlineScript.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-Json.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Json.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-Translate.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Translate.xml" /></xi:fallback>
- </xi:include>
- </sect2>
- <sect2 id="zend.view.helpers.paths">
- <title>Ścieżki klas helperów</title>
- <para>
- Tak jak ze skryptami widoków, kontroler może określić stos ścieżek,
- w których <code>Zend_View</code> ma szukać klas helperów.
- Domyślnie <code>Zend_View</code> szuka klas helperów w katalogu
- "Zend/View/Helper/*". Możesz wybrać inny katalog używając metod
- <code>setHelperPath()</code> oraz <code>addHelperPath()</code>.
- Dodatkowo możesz określić przedrostek klas helperów znajdujących
- się w podanej ścieżce aby utworzyć przestrzenie nazw dla klas
- helperów. Domyślnie, gdy żaden przedrostek nie zostanie określony,
- przyjęty zostanie przedrostek 'Zend_View_Helper_'.
- </para>
- <programlisting role="php"><![CDATA[
- $view = new Zend_View();
- // Ustaw ścieżkę na /path/to/more/helpers, z przedrostkiem 'My_View_Helper'
- $view->setHelperPath('/path/to/more/helpers', 'My_View_Helper');
- ]]>
- </programlisting>
- <para>
- Oczywiście możesz dodawać ścieżki na stos używając metody
- <code>addHelperPath()</code>. Gdy dodajesz ścieżki na stos,
- <code>Zend_View</code> będzie szukać klasy helpera począwszy od
- ostatnio dodanej ścieżki. To pozwala na dodanie (lub nawet
- nadpisanie) podstawowego pakietu klas helperów swoimi własnymi
- klasami.
- </para>
- <programlisting role="php"><![CDATA[
- $view = new Zend_View();
- // Dodaj ścieżkę /path/to/some/helpers z przedrostkiem
- // klasy 'My_View_Helper'
- $view->addHelperPath('/path/to/some/helpers', 'My_View_Helper');
- // Dodaj ścieżkę /other/path/to/helpers z przedrostkiem
- // klasy 'Your_View_Helper'
- $view->addHelperPath('/other/path/to/helpers', 'Your_View_Helper');
- // teraz kiedy wywołasz $this->helperName(), Zend_View będzie
- // wpierw szukał w "/path/to/some/helpers/HelperName" używając
- // nazwy klasy "Your_View_Helper_HelperName",
- // następnie w "/other/path/to/helpers/HelperName.php" używając
- // nazwy klasy "My_View_Helper_HelperName"
- // i ostatecznie w "Zend/View/Helper/HelperName.php" używając
- // nazwy klasy "Zend_View_Helper_HelperName".
- ]]>
- </programlisting>
- </sect2>
- <sect2 id="zend.view.helpers.custom">
- <title>Pisanie własnych klas helperów</title>
- <para>
- Pisanie własnych klas helperów jest łatwe; po prostu pisz według
- poniższych zasad:
- </para>
- <itemizedlist>
- <listitem><para>
- Minimalna nazwa klasy musi kończyć się nazwą helpera przy
- użyciu MixedCaps. Przykładowo, jeśli piszesz klasę helpera
- zwaną "twojHelper", minimalną nazwą klasy musi być
- "TwojHelper". Możesz, a nawet powinieneś nadać nazwie klasy
- przedrostek i jest zalecane, abyś użył 'View_Helper' jako
- części przedrostka: "My_View_Helper_TwojHelper". (Przedrostek
- będziesz musiał przekazać wraz z końcowym znakiem podkreślenia
- lub bez niego, do metod <code>addHelperPath()</code> oraz
- <code>setHelperPath()</code>).
- </para></listitem>
- <listitem><para>
- Nazwa klasy musi przynajmniej składać się z nazwy helpera,
- używając formy MixedCaps. Np. jeśli tworzysz helper nazwany
- "twojHelper", nazwą klasy musi być przynajmniej "TwojHelper".
- Możesz, a nawet powinieneś dać nazwie klasy przedrostek i jest
- zalecane aby znalazła się w nim część 'View_Helper' aby cała
- nazwa klasy wyglądała mniej więcej tak: "My_View_Helper_TwojHelper".
- (Będziesz musiał przekazać ten przedrostek, ze końcowym znakiem
- podkreślenia lub bez, do jednej z metod <code>addHelperPath()</code>
- lub <code>setHelperPath()</code>).
- </para></listitem>
- <listitem><para>
- Klasa musi posiadać publiczną metodę która jest taka jak nazwa
- helpera; jest to metoda która zostanie wywołana gdy skrypt
- widoku wywoła "$this->twojHelper()". W przykładzie helpera
- "twojHelper", wymaganą deklaracją metody powinno być
- "public function twojHelper()".
- </para></listitem>
- <listitem><para>
- Klasa nie powinna wyświetlać ani w inny sposób generować danych
- wyjściowych. Zamiast tego powinna zwrócić dane do wyświetlenia.
- Zwracane wartości powinny być odpowiednio przefiltrowane.
- </para></listitem>
- <listitem><para>
- Klasa musi znajdować się w pliku odpowiednio do nazwy metody
- helpera. Przykładowo dla helpera o nazwie "twojHelper",
- plik powinien nazywać się "TwojHelper.php".
- </para></listitem>
- </itemizedlist>
- <para>
- Umieść plik klasy helpera w katalogu który był dodany do stosu
- ścieżek, a <code>Zend_View</code> automatycznie załaduje klasę,
- utworzy instancję, i uruchomi metodę.
- </para>
- <para>
- Poniżej przykład kodu naszego przykładowego helpera
- <code>twojHelper</code>:
- </para>
- <programlisting role="php"><![CDATA[
- class My_View_Helper_TwojHelper extends Zend_View_Helper_Abstract
- {
- protected $_count = 0;
- public function twojHelper()
- {
- $this->_count++;
- $output = "I have seen 'The Jerk' {$this->_count} time(s).";
- return htmlspecialchars($output);
- }
- }
- ]]>
- </programlisting>
- <para>
- Teraz w skrypcie widoku możesz wywołać helpera
- <code>TwojHelper</code> tyle razy ile zechcesz; instancja zostanie
- utworzona raz i będzie ona istniała przez cały okres istnienia
- instancji <code>Zend_View</code>.
- </para>
- <programlisting role="php"><![CDATA[
- // pamiętaj, że w skrypcie widoku $this odnosi się do instancji Zend_View.
- echo $this->twojHelper();
- echo $this->twojHelper();
- echo $this->twojHelper();
- ]]>
- </programlisting>
- <para>
- Dane wyjściowe wyglądałyby w ten sposób:
- </para>
- <programlisting role="php"><![CDATA[
- I have seen 'The Jerk' 1 time(s).
- I have seen 'The Jerk' 2 time(s).
- I have seen 'The Jerk' 3 time(s).
- ]]>
- </programlisting>
- <para>
- Czasem możesz potrzebować uzyskać dostęp do obiektu
- <code>Zend_View</code> -- na przykład, jeśli potrzebujesz użyć
- zarejestrowanego kodowania, lub chcesz renderować inny skrypt
- widoku jako część klasy helpera. Aby uzyskać dostęp do obiektu
- widoku, klasa helpera powinna posiadać metodę
- <code>setView($view)</code>, tak jak poniżej:
- </para>
- <programlisting role="php"><![CDATA[
- class My_View_Helper_ScriptPath
- {
- public $view;
- public function setView(Zend_View_Interface $view)
- {
- $this->view = $view;
- }
- public function scriptPath($script)
- {
- return $this->view->getScriptPath($script);
- }
- }
- ]]>
- </programlisting>
- <para>
- Jeśli twoja klasa helpera posiada metodę <code>setView()</code>,
- będzie ona wywołana wtedy, gdy po raz pierwszy zostanie utworzona
- instancja klasy helpera i przekazany zostanie obecny obiekt
- widoku. Jest to po to, aby przechować obiekt widoku w klasie helpera,
- a także po to, aby określić w jaki sposób powinno się uzyskiwać do
- tego obiektu dostęp.
- </para>
- <para>
- Jeśli rozszerzasz klasę <code>Zend_View_Helper_Abstract</code>
- nie musisz definiować tej metody, ponieważ jest ona zdefiniowana
- przez klasę rozszerzaną.
- </para>
- </sect2>
- </sect1>
|