| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 |
- <?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><?</code> oraz <code><?=</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>
|