:::: MENU ::::

Magento Certification: Rendering Blocks (part 1)

3.80 avg. rating (74% score) - 5 votes

Describe the programmatic structure of blocks in Magento

What are blocks used for in Magento?

Blocks are the main design element in Magento. A hierarchy of blocks is used to layout any page in a Magento store. Blocks in Magento divide into two big groups:

  • Structural Blocks
  • Content Blocks

Programmatically there are no difference between them, but structural blocks are use in Magento to define main areas of a page, while content blocks are used to render a particular area of it.

For example, in a typical home page of a Magento Store you may see a (simplified) hierarchy similar to the following:

  • Page
    • Header
    •     Login
    •     Cart
    •     Navigation menu
    • Content
    •     Main Banner
    •     Latest Products
    • (Sidebar) Left
    •     Layered navigation
    •     Promo banner
    • Footer
    •     Copyright
    •     Terms and Conditions

Its a very simplified layout and the name are not as it should be in a real store, but Header, Content, Sidebar and Footer would be structural blocks, and everything down them would be content blocks.

What is the parent block for all Magento blocks?

All Magento blocks inherits Mage_Core_Block_Abstract that inherits directly from Varien_Object

Which class does each block that uses a template extend?

Any Magento Block that uses a template file, inherits from Mage_Core_Block_Template which inherits from Mage_Core_Block_Abstract

In which way does a template block store information about its template file?

A Magento template block stores the relative path to the template file in a protected variable _template that can be accessed to the corresponding setter and getter methods (setTemplate and getTemplate).

The stored path begins at the template folder but it doesn´t store information about the package or theme to be used. That is determined in Magento during the render phase, by the Mage_Core_Design_Package instance.

For example, the full template path for the cart block is:

/app/design/frontend/<package>/<theme>/checkout/cart/sidebar.phtml

The corresponding block will store only the last part of the path:

checkout/cart/sidebar.phtml

Does it store an absolute or a relative path to the template?

As told in the previous section, the path to a template file is stored in Magento in a relative way, without any information about the package or theme to be used.

What is the role of the Mage_Core_Block_Abstract class?

Mage_Core_Block_Abstract is the base class for all blocks in a Magento store and it provides basic functionallity for working with layout, block hierarchy (insert, remove childs…), output contents, and so on.




3 Comments

  • Responder Negin Nickparsa |

    Hi Daniel, Thank you for the article.

    what is the difference between rendering a layout and loading a layout? or rendering a block and loading a block?
    we have two functions which controller uses renderlayout and LoadLayout.

    • Responder Daniel Navarro Murillo |

      They do completely different things indeed.

      During the loadLayout call, magento looks in the layout xml files and gets a list of blocks that will be used during the current request. For example if the current request is the cart page, the list of blocks will include the header, footer, cart items, totals, and so on, but it won’t include others blocks like category view, contact form, etc. That is, loading a layout gets a list of the needed blocks.

      Also, at the end of the load layout stage, magento creates an instance of each of this blocks and applies the «actions» defined in the layout xml.

      One all of these is done, reder layout gets the output (html). The render stage starts with a call to the toHtml method of the root block, and then, all of its childs, and childs of childs, and so on. At the end of the render stage, the generated output is sent to the browser.

Hey! Qué opinas sobre el artículo?