Hashid Hameed
Hashid Hameed

Reputation: 898

How to place my custom block inside another block in Magento using layout xml?

first of all I want to say that I have searched for this whole day on te internet and could not find what I wanted. I am a newbie here as well, so please forgive me if I broke any rule.

I am trying to develop a module which will add videos to product page along with images. I am stuck in this concept:

How do I insert my block into an existing base block ? For example, in the product page, there is a block product.info. Inside this block there is "Availability", "Price" etc. How do I insert my custom block just below "Availability" and above "Prices" using my module's layout xml and template.

So I am trying to achieve something like this using my module's layout file:

 <catalog_product_view translate="label">
        <reference name="content">
            <reference name="product.info">
                WRITE BLOCK HERE SO THAT MY BLOCK SHOWS BELOW AVAILABLITY
            </reference>
        </reference>
    </catalog_product_view>

Is this possible ? or Do I have to override the core class Mage_Catalog_Block_Product_View to do this ?

PS: Basically my aim is to list my videos next to images. Right now, I am able to list my videos from module, but images don't come in that case. I used

<block type="myblock/myblock" name="somename" as="media" template="abc.phtml"/>

So I want to append my block to the existing content.

Upvotes: 5

Views: 8558

Answers (3)

Mukesh Chapagain
Mukesh Chapagain

Reputation: 25968

Note output="toHtml" in the below code. This will print your block in product.info section.

<catalog_product_view translate="label">
    <reference name="content">
        <reference name="product.info">
            <block type="myblock/myblock" name="somename" as="media"
                template="abc.phtml" output="toHtml" before="-" />
        </reference>
    </reference>
</catalog_product_view>

Upvotes: 1

Hashid Hameed
Hashid Hameed

Reputation: 898

I solved it. I had to rewrite the Mage_Catalog_Block_Product_View_Media .

In my class I over-rid the function _toHtml function like this:

public function _toHtml()
{
    $html = parent::_toHtml();
    $html.=$this->getChildHtml('media_video');
    return $html;
}

where "media_video" is my block. My layout xml file:

<catalog_product_view translate="label">
    <reference name="content">
        <reference name="product.info">
            <reference name="product.info.media">
            <block type="myblock/myblock" name="somename" as="media_video" template="beta/abc.phtml"
                   before="-"/>
            </reference>
        </reference>
    </reference>
</catalog_product_view>

Upvotes: 2

Jack G.
Jack G.

Reputation: 37

You can add new block instead of over-right existing.

 <catalog_product_view translate="label">
    <reference name="content">
        <reference name="product.info">
    <block type="myblock/myblock" name="somename" as="media_new" template="abc.phtml"/>
        </reference>
    </reference>
</catalog_product_view>

Get New Block using following code in phtml file

<?php echo $this->getChildHtml('media_new') ?>

Thanks

Upvotes: 1

Related Questions