[GENERIC] Zend_Translate:
[zend.git] / documentation / manual / ja / module_specs / Zend_View-Helpers-Partial.xml
blobb0a132f90f6efb8b836a5cff32f6fca7c15b3223
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Reviewed: no -->
3 <!-- EN-Revision: 20794 -->
4 <sect3 id="zend.view.helpers.initial.partial">
5     <title>Partial ヘルパー</title>
7     <para>
8         <classname>Partial</classname> ビューヘルパーは、
9         指定したテンプレートを自分自身のスコープ内でレンダリングします。
10         主な使い道は、
11         再利用可能な部分テンプレートを変数名の競合を気にせずに使うというものです。
12         さらに、特定のモジュールから部分ビュースクリプトを指定できるようになります。
13     </para>
15     <para>
16         <classname>Partial</classname> と兄弟関係にある <classname>PartialLoop</classname>
17         ビューヘルパーは、反復処理可能なデータを渡して
18         その各要素に対してレンダリングを行うものです。
19     </para>
21     <note>
22         <title>PartialLoop カウンタ</title>
23         <para>
24             <classname>PartialLoop</classname> ビューヘルパーは、変数を
25             <emphasis>partialCounter</emphasis> というビューに代入します。
26             これは、配列の現在の位置をビュースクリプトに渡します。
27             これを利用すると、たとえばテーブルの行の色を一行おきに入れ替えるなどが簡単にできます。
28         </para>
30     </note>
32     <example id="zend.view.helpers.initial.partial.usage">
33         <title>Partial の基本的な使用法</title>
35         <para>
36             partial の基本的な使用法は、
37             自分自身のビューのスコープで部分テンプレートをレンダリングすることです。
38             次のようなスクリプトを考えてみましょう。
39         </para>
41         <programlisting language="php"><![CDATA[
42 <?php // partial.phtml ?>
43 <ul>
44     <li>From: <?php echo $this->escape($this->from) ?></li>
45     <li>Subject: <?php echo $this->escape($this->subject) ?></li>
46 </ul>
47 ]]></programlisting>
49         <para>
50             これを、ビュースクリプトから次のようにコールします。
51         </para>
53         <programlisting language="php"><![CDATA[
54 <?php echo $this->partial('partial.phtml', array(
55     'from' => 'Team Framework',
56     'subject' => 'view partials')); ?>
57 ]]></programlisting>
59         <para>
60             レンダリングした結果は、このようになります。
61         </para>
63         <programlisting language="html"><![CDATA[
64 <ul>
65     <li>From: Team Framework</li>
66     <li>Subject: view partials</li>
67 </ul>
68 ]]></programlisting>
70     </example>
71         <note>
72             <title>モデルは何?</title>
74             <para>
75                 <classname>Partial</classname> ビューヘルパーが使用するモデルは、
76                 次のいずれかとなります。
77             </para>
79             <itemizedlist>
80                 <listitem><para>
81                         <emphasis>配列</emphasis>。
82                         配列を渡す場合は、連想配列形式でなければなりません。
83                         そのキーと値のペアがビューに渡され、
84                         キーが変数名となります。
85                 </para></listitem>
87                 <listitem><para>
88                         <emphasis>toArray() メソッドを実装したオブジェクト</emphasis>。
89                         そのオブジェクトの <methodname>toArray()</methodname>
90                         メソッドを実行した結果が、ビューオブジェクトに渡されます。
91                 </para></listitem>
93                 <listitem><para>
94                         <emphasis>標準のオブジェクト</emphasis>。
95                         それ以外のオブジェクトについては、
96                         <methodname>object_get_vars()</methodname> の結果
97                         (そのオブジェクトのすべての public プロパティ)
98                         がビューオブジェクトに渡されます。
99                 </para></listitem>
100             </itemizedlist>
102             <para>
103                 使用するモデルがオブジェクトである場合は、
104                 それを変数の配列などに変換するのではなく
105                 <emphasis>オブジェクトのまま</emphasis> 直接
106                 partial スクリプトに渡したくなるものでしょう。
107                 そのためには、しかるべきヘルパーでプロパティ
108                 'objectKey' を設定します。
109             </para>
111             <programlisting language="php"><![CDATA[
112 // オブジェクトを、変数 'model' として渡すよう通知します
113 $view->partial()->setObjectKey('model');
115 // partialLoop のオブジェクトを、最終的なビュースクリプト内で
116 // 変数 'model' として渡すよう通知します
117 $view->partialLoop()->setObjectKey('model');
118 ]]></programlisting>
120             <para>
121                 このテクニックが特に役立つのは、
122                 <classname>Zend_Db_Table_Rowset</classname> を
123                 <methodname>partialLoop()</methodname> に渡すような場合です。
124                 ビュースクリプト内で row オブジェクトに自由にアクセスでき、
125                 そのメソッド (親の値を取得したり従属行を取得したりなど)
126                 を自在に使えるようになります。
127             </para>
128         </note>
130     <example id="zend.view.helpers.initial.partial.partialloop">
131         <title>PartialLoop による反復処理可能なモデルのレンダリング</title>
133         <para>
134             一般に、ループ内で partial
135             を使用して特定のコンテンツを繰り返しレンダリングしたくなることもあるでしょう。
136             こうすることで、繰り返し表示される大量のコンテンツや複雑な表示ロジックを
137             ひとつにまとめることができます。
138             しかし、この方法はパフォーマンスに影響を及ぼします。
139             というのも、partial ヘルパーをループ内で毎回実行することになるからです。
140         </para>
142         <para>
143             <classname>PartialLoop</classname> ビューヘルパーは、
144             この問題を解決します。これを使用すると、反復処理可能な内容
145             (配列、あるいは <emphasis>Iterator</emphasis> を実装したオブジェクト)
146             をモデルに渡せるようになります。
147             そしてその各要素が partial スクリプトへモデルとして渡されます。
148             各要素の内容は、<classname>Partial</classname>
149             ビューヘルパーが受け付ける任意の形式のモデルとできます。
150         </para>
152         <para>
153             次のような部分ビュースクリプトを考えます。
154         </para>
156         <programlisting language="php"><![CDATA[
157 <?php // partialLoop.phtml ?>
158     <dt><?php echo $this->key ?></dt>
159     <dd><?php echo $this->value ?></dd>
160 ]]></programlisting>
162         <para>
163             そして "モデル" はこのようになります。
164         </para>
166         <programlisting language="php"><![CDATA[
167 $model = array(
168     array('key' => 'Mammal', 'value' => 'Camel'),
169     array('key' => 'Bird', 'value' => 'Penguin'),
170     array('key' => 'Reptile', 'value' => 'Asp'),
171     array('key' => 'Fish', 'value' => 'Flounder'),
173 ]]></programlisting>
175         <para>
176             そして、ビュースクリプト内で
177             <classname>PartialLoop</classname> ヘルパーを実行します。
178         </para>
180         <programlisting language="php"><![CDATA[
181 <dl>
182 <?php echo $this->partialLoop('partialLoop.phtml', $model) ?>
183 </dl>
184 ]]></programlisting>
186         <programlisting language="html"><![CDATA[
187 <dl>
188     <dt>Mammal</dt>
189     <dd>Camel</dd>
191     <dt>Bird</dt>
192     <dd>Penguin</dd>
194     <dt>Reptile</dt>
195     <dd>Asp</dd>
197     <dt>Fish</dt>
198     <dd>Flounder</dd>
199 </dl>
200 ]]></programlisting>
201     </example>
203     <example id="zend.view.helpers.initial.partial.modules">
204         <title>他のモジュールの Partial のレンダリング</title>
206         <para>
207             時には partial が別のモジュールに存在することもあるでしょう。
208             そのモジュールの名前がわかっていれば、モジュール名を
209             <methodname>partial()</methodname> あるいは <methodname>partialLoop()</methodname>
210             の 2 番目の引数として渡し、
211             <varname>$model</varname> を 3 番目の引数に移動させることができます。
212         </para>
214         <para>
215             たとえば、'list' モジュールにある pager というスクリプトを使用したい場合は、
216             次のようにします。
217         </para>
219         <programlisting language="php"><![CDATA[
220 <?php echo $this->partial('pager.phtml', 'list', $pagerData) ?>
221 ]]></programlisting>
223         <para>
224             こうすると、特定の partial を他のモジュールで再利用できるようになります。
225             再利用可能な partial は、共有のビュースクリプトのパスに配置することをおすすめします。
226         </para>
227     </example>
228 </sect3>
229 <!--
230 vim:se ts=4 sw=4 et: