右側のサイドバーを再編成しようとしています。テンプレート (2columns-right) では、次のように呼び出します。
<?php echo $this->getChildHtml('right') ?>
この変数の内容はどこで確認できますか?
右側のサイドバーを再編成しようとしています。テンプレート (2columns-right) では、次のように呼び出します。
<?php echo $this->getChildHtml('right') ?>
この変数の内容はどこで確認できますか?
method の呼び出しは、メソッドに渡された名前で子ブロックの HTML をロードするため、この場合はrightgetChildHtml()
という名前の子ブロックを探しています。
この子ブロックの場所を特定するには、どのブロックがこのメソッドを呼び出しているかを知る必要があります。メソッドへの特定の呼び出しがgetChildHtml()
メイン ページの列テンプレートに表示されることはわかっています。右は列の 1 つです。レイアウト ファイルを調べてpage.xml
、メソッド呼び出しが見つかったテンプレート ファイルを検索すると、次のようなものが見つかります。
<reference name="root">
<action method="setTemplate"><template>page/2columns-right.phtml</template></action>
<!-- Mark root page block that template is applied -->
<action method="setIsHandle"><applied>1</applied></action>
</reference>
<reference>
レイアウト ファイルでタグを使用すると、対象のブロックを変更でき、<action>
タグを使用すると、作業中のブロック内でブロック メソッドを実行できます。したがって、レイアウトのこのセクションは、ルートブロック内にテンプレートを設定します。このことから、メソッドを呼び出しているのはルートブロックであることがわかります。getChildHtml()
次に、レイアウト内でルートブロックが定義されている場所を見てみましょう。それは同じpage.xml
レイアウト ファイル内にあり、一番上にあるはずです。
<block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
...
<block type="core/text_list" name="right" as="right" translate="label">
<label>Right Column</label>
</block>
...
</block>
このブロックにはかなり多くのものが定義されていますが、rootという名前が付けられ、かなりの数の子ブロックが定義されていることがわかります。これらの子ブロックの 1 つにrightgetChildHtml()
という名前が付けられており、メソッドによって HTML が出力されているのはこのブロックです。ブロックタイプに注意することが重要です - core/text_list
. これは特殊なブロック タイプです。つまり、getChildHtml()
メソッドを使用してこのブロックの HTML をレンダリングすると、子ブロックもレンダリングされます。ブロック タイプがpage/html
ルート ブロックと同様である場合、右側のブロックに追加されたすべての子ブロックは、このブロック タイプを使用して独自のgetChildHtml()
メソッド呼び出しを必要とし、呼び出しのみが必要で、getChildHtml('right')
すべての子ブロックもレンダリングされます。
ご覧のとおり、ここで正しいブロックが定義されていますが、空です。これは、ルート ブロックを参照するタグ ( <reference name="root">
) を持っているのとまったく同じ方法で、他のレイアウト ファイルが右のブロックを参照することによって子ブロックを右のブロックに追加するためです。
<reference name="right">
...
</reference>
したがって、最終的にあなたの質問に答えるには (そしてうまくいけば、途中で少しお知らせします)、適切なpage.xml
ブロックへの参照以外のレイアウト ファイルを調べる必要があります。ここでは、メソッド呼び出しによって出力されたすべての子コンテンツを見つけることができます。getChildHtml()
独自のモジュール レイアウト ファイル、またはモジュールを作成していない場合はレイアウトファイルの右側のブロックに追加されるものを変更できます。ここでの回答のレイアウト ファイルについて、新しいブロックを追加し、他のレイアウト ファイルに追加されたブロックを削除するための構文例local.xml
を簡単に説明します。local.xml
<reference name="right">
<block type="yourmodule/yourblock" name="yourblock" as="yourblock" />
</reference>
このように、そこにカスタム ブロックを追加できます。