Magento的二次开发 , 最重要的一点 ,就是尽量不要修改Magento的核心文件. 一旦修改了magento的核心文件,以后如果要对magento进行升级, 那将是一个恶梦, 同时,也容易造成不同模块间的冲突, 背离magento模块之间低耦合的设计思想。
Magento自身也提供了二次开发模式,即对magento的model, block, controller 进行重写
首先, 我们要创建一个新的module, 具体方法可以参见这里
一个新的module是一个独立的模块, 重写magento核心的模块的关键在于, 配置config.xml文件
现在我以重写购物车方法的例子进行讲解
新的模块是 /app/code/local/App/Xcheckout 即(
/app/code/local/<Namespace>/<Module>/
)
配置config.xml文件 ,重写购物车中Onepage的model, block 和controller,配置如下:
<config>
<modules>
<Mage_Xcheckout>
<version>0.0.1</version>
</Mage_Xcheckout>
</modules>
<global>
<rewrite>
<Lapss_xcheckout_onepage>
<from><![CDATA[#^/checkout/onepage/#]]></from>
<to>/xcheckout/onepage/</to>
</Lapss_xcheckout_onepage>
</rewrite>
<blocks>
<checkout>
<rewrite>
<onepage_payment_methods>Lapss_Xcheckout_Block_Onepage_Payment_Methods</onepage_payment_methods>
</rewrite>
</checkout>
</blocks>
<models>
<checkout>
<rewrite>
<type_onepage>Lapss_Xcheckout_Model_Type_Onepage</type_onepage>
</rewrite>
</checkout>
</models>
</global>
<frontend>
<routers>
<Lapss_Xcheckout>
<use>standard</use>
<args>
<module>Lapss_Xcheckout</module>
<frontName>xcheckout</frontName>
</args>
</Lapss_Xcheckout>
</routers>
<layout>
<updates>
<checkout>
<file>xcheckout.xml</file>
</checkout>
</updates>
</layout>
</frontend>
</config>
config.xml详细说明:
1.指定需要重写的模块具体
<rewrite>
<Lapss_xcheckout_onepage>
<from><![CDATA[#^/checkout/onepage/#]]></from>
<to>/xcheckout/onepage/</to>
</Lapss_xcheckout_onepage>
</rewrite>
2.针对block的重写
<blocks>
<checkout>
<rewrite>
<onepage_payment_methods>Lapss_Xcheckout_Block_Onepage_Payment_Methods</onepage_payment_methods>
</rewrite>
</checkout>
</blocks>
3.针对model的重写
<models>
<checkout>
<rewrite>
<type_onepage>Lapss_Xcheckout_Model_Type_Onepage</type_onepage>
</rewrite>
</checkout>
</models>
4.针对contoller的重写
<rewrite>
<Lapss_xcheckout_onepage>
<from><![CDATA[#^/checkout/onepage/#]]></from>
<to>/xcheckout/onepage/</to>
</Lapss_xcheckout_onepage>
</rewrite>
<routers>
<Lapss_Xcheckout>
<use>standard</use>
<args>
<module>Lapss_Xcheckout</module>
<frontName>xcheckout</frontName>
</args>
</Lapss_Xcheckout>
</routers>
5.新模块的布局文件
<layout>
<updates>
<checkout>
<file>xcheckout.xml</file>
</checkout>
</updates>
</layout>
注意:你需要把这个模块的所有Controller都重写,这可能会带来很大的麻烦, 为了避免这个问题,config.xml可以采用以下方法:
把以下代码
<rewrite>
<Lapss_xcheckout_onepage>
<from><![CDATA[#^/checkout/onepage/#]]></from>
<to>/xcheckout/onepage/</to>
</Lapss_xcheckout_onepage>
</rewrite>
替换成
<routers>
<onepage>
<rewrite>
<to>App_Onepage/onepage</to>
<override_actions>true</override_actions>
<actions>
<noroute><to>App_Onepage/onepage</to></noroute>
</actions>
</rewrite>
</onepage>
</routers>