Magento: ссылка на пользовательский блок не работает - PullRequest
2 голосов
/ 30 ноября 2011

Я пытаюсь сослаться на блок из другого пользовательского модуля, чтобы добавить дочерний блок через файл макета, но он не работает.

Первый файл макета содержит

<catalog_product_view>
    <reference name="content">
        <block type="core/template" name="tabcontainer" as="tabcontainer"
            template="store/tabcontainer.phtml" >
            <block type="catalog/product_list_related" name="kitparts"
                template="store/product/kitparts.phtml"/>
        </block>
    </reference>
</catalog_product_view>

, а во втором я пытаюсь сослаться на блок tabcontainer

<catalog_product_view>
    <reference name="tabcontainer">
        <block type="productshippinginfo/productshipping" name="productshippinginfo"
            template="productshippinginfo/productshipping.phtml" after="kitparts"/>
    </reference>
</catalog_product_view>

, но блок productshippinginfo не отображается, пока он определенно включен в макет (с помощью плагина layoutViewer Alan Storm). Если я ссылаюсь content, он отображается.

Что не так? Разве нельзя добавить дочерний элемент в пользовательский блок из пользовательского расширения?

Спасибо за вашу помощь!

(я использую Magento 1.6.1.0)

[править] в tabcontainer.phtml я звоню <?php echo $this->getChildHtml(); ?>

Ответы [ 3 ]

4 голосов
/ 09 февраля 2012

Прежде всего: Спасибо Vinai !

Добавление зависимости для управления порядком загрузки моих плагинов работает!

в файле: app / etc /modules / Company_ContentModule.xml

<Company_ContentModule>
  <active>true</active>
  <codePool>local</codePool>
  <depends>
    <Company_ContainerModule />
  </depends>
</Company_ContentModule>

Таким образом, модуль содержимого загружается после модуля контейнера.

1 голос
/ 30 ноября 2011

Вы рядом.Вам просто нужно добавить это к вам store/tabcontainer.phtml file:

getChildHtml ('productshippinginfo');?>

Причиной того, что блоки-потомки «содержимого» отображаются без изменения шаблона, является то, что блок «содержимое» является блоком core/text_list.Если вы посмотрите на Mage_Core_Block_Text_List, вы увидите, что в своем методе рендеринга (_toHtml()) он рендерит свои дочерние элементы.

Вы также можете добавить пустой getChildHtml() вызов к вашему шаблону tabcontainer для достиженияэффект, аналогичный core/text_list - фактически, если вы используете getChildHtml('',false,true);, вы получите отсортированные дочерние элементы (с параметрами before="" и after="").


РЕДАКТИРОВАТЬ: скорректировал синтаксис вызова getChildHtml (), основываясь на правильном выводе комментария OP, что первый параметр должен быть пустой строкой в ​​/ o / ta логический.

0 голосов
/ 30 ноября 2011

Во втором макете я думаю, что вы должны предоставить вложенность:

<catalog_product_view>
<reference name="content">
<reference name="tabcontainer">
    <block type="productshippinginfo/productshipping" name="productshippinginfo"
        template="productshippinginfo/productshipping.phtml" after="kitparts"/>
</reference>
</reference>
</catalog_product_view>

Для того, чтобы maganto поднял это

И потому что вы делаете

<?php echo $this->getChildHtml(); ?>

Вам не нужно специально называть его по имени, если только вы не хотите, чтобы он появлялся в определенном месте в выводе HTML.

Чтобы проверить, появляется ли ваш блок на странице вообще, добавьте output ="toHtml" в вашем теге блока.

<block type="productshippinginfo/productshipping" name="productshippinginfo"
    template="productshippinginfo/productshipping.phtml" after="kitparts" output="toHtml"/>
...