Add New Reference in Magento
18 Comments 5th MAR 2009 | Posted by Tomislav Bilic in Magento

If you already performed some Magento research, you will know that it is built on a fully modular model that gives great scalability and flexibility for your store. While creating a theme, you are provided with many content blocks that you can place in structural blocks. If you are not sure what they are, please read Designer’s Guide to Magento first. Magento provides few structural blocks by default and many content blocks. This article tells what needs to be in place to create new structural block.
What are structural blocks?
They are the parent blocks of content blocks and serve to position its content blocks within a store page context. Take a look at the image below. These structural blocks exist in the forms of the header area, left column area, right column…etc. which serve to create the visual structure for a store page. Our goal is to create a new structural block called “newreference”.

Step 1: Name the structural block
Open the file layout/page.xml in your active theme folder. Inside you will find lines like:
<block type="core/text_list" name="left" as="left"/> <block type="core/text_list" name="content" as="content"/> <block type="core/text_list" name="right" as="right"/>
Let’s mimic this and add a new line somewhere inside the same block tag.
<block type="core/text_list" name="newreference" as="newreference"/>
Good. Now we told Magento that new structural block exists with the name “newreference”. Magento still doesn’t know what to do with it.
Step 2: Tell Magento where to place it
We now need to point Magento where it should output this new structural block. Let’s go to template/page folder in our active theme folder. You will notice different layouts there. Let’s assume we want the new structural block to appear only on pages that use 2-column layout with right sidebar. In that case we should open 2columns-right.phtml file.
Let’s assume we wish the “newreference” block to be placed below 2 columns, but above the footer. In this case, our updated file could look like this:
<!-- start middle -->
<div class="middle-container">
<div class="middle col-2-right-layout">< ?php getChildHtml('breadcrumbs') ?>
<!-- start center -->
<div id="main" class="col-main"><!-- start global messages -->
< ?php getChildHtml('global_messages') ?>
<!-- end global messages -->
<!-- start content -->
< ?php getChildHtml('content') ?>
<!-- end content --></div>
<!-- end center -->
<!-- start right -->
<div class="col-right side-col">< ?php getChildHtml('right') ?></div>
<!-- end right --></div>
<div>< ?php getChildHtml('newreference') ?></div>
</div>
<!-- end middle -->
Step 3: Populating structural block
We have the block properly placed, but unfortunately nothing is new on the frontsite. Let’s populate the new block with something. We will put new products block there as an example. Go to appropriate layout XML file and add this block to appropriate place.
<reference name="newreference"> <block type="catalog/product_new" name="home.product.new" template="catalog/product/new.phtml" /> </reference>
That’s it. I hope it will help someone

















March 5th, 2009 at 19:50
Good post!
Check it, on step 3:
–> the name must be newreference, according with you layout.
Greetings!
March 5th, 2009 at 20:23
Thanks Pablo. Good blog you have. I corrected my post and updated Step 3. Have a good day.
March 6th, 2009 at 17:40
Thanks to you, your posts are useful and effective.
March 6th, 2009 at 23:00
Step3: “..Go to appropriate layout XML file and add this block..”
Thank you Tomislav, but what would be an “appropiate” XML temlate file, in this case?
Could you please explain it?
I came here from this post: http://www.magentocommerce.com/boards/viewthread/8085/, and still can’t grasp the logic.
What would be really great, is to understand how can I conclude that contents of the “” from the “page.xml”, is defined precisely in “catalog.xml” file and nowhere else?
ps
Nice blog, keep it going)
March 6th, 2009 at 23:04
missing:
“…how can I conclude that contents of the “left” block (which is left column in a template) from the “page.xml”…”
March 7th, 2009 at 9:23
Hello Janis,
As I wrote at the beginning of the article, I advise you to read Designers Guide to Magento. Most of your questions are explained there. I hope it helps.
Let me know if you have questions after you analyze the guide.
March 10th, 2009 at 13:04
Thank you very much!
Good post!
March 14th, 2009 at 14:00
Thanks…
But. How to create block over header?
April 1st, 2009 at 14:53
i`d like to submit your rss just for magento category, how can i do that?
May 16th, 2009 at 0:04
how can I set up this new block to have different static blocks in it depending upon what page it is on.
May 22nd, 2009 at 13:44
I use Free CMS, it’s very useful. You can see the demo here: http://demo.hello-magento.com/freecms/furniture.html
June 1st, 2009 at 5:45
How do i add custom block inside template file: http://www.magentocommerce.com/boards/viewthread/43897/
Thanks.
July 15th, 2009 at 15:33
Step 3: Populating structural block
We have the block properly placed, but unfortunately nothing is new on the frontsite. Let’s populate the new block with something. We will put new products block there as an example. Go to appropriate layout XML file and add this block to appropriate place.
i have put this on catalog.xml ok?
But i don’t know the line, i think that is:
catalog_seo_searchterm_popular>
page/1column.phtml
July 20th, 2009 at 17:55
Hey Thanks! This put me on the right track quickly. Spent a while with wiki and still couldn’t see what was up… Thanks for the quick step-by-step. Keep up the good work!
August 20th, 2009 at 21:30
Thanks ! your posts are useful and effective .
I create such type of block .
But …..how we add multiple static images in created structural block ?
September 9th, 2009 at 21:04
What about creating a new content block. How is it defined? Can I add a content block as a Custom Layout Update as I only need it included on one page?
September 16th, 2009 at 13:04
Thanks. You have sloved my problem………
December 22nd, 2009 at 1:16
Good stuff for real! Thanks.