Вопрос

У меня есть статическая страница, на которой я называю динамический блок:

{{block type="custommodule/search" name="custommodule_search" template="custommodule/search.phtml" }}

В файле макета моего пользовательского модуля я добавляю двух детей моего блока CustomModule_search:

<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>

Все, что я хочу, это иметь возможность назвать эти два блока с этим:

$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