Magento allows you to add names and aliases to your blocks when adding a block within layout XML configuration. This is done by defining a block with name
and as
attributes.
<block type="core/template" name="module.custom.block" as="custom_block" template="custom/template.phtml" />
Often it is unclear what the purpose of these attributes are used for.
When defining a block, the name
should be unique. You can then use this name when creating a <reference>
.
<?xml version="1.0"?>
<layout>
<default>
<block type="core/template" name="module.custom.block" as="custom_block" template="custom/template.phtml" />
<reference name="module.custom.block">
<!-- Add code here -->
</reference>
</default>
</layout>
The block alias, as
, is just used to simplify the long name of a block and the only differs with the scope.
If a block contains both name
and as
attributes and these values are different, when using $this->getChildHtml()
, the alias value should be passed in as a parameter.
<?php echo $this->getChildHtml('custom_block');
Aliases are not required when defining blocks, so if one doesn’t exist, the block name can be used within $this->getChildHtml()
.
There are a couple of different ways to remove blocks within Magento. Either using the <remove>
node, or using the unsetChild
action method.
For example, to remove the search bar in the RWD theme: the search block is defined in the catalogsearch.xml
file.
// app/design/frontend/rwd/default/layout/catalogsearch.xml
<reference name="header">
<block type="core/template" name="top.search" as="topSearch" template="catalogsearch/form.mini.phtml"/>
</reference>
You can use the <remove>
method, for example, in your custom theme’s local.xml
file.
// app/design/frontend/[your_package]/[your_theme]/layout/local.xml
<?xml version="1.0"?>
<layout>
<default>
<remove name="top.search" />
</default>
</layout>
Where the name
attribute is the name of the block, and not the alias.
This is contrary to using unsetChild
, where if a block’s name and alias have been defined, the as value is used instead.
This might seem confusing as the alias value is added within a pair of <name>
nodes.
// app/design/frontend/[your_package]/[your_theme]/layout/local.xml
<?xml version="1.0"?>
<layout>
<default>
<reference name="header">
<action method="unsetChild">
<name<topSearch</name>
</action>
</reference>
</default>
</layout>
Similar to $this->getChildHtml()
, if an alias has not been defined, you can use the block’s name
attribute when using unsetChild()
.