17.4. Klasy pomocników
Poprzedni | Rozdział 17. Zend_View | Następny

## 17.4. Klasy pomocników

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śnikow akcji. Możesz użyć klas pomocników w tym celu.

Aby użyć pomocnika w swoim skrypcie widoku, wywołaj go za pomocą $this->nazwaPomocnika(). Obiekt Zend_View załaduje klasę Zend_View_Helper_NazwaPomocnika, utworzy obiekt tej klasy i wywoła metodę nazwaPomocnika(). Instancja obiektu istnieje teraz w instancji Zend_View i będzie ona ponownie używana przy następnych wywołaniach $this->nazwaPomocnika().

### 17.4.1. Wbudowane klasy pomocników

Zend_View posiada wbudowany zbiór klas pomocników, z których wszystkie odnoszą się do generowania formularzy. Każda z nich autmatycznie filtruje dane wyjściowe. Są to:

- formButton($name, $value, $attribs): Tworzy element <input type="button" />.

- formCheckbox($name, $value, $attribs, $options): Tworzy element <input type="checkbox" />. Parametr $options jest tablicą w której pierwszy element jest wartością dla pola zaznaczonego ("checked"), a drugi wartością dla niezaznaczonego ("unchecked") (domyślnie są to wartości '1' i '0'). Jeśli wartość $value odpowiada wartości pola zaznaczonego ("checked"), to pole zostanie zaznaczone.

- formFile($name, $value, $attribs): Tworzy element <input type="file" />.

- formHidden($name, $value, $attribs): Tworzy element <input type="hidden" />.

- formPassword($name, $value, $attribs): Tworzy element <input type="password" />.

- formRadio($name, $value, $attribs, $options): 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.

- formReset($name, $value, $attribs): Tworzy element <input type="reset" />.

- formSelect($name, $value, $attribs, $options): Tworzy blok <select>...</select>, z elementami <option> po jednym dla każdego elementu tablicy $options. W tablicy $options klucz jest wartościa elementu, a wartość jest etykietą. Zmienna $value określa wartośc elementu (lub elementów), który ma być początkowo zaznaczony.

- formSubmit($name, $value, $attribs): Tworzy element <input type="submit" />.

- formText($name, $value, $attribs): Tworzy element <input type="text" />.

- formTextarea($name, $value, $attribs): Tworzy element <textarea>...</textarea>.

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.

    <?php
    // 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>

Rezultat wyglądałby w ten sposób:

    <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>

### 17.4.2. Ścieżki klas pomocników

Tak jak ze skryptami widoków, kontroler może określić stos ścieżek, w których Zend_View ma szukać klas pomocników. Domyślnie Zend_View szuka klas pomocników w katalogu "Zend/View/Helper/*". Możesz wybrać inny katalog używając metod setHelperPath() oraz addHelperPath().

    <?php
    $view = new Zend_View();
    $view->setHelperPath('/path/to/more/helpers');
    ?>

Oczywiście możesz dodawać ścieżki na stos używająć metody addHelperPath(). Gdy dodajesz ścieżki na stos, Zend_View będzie szukać klasy pomocnika począwszy od ostatnio dodanej ścieżki. To pozwala na dodanie (lub nawet nadpisanie) podstawowego pakietu klas pomocników swoimi własnymi klasami.

    <?php
    $view = new Zend_View();
    $view->addHelperPath('/path/to/some/helpers');
    $view->addHelperPath('/other/path/to/helpers');

    // teraz kiedy wywołasz $this->helperName(), Zend_View będzie wpierw szukał w
    // "/other/path/to/helpers/HelperName.php", potem w
    // "/path/to/some/helpers/HelperName" i ostatecznie w
    // "Zend/View/Helpers/HelperName.php".
    ?>

### 17.4.3. Pisanie własnych klas pomocników

Pisanie własnych klas pomocników jest łatwe; po prostu pisz według poniższych zasad:

- Nazwa klasy musi być w postaci Zend_View_Helper_*, gdzie * oznacza nazwę pomocnika. Na przykład jeśli chcesz napisać pomocnika nazwanego "twojPomocnik", klasa powinna nazywać się "Zend_View_Helper_TwojPomocnik" (zwróć uwagę na początkowe wielkie litery).

- Klasa musi posiadać publiczną metodę która jest taka jak nazwa pomocnika; jest to metoda która zostanie wywołana gdy skrypt widoku wywoła "$this->twojPomocnik()". W przykładzie pomocnika "twojPomocnik", wymaganą deklaracją metody powinno być "public function twojPomocnik()".

- 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.

- Klasa musi znajdować się w pliku odpowiednio do nazwy pomocnika. Przykladowo dla pomocnika o nazwie "twojPomocnik", plik powinien nazywać się "TwojPomocnik.php".

Umieść plik klasy pomocnika w katalogu który był dodany do stosu ścieżek, a Zend_View automatycznie załaduje klasę, utworzy instancję, i uruchomi metodę.

Poniżej przykład kodu naszego przykładowego pomocnika twojPomocnik:

    <?php
    class Zend_View_Helper_TwojPomocnik {
        protected $_count = 0;
        public function twojPomocnik()
        {
            $this->_count++;
            $output = "I have seen 'The Jerk' {$this->_count} time(s).";
            return htmlspecialchars($output);
        }
    }
    ?>

Teraz w skrypcie widoku możesz wywołać pomocnika TwojPomocnik tyle razy ile zechcesz; instancja zostanie utworzona raz i będzie ona istniała przez cały okres istnienia instancji Zend_View.

    <?php
    // pamiętaj, że w skrypcie widoku $this odnosi się do instancji Zend_View.
    echo $this->twojPomocnik();
    echo $this->twojPomocnik();
    echo $this->twojPomocnik();
    ?>

Dane wyjściowe wyglądałyby w ten sposób:

    I have seen 'The Jerk' 1 time(s).
    I have seen 'The Jerk' 2 time(s).
    I have seen 'The Jerk' 3 time(s).

Poprzedni | Początek rozdziału | Następny
17.3. Skrypty widoków | Spis treści | Rozdział 18. Zend_XmlRpc