
「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 は必要なブロックのみをインスタンス化することができ、また、コンテキストに応じてブロックに異なるテンプレートを設定することができます。