クロスセルブロックを通常の場所とページの下部に表示しようとしています。複数のphtmlテンプレートファイルが関係しているため、現在、ブロックはcart.phtmlファイルにのみ存在するように設定されているため、$this->getChildHtmlは2番目の場所では機能しません。
要約すると、同じブロックを複数のテンプレートファイルに表示するにはどうすればよいですか?これらの変更をlocal.xmlに配置したくないので、コアMagentoテンプレートファイルを変更したくありません。
このブロックのコア レイアウト ディレクティブは、checkout.cartブロックの子として設定されます。
<checkout_cart_index translate="label">
<!-- ... -->
<reference name="content">
<block type="checkout/cart" name="checkout.cart">
<!-- ... -->
<block type="checkout/cart_crosssell" name="checkout.cart.crosssell" as="crosssell" template="checkout/cart/crosssell.phtml"/>
</block>
</reference>
</checkout_cart_index>
フッターに追加するには、 local.xmlで別の親子関係を確立するだけでよい場合があります。
<checkout_cart_index>
<reference name="footer">
<action method="insert"><!-- or "append" to add to the end -->
<child>checkout.cart.crosssell</child>
</action>
</reference>
</checkout_cart_index>
このアプローチは、すべての子ブロックをレンダリングする空の呼び出しを含むストックpage/html/footer.phtmlテンプレートに依存しています。getChildHtml()
フッター ブロック クラスMage_Page_Block_Html_Footer
には無期限のblock_html
キャッシュ ライフタイムがあり、キャッシュ エントリの子コンテンツを評価しないことに注意してください。クロスセル ブロックのさまざまなコンテンツを考慮して、このブロックのキャッシュを無効にするか、ブロック クラスを書き換える必要がある場合があります。