質問

動的ブロックを呼び出す静的ページがあります:

{{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();
?>
ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top