I've tried to find solution but with no results. My task is to write module. It should insert some html into existing block.
I noticed that when I used layout .xml files I can just insert my block into some reference like
<reference name="product.info">
<block type='googlethis/link' name="googlethis"
template="catalog/product/googlethis.phtml"/>
</reference>
and my block shows as well.
In other cases I should call getChildHtml()
method and it's not good because it makes to change template .phtml files.
So is there way to insert my phtml block into any other phtml block without calling getChildHtml()
?
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With