[ZF-10089] Zend_Log
[zend.git] / documentation / manual / zh / module_specs / Zend_View-Helpers-Partial.xml
blobf8a53893201c92ba8e60b64c8f0071e867b843c6
1 <sect3 id="zend.view.helpers.initial.partial">
2     <title>区域助手(Partial Helper) </title>
4     <para>
5         <code>Partial</code> 视图助手被用来在它自己的变量范围内解析特定的模板。主要用法是(解析)可重用的模板片段,你不需要操心变量名的冲突。另外,它们让你从特定的模块指定 partial 视图脚本。
6     </para>
8     <para>
9         <code>Partial</code> 的兄弟 <code>PartialLoop</code> 视图助手允许传递可迭代数据并为每个条目解析一部分。
10     </para>
12     <example id="zend.view.helpers.initial.partial.usage">
13         <title> Partials 的基本用法 </title>
15         <para>
16             partials 的基本用法是在它自己的视图范围内解析一个模板的片段。
17         </para>
19         <programlisting role="php"><![CDATA[
20 <?php // partial.phtml ?>
21 <ul>
22     <li>From: <?= $this->escape($this->from) ?></li>
23     <li>Subject: <?= $this->escape($this->subject) ?></li>
24 </ul>
25 ]]></programlisting>
27         <para>
28             你可以这样从视图脚本里调用它:
29         </para>
31         <programlisting role="php"><![CDATA[
32 <?= $this->partial('partial.phtml', array(
33     'from' => 'Team Framework',
34     'subject' => 'view partials')); ?>
35 ]]></programlisting>
37         <para>
38             解析结果如下:
39         </para>
41         <programlisting role="html"><![CDATA[
42 <ul>
43     <li>From: Team Framework</li>
44     <li>Subject: view partials</li>
45 </ul>
46 ]]></programlisting>
48     </example>
49         <note>
50             <title> 什么是模型(model)? </title>
52             <para>
53                 和 <code>Partial</code> 视图助手一起使用的模型(即partial()的第二个参数,Haohappy注)可以是下列其中之一:
54             </para>
56             <itemizedlist>
57                 <listitem><para>
58                         <emphasis> 数组 </emphasis>。如果传递了数组,它应当是联合数组,因为它的 ‘键/值’ 对用作为视图变量的键赋值给视图。
59                 </para></listitem>
61                 <listitem><para>
62                         <emphasis> 实现了toArray() 方法的对象 </emphasis>。如果被传递的对象有 <code>toArray()</code> 方法,<code>toArray()</code>的结果将被当作视图变量赋值给视图对象。
63                 </para></listitem>
65                 <listitem><para>
66                         <emphasis> 标准对象 </emphasis>。 任何其它对象将把<code>object_get_vars()</code>的结果(对象的所有公共属性)赋值给视图对象。
67                 </para></listitem>
68             </itemizedlist>
70             <para>
71                 如果你的模型是一个对象,你可能想让它<emphasis>作为对象</emphasis>传递给 partial 脚本,而不是把它系列化成一个数组变量。
72                 你可以通过设置适当的助手的 'objectKey' 属性来完成这个:
73             </para>
75             <programlisting role="php"><![CDATA[
76 // Tell partial to pass objects as 'model' variable
77 $view->partial()->setObjectKey('model');
79 // Tell partial to pass objects from partialLoop as 'model' variable in final
80 // partial view script:
81 $view->partialLoop()->setObjectKey('model');
82 ]]></programlisting>
84             <para>
85                 当传递 <code>Zend_Db_Table_Rowset</code>s 给 <code>partialLoop()</code>时这个技术相当有用,
86                 因为你在视图脚本里有全部访问 row 对象的权限,允许你调用它们的方法(如从父或依赖的 rows 获取数据)。
87             </para>
88         </note>
91     <example id="zend.view.helpers.initial.partial.partialloop">
92         <title> 使用 PartialLoop 来解析可迭代的(Iterable)的模型 </title>
94         <para>
95             可能你常常会需要在一个循环里使用 partials 来输出相同的内容片段多次,这时你就可以把大块的重复的内容或复杂的显示逻辑放到一个地方。然而这对性能有影响,因为partial助手需要在每个迭代里调用一次。
96         </para>
98         <para>
99             <code>PartialLoop</code> 视图助手解决了这个问题。 它允许你把迭代条目(实现<code>Iterator</code>的数组或对象)当做模型来传递。它这些把这些条目当作模型迭代、传递给 partial 脚本。在迭代器里的条目可以是 <code>Partial</code> 视图助手允许的任何模型。
100         </para>
102         <para>
103             让我们看一下下面的 partial 视图脚本:
104         </para>
106         <programlisting role="php"><![CDATA[
107 <? // partialLoop.phtml ?>
108     <dt><?= $this->key ?></dt>
109     <dd><?= $this->value ?></dd>
111 ]]></programlisting>
113         <para>
114             添加下列 "model":
115         </para>
117         <programlisting role="php"><![CDATA[<?php
118 $model = array(
119     array('key' => 'Mammal', 'value' => 'Camel'),
120     array('key' => 'Bird', 'value' => 'Penguin'),
121     array('key' => 'Reptile', 'value' => 'Asp'),
122     array('key' => 'Fish', 'value' => 'Flounder'),
124 ?>]]></programlisting>
126         <para>
127             在视图脚本中,你可以这样调用 <code>PartialLoop</code> 助手:
128         </para>
130         <programlisting role="php"><![CDATA[
131 <dl>
132 <?= $this->partialLoop('partialLoop.phtml', $model) ?>
133 </dl>
134 ]]></programlisting>
136         <programlisting role="html"><![CDATA[
137 <dl></dl>
138     <dt>Mammal</dt>
139     <dd>Camel</dd>
141     <dt>Bird</dt>
142     <dd>Penguin</dd>
144     <dt>Reptile</dt>
145     <dd>Asp</dd>
147     <dt>Fish</dt>
148     <dd>Flounder</dd>
150 </dl>
151 ]]></programlisting>
152     </example>
154     <example id="zend.view.helpers.initial.partial.modules">
155         <title> 在其它模块中解析 Partials </title>
157         <para>
158             有时候 partial 存在于不同的模块(Module)。如果你知道模块的名称,你可以把它当作第二个参数传递给 <code>partial()</code> 或者 <code>partialLoop()</code>,把 <code>$model</code> 作为第三个参数。
159         </para>
161         <para>
162             例如,如果一个你想用一个在 'list' 模块的 pager partial,就象下面这样来运用:
163         </para>
165         <programlisting role="php"><![CDATA[
166 <?= $this->partial('pager.phtml', 'list', $pagerData) ?>
167 ]]></programlisting>
169         <para>
170             这样,你可以重用原来是特别供给其它模块使用的 partials 。所以,在共享的视图脚本路径里放置可重用的 partials 很可能是个好习惯。
171         </para>
172     </example>
173 </sect3>
174 <!--
175 vim:se ts=4 sw=4 et: