webdevqa.jp.net

<?php echo $ this-> getChildHtml( ’right’)の内容はどこにありますか?>

右側のサイドバーを再編成しようとしています。テンプレート(2列-右)では、次のように呼び出します。

<?php echo $this->getChildHtml('right') ?>

この変数の内容はどこにありますか?

9
Urvisha

メソッドgetChildHtml()を呼び出すと、メソッドに渡される名前で子ブロックのHTMLが読み込まれるため、この場合、rightという名前の子ブロックを探します。

この子ブロックを見つける場所を決定するには、どのブロックがこのメソッドを呼び出しているかを知る必要があります。 getChildHtml()メソッドへの特定の呼び出しは、メインページの列テンプレートにrightが列の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>_タグを使用すると、作業中のブロック内でブロックメソッドを実行できます。したがって、レイアウトのこのセクションでは、テンプレートをrootブロック内に設定します。このことから、getChildHtml()メソッドを呼び出すのはrootブロックであることがわかります。

次に、rootブロックがレイアウト内で定義されている場所を見てみましょう。これは、同じ_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つはrightという名前で、HTMLがgetChildHtml()メソッドによって出力されているのはこのブロックです。ブロックタイプ-_core/text_list_に注意することが重要です。これは特別なブロックタイプです。つまり、getChildHtml()メソッドを使用してこのブロックのHTMLをレンダリングすると、子ブロックもレンダリングされます。ルートブロックのようにブロックタイプが_page/html_の場合、rightブロックに追加されるすべての子ブロックには、独自のgetChildHtml()メソッドが必要になります。このブロックタイプを使用して呼び出すと、getChildHtml('right')を呼び出すだけで、すべての子ブロックもレンダリングされます。

ご覧のとおり、rightブロックはここで定義されていますが、空です。これは、ルートブロック(_<reference name="root">_)を参照するタグがあるのとまったく同じ方法で、他のレイアウトファイルが参照することによってrightブロックに子ブロックを追加するためです。rightブロック。

_<reference name="right">
    ...
</reference>
_

したがって、最終的にあなたの質問に答える(そしてうまくいけば途中で少し知らせる)には、rightへの参照について_page.xml_以外のレイアウトファイルを探す必要があります/ブロック、ここにはgetChildHtml()メソッド呼び出しによって出力されたすべての子コンテンツがあります。

独自のモジュールレイアウトファイルのrightブロックに追加される内容、またはモジュールを作成していない場合は_local.xml_レイアウトファイルを変更できます。答えの_local.xml_レイアウトファイルについて簡単に説明します ここ 新しいブロックを追加し、他のレイアウトファイルに追加されたブロックを削除する構文例を示します。

22
Jonathan Hussey

Layout.xmlファイルには、すべてがどこから来るのかがわかります。そこには、呼び出し.phtmlファイルとデータがそこから来るリストブロックがあります。私が伝えようとしていることを理解していただければ幸いです。

1
Chiragit007
<reference name="right">  
    <block type="yourmodule/yourblock" name="yourblock" as="yourblock" />
 </reference>

このように、あそこにカスタムブロックを追加できます。

0
Chiragit007