Magento. Insert block into another without change template code Magento. Insert block into another without change template code xml xml

Magento. Insert block into another without change template code


There is a way to do this, although it is not an entirely elegant solution. It will work in most instances though and has proved helpful on occasion.

Basically the idea is that you replace the block you want to render your block before/after in your layout XML, place that block as a child in your block and then render it's output before/after yours.

So let's say you wanted to output a block before the totals block on the cart details page, you could do the following in your extension's layout.xml

<checkout_cart_index>    <reference name="checkout.cart">        <block type="myextension/block" name="myextension.block" as="myextension_block" template="myextension/template.phtml">            <action method="setChild"><name>totals</name><block>totals</block></action>        </block>        <action method="setChild"><name>totals</name><block>myextension.block</block></action>    </reference></checkout_cart_index>

Then in your template.phtml file you would have:

<div id="myextension">    // Your template code</div>// Render the totals block that you placed inside your block<?php echo $this->getChildHtml('totals'); ?>

As I said, this won't fit every situation and it's not incredibly elegant, but it does work.

Jon


No, there is not a generic way to add your block to any other block. The reason it works occasionally for you is that there are some block types that just enumerate their children (core/text_list being one of those) and some templates manually do the same (using $this->getChild()).

If you want to add your block underneath a block that fits neither of these criteria, you will need to modify the template to echo that block.


You can try add to xml - following method output="toHtml" - will put block to parent blockBut...

<reference name="product.info">    <block type='googlethis/link' name="googlethis" output="to Html" template="catalog/product/googlethis.phtml"/></reference>