magento模块 -重写某个magento模块的某个controller

重写某个magento模块的某个controller

 

当你需要对magento的某个功能进行修改时,创建新的模块重写现有模块的某个controller是必然的,因为你只是想修改其中的某个方法,而不需要动其它的controller,其它的类。

 

以重写checkout 模块的 OnepageController.php 为例子:

 

step one:创建新并注册新的模块

 

这个应该不用多说了,可以直接复制一个现有模块的文件目录结构,也可以只创建你需要修改的文件,当然要保持其目录结构层次。而且要包含必须的文件:每个模块的必须文件是config.xml,然后则是你要修改的那个文件。

模块文件:

  1. Magento/app/code/local/Company/Xcheckout/etc/config.xml
  2. Magento/app/code/local/Company/Xcheckout/controllers/OnepageController.php

注:我想理论上讲我们也可以在新的Company 包(package)中使用checkout作为模块名,但是我在实现过程中就因为这个出现问题,而且尽管我尝试跟踪代码想找出原因,却发现好像magento本身就是那么处理的,如果我判断没错的话,也许是一个不算bug的bug吧。

 

向magento注册新模块文件:

Magento/app/etc/modules/Company_All.xml

 

<config>
    <modules>
        <Company_Xcheckout>
            <active>true</active>
            <codePool>core</codePool>
            <depends>
                <Mage_Checkout />
            </depends>
        </Company_Xcheckout>
    </modules>
</config>

 

注:虽然说没指定depends也是可以的,不过我觉得显然我们的模块是要在原有的checkout模块基础上建立的,所以事实上是有依赖的,增加这个是比较合理的。

 

step2:编辑新建模块的config.xml文件,配置你要重写的controller。

 

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Company_Xcheckout>
            <version>0.1.0</version>
        </Company_Xcheckout>
    </modules>
    <global>
        <rewrite>
//原本以为这个名称有分大小写,而事实上是没有的。由于magento没有一个参考的文档,我们只能通过代码来验证。但是我在跟踪发现了这个并不现在magento论坛上他们所讲的那样是有分大小写的,当然,它必须是唯一的。
            <Company_xcheckout_onepage>
                <from><![CDATA[#^/checkout/onepage/#]]></from>
                <to>/xcheckout/onepage/</to>
            </Company_xcheckout_onepage>
        </rewrite>

 

//重写magento block
        <blocks>
            <checkout>
                <rewrite>
                    <onepage>Company_Xcheckout_Block_Onepage</onepage>
                    <onepage_billing>Company_Checkout_Block_Onepage_Billing</onepage_billing>
                </rewrite>
            </checkout>
        </blocks>
    </global>

//如果你发现你的controlller没有被调用,基本上是router设置不合理。
    <frontend>
        <routers>
            <Company_Xcheckout>
                <use>standard</use>
                <args>
                    <module>Company_Xcheckout</module>
                    <frontName>xcheckout</frontName>
                </args>
            </Company_Xcheckout>
        </routers>

//如果你在实施的时候出现空白页之类的问题,基本上是由于layout引起的
        <layout>
            <updates>
                <checkout>
                    <file>xcheckout.xml</file>
                </checkout>
            </updates>
        </layout>
    </frontend>
</config>

 

step 3: 重写相关的代码

 

1、重写controller类

require_once "Mage/Checkout/controllers/OnepageController.php";

class Company_Xcheckout_OnepageController extends Mage_Checkout_OnepageController
{
       //do what you want

       //尽情发挥吧

}

 

2、重写block

 

require_once 'Mage/core/Checkout/Block/Onepage.php';

class Company_Xcheckout_Block_Onepage extends Mage_Checkout_Block_Onepage_Abstract
{

 

}

 

注:其实在实现和跟踪代码的过程中还发现了很多问题和学到了magento的一些在文档上没有东西。只能等有时间一点点整理了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值