:::: MENU ::::

Magento certification: Which layout nodes correspond to certain URL

4.56 avg. rating (88% score) - 9 votes

The way Magento loads the layout starts when the controller serving the current request calls to:


This call starts the process of compiling and generating all the blocks that will be used in a later phase to generate the current page contents. The process of geting the proper nodes from the layout requires the following steps:

  • Get the layout handles to use
  • Get the layout portions to this handles
  • Merge the layout handles requested

If we look at the contents of the method loadLayout, we’ll see this:

public function loadLayout($handles = null, $generateBlocks = true, $generateXml = true)
  // This takes the custom handles we pass through the call to the method 
  // as a parameter. This handles are added to the actual handles corresponding
  // the current page
  if (false!==$handles && ''!==$handles) {
      $this->getLayout()->getUpdate()->addHandle($handles ? $handles : 'default');

  // This adds some handles depending on the page we are rendering. We'll se below.

  . . . more code . . .

If we look at the method addActionLayoutHandles we’ll see most of the handles used for a particular call:

public function addActionLayoutHandles()
    $update = $this->getLayout()->getUpdate();

    // // This adds the 'per store' handle, which will look like STORE_en
    // if you named the stores with the associated language code

    // This a 'per theme' handle, and looks like
    // THEME_frontend_<package-name>_<theme-name>
    $package = Mage::getSingleton('core/design_package');

    // Finally, Magento adds the controller-action handle. If we are 
    // loading a category page, this will look like:
    // catalog_category_view (module_controller_action)

    return $this;

So the method addActionLayoutHandles is the one we were looking for.

Hey! Qué opinas sobre el artículo?