MagentoのgetChildHtmlメソッドの理解

This image has an empty alt attribute; its file name is magento-1.jpg

「getChildHtml」メソッドは、ブロック/テンプレートの真の力です。「getChildHtml」メソッドは、ブロック/テンプレートの真価を発揮するもので、主ブロック(「親」)の中の副ブロック(「子」)の中にあるすべてのブロックをレンダリングすることができます。ブロックがブロックを呼び出すことで、ページのHTMLレイアウト全体が作られます。

フォーマット

<?= $block->getChildHtml('block_name'); ?>

注意Magento 2コーディング標準によると、「$ this」の使用は推奨されていないため、PHTMLテンプレートファイルでは「$ this」の代わりに「$ block」を使用してください。

コマンドがテンプレートファイル内のどこかで「block_name」を見つけることができる場合、「block_name」が現在のブロックの子である場合にのみ、「block_name」のHTMLを取得します。

例えば:module-wishlistのテンプレートファイル(view.phtml)を抜粋して見てみましょう。

<?php if ($this->helper(\Magento\Wishlist\Helper\Data::class)->isAllow()) : ?>
    <div class="toolbar wishlist-toolbar"><?= $block->getChildHtml('wishlist_item_pager'); ?></div>
    <?= ($block->getChildHtml('wishlist.rss.link')) ?>

ここで、クラスの「wishlist-toolbar」のコンテンツが、「wishlist_item_pager」と「wishlist.rss.link」というブロックによってレンダリングされているのがわかります。これらのブロックは子ブロックで、「wishlist_index_index.xml 」(vendor_magento_module-wishlist_view\frontend\layout) に定義されています。

<referenceContainer name="content">
            <block class="Magento\Wishlist\Block\Customer\Wishlist" name="customer.wishlist" template="Magento_Wishlist::view.phtml" cacheable="false">
                <block class="Magento\Theme\Block\Html\Pager" name="wishlist_item_pager"/>
                <block class="Magento\Wishlist\Block\Rss\Link" name="wishlist.rss.link" template="Magento_Wishlist::rss/wishlist.phtml"/>
                </block>
                </block>
            </block>
</referenceContainer>

注意:「getChildHtml」メソッドは、「Layout」のサブブロック(子)として指定されたブロックのみを含めることができます。これにより、Magento は必要なブロックのみをインスタンス化することができ、また、コンテキストに応じてブロックに異なるテンプレートを設定することができます。

デモを申し込む

弊社の専門家は最適なソリューションをサポートさせて頂きます。

►►►サービスについて