您的位置:首页 > 其它

重写magento的model, block 和controller

2017-07-18 10:34 281 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: