1 <?xml version="1.0" encoding="UTF-8"?>
\r
2 <!-- Reviewed: no -->
\r
3 <sect1 id="zend.view.introduction">
\r
5 <title>Введение</title>
\r
8 <classname>Zend_View</classname> является классом для работы с частью вид (view)
\r
9 паттерна модель-вид-контроллер (model-view-controller). То есть он
\r
10 предназначен для того, чтобы помочь отделить скрипты видов от
\r
11 скриптов моделей и контроллеров. Он предоставляет систему помощников,
\r
12 фильтрации вывода и экранирования переменных.
\r
16 <classname>Zend_View</classname> не зависит от выбранной вами системы
\r
17 шаблонов - вы можете использовать PHP в качестве языка шаблонов или
\r
18 создавать экземпляры других систем шаблонов и работать с ними
\r
19 в ваших скриптах вида.
\r
23 По существу применение <classname>Zend_View</classname> состоит из двух шагов:
\r
25 1. Ваш скрипт контроллера создает экземпляр <classname>Zend_View</classname> и
\r
26 объявляет переменные этого экземпляра.
\r
28 2. Контроллер приказывает <classname>Zend_View</classname> воспроизвести
\r
29 данный вид, посредством этого производится контроль за скриптом
\r
30 вида, который генерирует выходные данные вида.
\r
33 <sect2 id="zend.view.introduction.controller">
\r
35 <title>Скрипт контроллера</title>
\r
38 В качестве простого примера предположим, что ваш контроллер имеет
\r
39 список данных по книгам, который нужно воспроизвести через вид.
\r
40 Скрипт контроллера может выглядеть наподобие этого:
\r
43 <programlisting language="php"><![CDATA[
\r
44 // использование модели для получения данных о заголовках и авторах книг
\r
47 'author' => 'Hernando de Soto',
\r
48 'title' => 'The Mystery of Capitalism'
\r
51 'author' => 'Henry Hazlitt',
\r
52 'title' => 'Economics in One Lesson'
\r
55 'author' => 'Milton Friedman',
\r
56 'title' => 'Free to Choose'
\r
60 // теперь присваиваем данные по книгам экземпляру Zend_View
\r
61 Zend_Loader::loadClass('Zend_View');
\r
62 $view = new Zend_View();
\r
63 $view->books = $data;
\r
65 // и выполняем скрипт вида "booklist.php"
\r
66 echo $view->render('booklist.php');
\r
67 ]]></programlisting>
\r
71 <sect2 id="zend.view.introduction.view">
\r
73 <title>Скрипт вида</title>
\r
76 Теперь нам нужен сопутствующий скрипт вида "booklist.php".
\r
77 Это такой же скрипт PHP, как и остальные, за одним исключением:
\r
78 он выполняется в области видимости экземпляра <classname>Zend_View</classname>,
\r
79 это означает, что <varname>$this</varname> ссылается на
\r
80 экземпляр <classname>Zend_View</classname>. Переменные, присваиваемые в
\r
81 контроллере для скрипта вида, являются открытыми свойствами
\r
82 экземпляра <classname>Zend_View</classname>. Таким образом, базовый скрипт
\r
83 вида может выглядеть следующим образом:
\r
86 <programlisting language="php"><![CDATA[
\r
87 <?php if ($this->books): ?>
\r
89 <!-- Таблица из нескольких книг. -->
\r
96 <?php foreach ($this->books as $key => $val): ?>
\r
98 <td><?php echo $this->escape($val['author']) ?></td>
\r
99 <td><?php echo $this->escape($val['title']) ?></td>
\r
101 <?php endforeach; ?>
\r
107 <p>Нет книг для отображения.</p>
\r
110 ]]></programlisting>
\r
113 Обратите внимание, что мы используем метод <code>escape()</code>
\r
114 для экранирования переменных.
\r
119 <sect2 id="zend.view.introduction.options">
\r
120 <title>Опции</title>
\r
123 <classname>Zend_View</classname> имеет несколько опций, которые могут
\r
124 использоваться для управления поведением ваших скриптов вида:
\r
130 <code>basePath</code> - базовый путь, начиная от которого
\r
131 устанавливаются пути скриптов, помощников и фильтров.
\r
132 Предполагается, что используется следующая структура
\r
136 <programlisting language="php"><![CDATA[
\r
141 ]]></programlisting>
\r
144 Эта опция может быть установлена через методы
\r
145 <code>setBasePath()</code>, <code>addBasePath()</code> или
\r
146 опцию <code>basePath</code> для конструктора.
\r
151 <code>encoding</code> - кодировка, которую следует использовать
\r
152 при вызове функций <code>htmlentities()</code>,
\r
153 <code>htmlspecialchars()</code> и др. По умолчанию используется
\r
154 ISO-8859-1 (latin1). Может быть установлена через метод
\r
155 <code>setEncoding()</code> или опцию <code>encoding</code> для
\r
160 <code>escape</code> - обратный вызов, который следует
\r
161 использовать для метода <code>escape()</code>. Может быть
\r
162 установлен через метод <code>setEscape()</code> или опцию
\r
163 <code>escape</code> для конструктора.
\r
167 <code>filter</code> - фильтр, который следует использовать после
\r
168 рендеринга скрипта вида. Может быть установлен через методы
\r
169 <code>setFilter()</code>, <code>addFilter()</code>, или опцию
\r
170 <code>filter</code> для конструктора.
\r
174 <code>strictVars</code> - если опция установлена, то
\r
175 <classname>Zend_View</classname> генерирует уведомления (notices) и
\r
176 предупреждения (warnings), когда производится обращение к
\r
177 неинициализированной переменной. Опция может быть
\r
178 установлена посредством вызова <code>strictVars(true)</code> или
\r
179 передачи опции <code>strictVars</code> конструктору.
\r
184 <sect2 id="zend.view.introduction.shortTags">
\r
185 <title>Короткие теги в скриптах вида</title>
\r
188 В нашей документации и примерах мы применяем короткие теги PHP:
\r
189 <code><?</code> and <code><?=</code>. Кроме того, мы обычно
\r
191 url="http://us.php.net/manual/en/control-structures.alternative-syntax.php">альтернативный
\r
192 синтаксис для управляющих структур</ulink>. Их удобно
\r
193 использовать при написании скриптов вида, они делают конструкции
\r
194 более лаконичными и позволяют размещать операторы без лишних
\r
195 переходов на другую строку.
\r
199 Несмотря на это, многие разработчики
\r
200 предпочитают использовать длинную форму записи для обеспечения
\r
201 валидности или переносимости кода. Например, в рекомендуемой
\r
203 (файл php.ini.recommended) опция <code>short_open_tag</code>
\r
204 отключена. Также, если вы используете XML в своих скриптах
\r
205 вида, то с короткими открывающими тегами PHP они не будут проходить
\r
210 Кроме того, если вы используете короткие теги, и опция
\r
211 <code>short_open_tag</code> отключена, то скрипты вида будут либо
\r
212 приводить к ошибкам выполнения, либо просто выводить пользователю
\r
213 код, включенный в эти теги.
\r
217 В последнем случае, если вы хотите использовать короткие теги,
\r
218 но они отключены, у вас есть два возможных решения:
\r
224 Включить короткие теги в своем файле <code>.htaccess</code>:
\r
227 <programlisting language="apache"><![CDATA[
\r
228 php_value "short_open_tag" "on"
\r
229 ]]></programlisting>
\r
232 Это будет действовать только в том случае, если у вас есть
\r
233 права на создание и использование файлов <code>.htaccess</code>.
\r
234 Эта директива также может быть добавлена в
\r
235 конфигурационный файл <code>httpd.conf</code>.
\r
241 Включить обертку потока (stream wrapper), которая будет
\r
242 на лету преобразовывать короткие теги в полные:
\r
245 <programlisting language="php"><![CDATA[
\r
246 $view->setUseStreamWrapper(true);
\r
247 ]]></programlisting>
\r
250 В этом вызове <classname>Zend_View_Stream</classname> регистрируется в
\r
251 качестве обертки потока к скриптам вида, благодаря этому
\r
252 код будет работать так же, как если бы короткие теги были
\r
259 <title>Обертка потока для скриптов вида снижает производительность</title>
\r
262 Использование обертки потока <emphasis>снижает</emphasis>
\r
263 производительность вашего приложения.
\r
264 Мы рекомендуем включать короткие
\r
265 теги, переписывать свои скрипты вида с тем, чтобы
\r
266 использовалась полная форма записи тегов, либо использовать
\r
267 продуманную стратегию частичного или полного кэширования
\r
268 содержимого страниц.
\r
273 <sect2 id="zend.view.introduction.accessors">
\r
274 <title>Вспомогательные аксессоры</title>
\r
277 Скорее всего, вам никогда не понадобится вызывать
\r
278 <code>assign()</code>, <code>render()</code> и другие
\r
279 перечисленные ниже методы
\r
280 для установки/добавления фильтров, помощников, путей к скриптам
\r
281 вида. Тем не менее, если требуется расширить класс
\r
282 <classname>Zend_View</classname> или нужен доступ к его внутреннему коду,
\r
283 то можно использовать следующие аксессоры:
\r
289 <code>getVars()</code> возвращает все установленные
\r
296 <code>clearVars()</code> удаляет все присвоенные переменные,
\r
297 полезен, если вы хотите повторно использовать объект вида,
\r
298 но хотите контролировать доступность переменных.
\r
304 <code>getScriptPath($script)</code> возвращает вычисленный
\r
305 путь к данному скрипту вида.
\r
311 <code>getScriptPaths()</code> возвращает все
\r
312 зарегистрированные пути к скриптам вида.
\r
318 <code>getHelperPath($helper)</code> возвращает вычисленный
\r
319 путь к классу помощника, имя которого передается в
\r
320 качестве параметра.
\r
326 <code>getHelperPaths()</code> возвращает все
\r
327 зарегистрированные пути к классам помощников.
\r
333 <code>getFilterPath($filter)</code> возвращает вычисленный
\r
334 путь к классу фильтра, имя которого передается в
\r
335 качестве параметра.
\r
341 <code>getFilterPaths()</code> возвращает все
\r
342 зарегистрированные пути к классам фильтров.
\r
349 vim:se ts=4 sw=4 et:
\r