getChildHtmlとgetBlockHtmlの違いは何ですか


11

あらすじ

  • 違いは何であるgetChildHtmlとはgetBlockHtml
  • テンプレートでcms / blockタイトルを取得するにはどうすればよいですか?

基本的にフッターを自分のフッターに置き換え、自分のフッターを設定しました。<?= $this->getChildHtml('...') ?>これは、使用するまで機能しませんでした<?= $this->getBlockHtml('...') ?>

レイアウトXML:

<layout>
    <default>
        <block type="core/template" name="custom_footer" as="footer" template="page/html/footer.phtml">
            <block type="cms/block" name="child_1">
                <action method="setBlockId"><block_id>footer_child_1</block_id></action>
            </block>
         </block>
    </layout>
</default>

テンプレート(機能しません):

<footer>
    <div class="row">
        <div class="col-sp4"><?= $this->getChildHtml('child_1') ?></div>
    </div>
</footer>

テンプレート(作品):

<footer>
    <div class="row">
        <div class="col-sp4"><?= $this->getBlockHtml('child_1') ?></div>
    </div>
</footer>

解決:

最初に、次の方法でフッターをオーバーライドする必要がありlocal.xmlました。

<default>
    <block type="core/template" template="page/html/custom_footer.phtml" name ="custom_footer" as "footer" />
</default>

私は子供たちを追加しなければなりませんでした(が機能するためgetChildHtml()に):

<reference name="footer">
    <block type="cms/block" name="child_1">
         <action method="setBlockId"><block_id>footer_child_1</block_id></action>
    </block>
</reference>

回答:


27

getBlockHtml('block_name_here')block_name_hereレイアウトで見つかった場合は、名前の付いたブロックのhtmlを取得します。そのブロックが現在のブロックの子である場合にのみ
getChildHtml('block_name_here')、名前の付いたブロックのhtmlを取得しますblock_name_here

例を示します。次のレイアウトセクションを検討してください

<block type="core/template" template="some_template.phtml" name="some_name" />
<block type="core/template" template="some_other_template.phtml" name="some_other_name" />

テンプレートファイルで、some_template.phtmlこのコード行を追加する<?php echo $this->getBlockHtml('some_other_name')?>と、ブロックのHTMLが取得されますsome_other_name
追加した<?php echo $this->getChildHtml('some_other_name')?>場合、何も得られません。

次のシナリオでは

<block type="core/template" template="some_template.phtml" name="some_name">
    <block type="core/template" template="some_other_template.phtml" name="some_other_name" />
</block>

getChildHtmlそしてgetBlockHtmlあなたは同じことを得るでしょう。ブロックのhtml some_other_name


ありがとう-それで私は私の更新された質問でそれ<block type="cms/block" name="child_1">footerブロックの子であると考えるのは正しいですか?その場合、 `getChildHtml( 'child_1')が機能しないのはなぜですか?

@灰。私はあなたの場合getChildHtml、レイアウトページ(たとえば3columns.phtml)がデフォルトのフッターブロックをレンダリングするので機能しないと思います<?php echo $this->getChildHtml('footer') ?>。私は正しいですか?レイアウトページがどのように見えるのかわからないので、ここで暗闇の中で撮影していますが、これは最初に確認するものです。に変更して<?php echo $this->getChildHtml('custom_footer') ?>、を使用できるかどうかを確認してくださいgetChildHtml
マリウス

私はあなたが正しいと思います。動作していた古いフッターブロックを上書きしました-実際の問題はMagento関連ではありませんでした。あなたの答えは私の仮定をクリアします-d00dに感謝します:)
ash
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.