Ссылка на блок на статической странице
-
16-10-2019 - |
Вопрос
У меня есть статическая страница, на которой я называю динамический блок:
{{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();
?>