1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 20794 -->
4 <sect3 id="zend.view.helpers.initial.partial">
5 <title>Partial ヘルパー</title>
8 <classname>Partial</classname> ビューヘルパーは、
9 指定したテンプレートを自分自身のスコープ内でレンダリングします。
11 再利用可能な部分テンプレートを変数名の競合を気にせずに使うというものです。
12 さらに、特定のモジュールから部分ビュースクリプトを指定できるようになります。
16 <classname>Partial</classname> と兄弟関係にある <classname>PartialLoop</classname>
17 ビューヘルパーは、反復処理可能なデータを渡して
18 その各要素に対してレンダリングを行うものです。
22 <title>PartialLoop カウンタ</title>
24 <classname>PartialLoop</classname> ビューヘルパーは、変数を
25 <emphasis>partialCounter</emphasis> というビューに代入します。
26 これは、配列の現在の位置をビュースクリプトに渡します。
27 これを利用すると、たとえばテーブルの行の色を一行おきに入れ替えるなどが簡単にできます。
32 <example id="zend.view.helpers.initial.partial.usage">
33 <title>Partial の基本的な使用法</title>
37 自分自身のビューのスコープで部分テンプレートをレンダリングすることです。
41 <programlisting language="php"><![CDATA[
42 <?php // partial.phtml ?>
44 <li>From: <?php echo $this->escape($this->from) ?></li>
45 <li>Subject: <?php echo $this->escape($this->subject) ?></li>
50 これを、ビュースクリプトから次のようにコールします。
53 <programlisting language="php"><![CDATA[
54 <?php echo $this->partial('partial.phtml', array(
55 'from' => 'Team Framework',
56 'subject' => 'view partials')); ?>
60 レンダリングした結果は、このようになります。
63 <programlisting language="html"><![CDATA[
65 <li>From: Team Framework</li>
66 <li>Subject: view partials</li>
75 <classname>Partial</classname> ビューヘルパーが使用するモデルは、
81 <emphasis>配列</emphasis>。
82 配列を渡す場合は、連想配列形式でなければなりません。
88 <emphasis>toArray() メソッドを実装したオブジェクト</emphasis>。
89 そのオブジェクトの <methodname>toArray()</methodname>
90 メソッドを実行した結果が、ビューオブジェクトに渡されます。
94 <emphasis>標準のオブジェクト</emphasis>。
96 <methodname>object_get_vars()</methodname> の結果
97 (そのオブジェクトのすべての public プロパティ)
103 使用するモデルがオブジェクトである場合は、
105 <emphasis>オブジェクトのまま</emphasis> 直接
106 partial スクリプトに渡したくなるものでしょう。
107 そのためには、しかるべきヘルパーでプロパティ
111 <programlisting language="php"><![CDATA[
112 // オブジェクトを、変数 'model' として渡すよう通知します
113 $view->partial()->setObjectKey('model');
115 // partialLoop のオブジェクトを、最終的なビュースクリプト内で
116 // 変数 'model' として渡すよう通知します
117 $view->partialLoop()->setObjectKey('model');
122 <classname>Zend_Db_Table_Rowset</classname> を
123 <methodname>partialLoop()</methodname> に渡すような場合です。
124 ビュースクリプト内で row オブジェクトに自由にアクセスでき、
125 そのメソッド (親の値を取得したり従属行を取得したりなど)
130 <example id="zend.view.helpers.initial.partial.partialloop">
131 <title>PartialLoop による反復処理可能なモデルのレンダリング</title>
135 を使用して特定のコンテンツを繰り返しレンダリングしたくなることもあるでしょう。
136 こうすることで、繰り返し表示される大量のコンテンツや複雑な表示ロジックを
138 しかし、この方法はパフォーマンスに影響を及ぼします。
139 というのも、partial ヘルパーをループ内で毎回実行することになるからです。
143 <classname>PartialLoop</classname> ビューヘルパーは、
144 この問題を解決します。これを使用すると、反復処理可能な内容
145 (配列、あるいは <emphasis>Iterator</emphasis> を実装したオブジェクト)
147 そしてその各要素が partial スクリプトへモデルとして渡されます。
148 各要素の内容は、<classname>Partial</classname>
149 ビューヘルパーが受け付ける任意の形式のモデルとできます。
153 次のような部分ビュースクリプトを考えます。
156 <programlisting language="php"><![CDATA[
157 <?php // partialLoop.phtml ?>
158 <dt><?php echo $this->key ?></dt>
159 <dd><?php echo $this->value ?></dd>
163 そして "モデル" はこのようになります。
166 <programlisting language="php"><![CDATA[
168 array('key' => 'Mammal', 'value' => 'Camel'),
169 array('key' => 'Bird', 'value' => 'Penguin'),
170 array('key' => 'Reptile', 'value' => 'Asp'),
171 array('key' => 'Fish', 'value' => 'Flounder'),
177 <classname>PartialLoop</classname> ヘルパーを実行します。
180 <programlisting language="php"><![CDATA[
182 <?php echo $this->partialLoop('partialLoop.phtml', $model) ?>
186 <programlisting language="html"><![CDATA[
203 <example id="zend.view.helpers.initial.partial.modules">
204 <title>他のモジュールの Partial のレンダリング</title>
207 時には partial が別のモジュールに存在することもあるでしょう。
208 そのモジュールの名前がわかっていれば、モジュール名を
209 <methodname>partial()</methodname> あるいは <methodname>partialLoop()</methodname>
211 <varname>$model</varname> を 3 番目の引数に移動させることができます。
215 たとえば、'list' モジュールにある pager というスクリプトを使用したい場合は、
219 <programlisting language="php"><![CDATA[
220 <?php echo $this->partial('pager.phtml', 'list', $pagerData) ?>
224 こうすると、特定の partial を他のモジュールで再利用できるようになります。
225 再利用可能な partial は、共有のビュースクリプトのパスに配置することをおすすめします。