Magento calling a block with getChildHtml

blocklayoutmagento

Please follow the code bellow, which is taken from my Magento Commerce theme:

extract from layout/page.xml

<block type="page/html_header" name="header" as="header">
    <block type="page/template_links" name="top.links" as="topLinks"/>
    <block type="page/switch" name="store_language" as="store_language" template="page/switch/languages.phtml"/>
    <block type="page/switch" name="store_switcher" as="store_switcher" template="page/switch/stores.phtml"/>
    <block type="directory/currency" name="store_currency_selector" as="store_currency_selector" template="directory/currency_top.phtml"/>
    <block type="core/text_list" name="top.menu" as="topMenu" translate="label">
        <label>Navigation Bar</label>
        <block type="page/template_links" name="top.links.mobile" as="topLinksMobile"/>
        <block type="checkout/cart_sidebar" name="cart_sidebar_mobile" as="cartSidebarMobile" template="checkout/cart/topbar.phtml"/>
    </block>
    <block type="page/html_wrapper" name="top.container" as="topContainer" translate="label">
        <label>Page Header</label>
        <action method="setElementClass"><value>top-container</value></action>
    </block>
    <block type="checkout/cart_sidebar" name="cart_sidebar" as="topcart" template="checkout/cart/topbar.phtml"/>
</block>

extract from template/catalog/navigation/top.phtml

<li class="level0 nav-2 active level-top first parent">
    <a href="javascript:;">ACCOUNT</a>
    <?php echo $this->getParentBlock()->getChildHtml('topLinksMobile'); ?>
</li>
<li class="level0 nav-3 active level-top first parent">
    <a href="javascript:;">CART</a>
    <?php echo $this->getChildHtml('cartSidebarMobile'); ?>
</li>

Basically, what I'm trying to do, is create two sub-blocs inside the "topMenu" block, and than print them into the template by using "getChildHtml" function.

Unfortunately, my function call fails, while the two blocks are loaded before my top.phtml generated content.

Please give me some advice about what am I doing wrong.

Many thanks in advance.

Best Answer

I've advanced a bit.

By reading: Magento - display block but only show when I call it with getChildHtml

and: Understanding Magento Block and Block Type

I understood that core/text_list automatically prints the content, so I've changed the type to "page/html_wrapper".

Problem is that now the content of those two elements are duplicated. Once before the content of top.phtml, and the second when getChildHtml is called.

Any ideas would be much appreciated.

Related Topic