首页
外贸B2C模板开发
zencart 开发
Magento开发
经典客户案例
zencart 报价
外贸主机
联系我们
 
 
首页 ::  Magento开发 ::  Magento二次开发 ::  重写某个Magento模块的某个controller
 
重写某个Magento模块的某个controller

  作者: Magento   |   2010-10-07     阅读次数:661     关键字:最完善的Magento修改模板


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

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

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

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

模块文件:

Magento/app/code/local/Company/Xcheckout/etc/config.xml

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二次开发的相关新闻


更早的新闻

 
 
 
外贸网站模板  |  关于我们  |  核心技术  |  人才招聘  |  帮助中心  |  zencart下载  |  付款方式  |  公司地图  |  联系我们


粤ICP备15004589号
深圳市迅捷网络技术有限公司 Copyright © 2004-2016 All Rights Reserved. 版权所有
总公司:深圳市龙华新区民治街道人民路中航天逸大厦A3栋15层     网址:www.zencart-cn.com  电话:0755-28107785
分公司:惠州市惠城区港惠新天地商业大厦2B栋19层 网址:www.0752web.com 电话:0752-2695554  2065565
全国服务热线:137 14307967   售后服务热线:159 19478387 客服QQ: 1512144 408079953 MSN:szsun@msn.com