[MANUAL] English:
[zend.git] / documentation / manual / ru / module_specs / Zend_View-Introduction.xml
blob4a0bf595d1e122214cdf1cdf07a0bfec527a46ef
1 <?xml version="1.0" encoding="UTF-8"?>\r
2 <!-- Reviewed: no -->\r
3 <sect1 id="zend.view.introduction">\r
4 \r
5     <title>Введение</title>\r
6 \r
7     <para>\r
8         <classname>Zend_View</classname> является классом для работы с частью вид (view)\r
9         паттерна модель-вид-контроллер (model-view-controller). То есть он\r
10         предназначен для того, чтобы помочь отделить скрипты видов от\r
11         скриптов моделей и контроллеров. Он предоставляет систему помощников,\r
12         фильтрации вывода и экранирования переменных.\r
13     </para>\r
15     <para>\r
16         <classname>Zend_View</classname> не зависит от выбранной вами системы\r
17         шаблонов - вы можете использовать PHP в качестве языка шаблонов или\r
18         создавать экземпляры других систем шаблонов и работать с ними\r
19         в ваших скриптах вида.\r
20     </para>\r
22     <para>\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
31     </para>\r
33     <sect2 id="zend.view.introduction.controller">\r
35         <title>Скрипт контроллера</title>\r
37         <para>\r
38             В качестве простого примера предположим, что ваш контроллер имеет\r
39             список данных по книгам, который нужно воспроизвести через вид.\r
40             Скрипт контроллера может выглядеть наподобие этого:\r
41         </para>\r
43         <programlisting language="php"><![CDATA[\r
44 // использование модели для получения данных о заголовках и авторах книг\r
45 $data = array(\r
46     array(\r
47         'author' => 'Hernando de Soto',\r
48         'title' => 'The Mystery of Capitalism'\r
49     ),\r
50     array(\r
51         'author' => 'Henry Hazlitt',\r
52         'title' => 'Economics in One Lesson'\r
53     ),\r
54     array(\r
55         'author' => 'Milton Friedman',\r
56         'title' => 'Free to Choose'\r
57     )\r
58 );\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
69     </sect2>\r
71     <sect2 id="zend.view.introduction.view">\r
73         <title>Скрипт вида</title>\r
75         <para>\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
84         </para>\r
86         <programlisting language="php"><![CDATA[\r
87 <?php if ($this->books): ?>\r
89     <!-- Таблица из нескольких книг. -->\r
90     <table>\r
91         <tr>\r
92             <th>Author</th>\r
93             <th>Title</th>\r
94         </tr>\r
96         <?php foreach ($this->books as $key => $val): ?>\r
97         <tr>\r
98             <td><?php echo $this->escape($val['author']) ?></td>\r
99             <td><?php echo $this->escape($val['title']) ?></td>\r
100         </tr>\r
101         <?php endforeach; ?>\r
103     </table>\r
105 <?php else: ?>\r
107     <p>Нет книг для отображения.</p>\r
109 <?php endif; ?>\r
110 ]]></programlisting>\r
112         <para>\r
113             Обратите внимание, что мы используем метод <code>escape()</code>\r
114             для экранирования переменных.\r
115         </para>\r
117     </sect2>\r
119     <sect2 id="zend.view.introduction.options">\r
120         <title>Опции</title>\r
122         <para>\r
123             <classname>Zend_View</classname> имеет несколько опций, которые могут\r
124             использоваться для управления поведением ваших скриптов вида:\r
125         </para>\r
127         <itemizedlist>\r
128             <listitem>\r
129                 <para>\r
130                     <code>basePath</code> - базовый путь, начиная от которого\r
131                     устанавливаются пути скриптов, помощников и фильтров.\r
132                     Предполагается, что используется следующая структура\r
133                     директорий:\r
134                 </para>\r
136                 <programlisting language="php"><![CDATA[\r
137 base/path/\r
138     helpers/\r
139     filters/\r
140     scripts/\r
141 ]]></programlisting>\r
143                 <para>\r
144                     Эта опция может быть установлена через методы\r
145                     <code>setBasePath()</code>, <code>addBasePath()</code> или\r
146                     опцию <code>basePath</code> для конструктора.\r
147                 </para>\r
148             </listitem>\r
150             <listitem><para>\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
156                 конструктора.\r
157             </para></listitem>\r
159             <listitem><para>\r
160                 <code>escape</code> - обратный вызов, который следует\r
161                 использовать для метода <code>escape()</code>. Может быть\r
162                 установлен через метод <code>setEscape()</code> или опцию\r
163                 <code>escape</code> для конструктора.\r
164             </para></listitem>\r
166             <listitem><para>\r
167                 <code>filter</code> - фильтр, который следует использовать после\r
168                 рендеринга скрипта вида. Может быть установлен через методы\r
169                 <code>setFilter()</code>, <code>addFilter()</code>, или опцию\r
170                 <code>filter</code> для конструктора.\r
171             </para></listitem>\r
173             <listitem><para>\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
180             </para></listitem>\r
181         </itemizedlist>\r
182     </sect2>\r
184     <sect2 id="zend.view.introduction.shortTags">\r
185         <title>Короткие теги в скриптах вида</title>\r
187         <para>\r
188             В нашей документации и примерах мы применяем короткие теги PHP:\r
189             <code>&lt;?</code> and <code>&lt;?=</code>. Кроме того, мы обычно\r
190             используем <ulink\r
191                 url="http://us.php.net/manual/en/control-structures.alternative-syntax.php">альтернативный\r
192                 синтаксис для управляющих структур</ulink>. Их удобно\r
193             использовать при написании скриптов вида, они делают конструкции\r
194             более лаконичными и позволяют размещать операторы без лишних\r
195             переходов на другую строку.\r
196         </para>\r
198         <para>\r
199             Несмотря на это, многие разработчики\r
200             предпочитают использовать длинную форму записи для обеспечения\r
201             валидности или переносимости кода. Например, в рекомендуемой\r
202             конфигурации PHP\r
203             (файл php.ini.recommended) опция <code>short_open_tag</code>\r
204             отключена. Также, если вы используете XML в своих скриптах\r
205             вида, то с короткими открывающими тегами PHP они не будут проходить\r
206             валидацию.\r
207         </para>\r
209         <para>\r
210             Кроме того, если вы используете короткие теги, и опция\r
211             <code>short_open_tag</code> отключена, то скрипты вида будут либо\r
212             приводить к ошибкам выполнения, либо просто выводить пользователю\r
213             код, включенный в эти теги.\r
214         </para>\r
216         <para>\r
217             В последнем случае, если вы хотите использовать короткие теги,\r
218             но они отключены, у вас есть два возможных решения:\r
219         </para>\r
221         <itemizedlist>\r
222             <listitem>\r
223                 <para>\r
224                     Включить короткие теги в своем файле <code>.htaccess</code>:\r
225                 </para>\r
227                 <programlisting language="apache"><![CDATA[\r
228 php_value "short_open_tag" "on"\r
229 ]]></programlisting>\r
231                 <para>\r
232                     Это будет действовать только в том случае, если у вас есть\r
233                     права на создание и использование файлов <code>.htaccess</code>.\r
234                     Эта директива также может быть добавлена в\r
235                     конфигурационный файл <code>httpd.conf</code>.\r
236                 </para>\r
237             </listitem>\r
239             <listitem>\r
240                 <para>\r
241                     Включить обертку потока (stream wrapper), которая будет\r
242                     на лету преобразовывать короткие теги в полные:\r
243                 </para>\r
245         <programlisting language="php"><![CDATA[\r
246 $view->setUseStreamWrapper(true);\r
247 ]]></programlisting>\r
249                 <para>\r
250                     В этом вызове <classname>Zend_View_Stream</classname> регистрируется в\r
251                     качестве обертки потока к скриптам вида, благодаря этому\r
252                     код будет работать так же, как если бы короткие теги были\r
253                     были включены.\r
254                 </para>\r
255             </listitem>\r
256         </itemizedlist>\r
258         <note>\r
259             <title>Обертка потока для скриптов вида снижает производительность</title>\r
261             <para>\r
262                 Использование обертки потока <emphasis>снижает</emphasis>\r
263                 производительность вашего приложения.\r
264                 Мы рекомендуем включать короткие\r
265                 теги, переписывать свои скрипты вида с тем, чтобы\r
266                 использовалась полная форма записи тегов, либо использовать\r
267                 продуманную стратегию частичного или полного кэширования\r
268                 содержимого страниц.\r
269             </para>\r
270         </note>\r
271     </sect2>\r
273     <sect2 id="zend.view.introduction.accessors">\r
274         <title>Вспомогательные аксессоры</title>\r
276         <para>\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
284         </para>\r
286         <itemizedlist>\r
287             <listitem>\r
288                 <para>\r
289                     <code>getVars()</code> возвращает все установленные\r
290                     переменные.\r
291                 </para>\r
292             </listitem>\r
294             <listitem>\r
295                 <para>\r
296                     <code>clearVars()</code> удаляет все присвоенные переменные,\r
297                     полезен, если вы хотите повторно использовать объект вида,\r
298                     но хотите контролировать доступность переменных.\r
299                 </para>\r
300             </listitem>\r
302             <listitem>\r
303                 <para>\r
304                     <code>getScriptPath($script)</code> возвращает вычисленный\r
305                     путь к данному скрипту вида.\r
306                 </para>\r
307             </listitem>\r
309             <listitem>\r
310                 <para>\r
311                     <code>getScriptPaths()</code> возвращает все\r
312                     зарегистрированные пути к скриптам вида.\r
313                 </para>\r
314             </listitem>\r
316             <listitem>\r
317                 <para>\r
318                     <code>getHelperPath($helper)</code> возвращает вычисленный\r
319                     путь к классу помощника, имя которого передается в\r
320                     качестве параметра.\r
321                 </para>\r
322             </listitem>\r
324             <listitem>\r
325                 <para>\r
326                     <code>getHelperPaths()</code> возвращает все\r
327                     зарегистрированные пути к классам помощников.\r
328                 </para>\r
329             </listitem>\r
331             <listitem>\r
332                 <para>\r
333                     <code>getFilterPath($filter)</code> возвращает вычисленный\r
334                     путь к классу фильтра, имя которого передается в\r
335                     качестве параметра.\r
336                 </para>\r
337             </listitem>\r
339             <listitem>\r
340                 <para>\r
341                     <code>getFilterPaths()</code> возвращает все\r
342                     зарегистрированные пути к классам фильтров.\r
343                 </para>\r
344             </listitem>\r
345         </itemizedlist>\r
346     </sect2>\r
347 </sect1>\r
348 <!--\r
349 vim:se ts=4 sw=4 et:\r
350 -->\r