静的ページのブロックを参照してください
-
16-10-2019 - |
質問
動的ブロックを呼び出す静的ページがあります:
{{block type="custommodule/search" name="custommodule_search" template="custommodule/search.phtml" }}
カスタムモジュールのレイアウトファイルには、CustomModule_Searchブロックの2人の子供を追加します。
<layout>
<default module="custommodule">
<reference name="custommodule_search">
<block type="custommodule/search_bysize" name="search_by_size" template="custommodule/search/by-size.phtml" />
<block type="custommodule/search_byvehicle" name="search_by_vehicle" template="custommodule/search/by-vehicle.phtml" />
</reference>
</default>
私が欲しいのは、これでこれら2つのブロックを呼び出すことができることです。
$this->getChildHtml('search_by_size')
またはこれ:
$this->getChildHtml('search_by_vehicle')
メインダイナミックブロックのテンプレートのどこにでも。
問題は、参照が「カスタムモジュール」ではなく「コンテンツ」である場合にのみ表示されることですが、このようにして、私が望む場所ではなく、「コンテンツ」ブロックの冒頭に表示されています。
解決
によってインスタンス化されたブロック {{block}}
ディレクティブは、レイアウトXMLファイルから参照できません。
それは、それらがの処理中にインスタンス化されるためです renderLayout()
各ブロックを呼び出すステップ toHtml()
方法。
レイアウトXMLは、その前に処理されます。 loadLayout()
ステップ。
これを回避するには、レイアウトXMLに親ブロックなしで子供ブロックを宣言します
<layout>
<default>
<block type="custommodule/search_bysize" name="search_by_size" template="custommodule/search/by-size.phtml" />
<block type="custommodule/search_byvehicle" name="search_by_vehicle" template="custommodule/search/by-vehicle.phtml" />
</default>
</layout>
それから、あなたの中に custommodule/search
ブロックテンプレートの使用 getBlockHtml()
それ以外の getChildHtml()
.
<?php echo $this->getBlockHtml('search_by_size') ?>
<?php echo $this->getBlockHtml('search_by_vehicle') ?>
他のヒント
カスタムブロックのテンプレートファイル custommodule/search.phtml
以下を使用して、子のブロックを表示し、レイアウトの変更を避けてください。
<?php
echo Mage::app()->getLayout()->createBlock('custommodule/search_bysize')->setTemplate('custommodule/search/by-size.phtml')->toHtml();
echo Mage::app()->getLayout()->createBlock('custommodule/search_byvehicle')->setTemplate('custommodule/search/by-vehicle.phtml')->toHtml();
?>
所属していません magento.stackexchange