Magento的Module layout update

在Magento中xml是模块配置的利器,有时开发一个Magento的模块时,需要添加模块的layout update。

添加前台的layout XML需要在模块的config.xml添加frontend节点。

<frontend>
    <layout>
        <updates>
	    <name><!-- 模块的名字一般模块命名moduleNameSpace_moduleName,主要这里是moduleName。-->
	        <file>name.xml</file><!-- layout Xml命名自定义-->
	    </name>
	</updates>
    </layout>
</frontend>

添加后台的layout xml需要在config.xml添加adminhtml节点

<adminhtml>
    <layout>
        <updates>
	    <name><!-- 模块的名字一般模块命名moduleNameSpace_moduleName,主要这里是moduleName。-->
	        <file>name.xml</file><!-- layout Xml命名自定义-->
	    </name>
	</updates>
    </layout>
</adminhtml>

需要注意的是name.xml的位置,Magento 查找layout文件的顺序为

/app/design/frontend/default/default/layout/name.xml
/app/design/frontend/base/default/layout/name.xml

推荐放在

/app/design/frontend/default/default/layout/name.xml

即可。

在name.xml文件中可以修改页面的布局。

<?xml version="1.0" encoding="UTF-8"?>
<layout>
    <customer_account_create>
        <reference name="head">
	    <action method="addItem" ifconfig="customer/address/enabled"><type>skin_js</type><name>js/name.js</name><params/></action>
	</reference>
    </customer_account_create>
</layout>

在这个name.xml中向head添加了一段js。神奇的地方在于可以在xml里自定义加载条件,如ifconfig属性。

Magento解析到该模块的layout xml时会判断ifconfig属性的值为true or false。根据ifconfig的值来决定是否执行addItem方法。

换成php语言的逻辑如下:

 
if(customer/address/enabled == true){
//exe addItem method
//add name.js to head
}

注意name.js的路径和name.xml的类似,同样是从查找顺序为:

/skin/frontend/default/default/js/name.js
 
/skin/frontend/base/default/js/name.js