`
mypages
  • 浏览: 89971 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

重写某个magento模块的某个controller

阅读更多

重写某个magento模块的某个controller
      当你需要对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的一些在文档上没有东西。只能等有时间一点点整理了。

分享到:
评论

相关推荐

    magento结构和原理

    magento结构和原理 magento结构和原理是magento...通过了解magento的文件目录结构、URL路由与分发器、模板调用对应的JS、CSS、图片、重写核心模块等知识点,可以更好地理解magento的工作机理和开发magento模块和主题。

    magento学习重点

    首先,调整Magento模块的位置是一项基本操作。在示例中,`newsletter.xml`文件用于定义订阅邮件窗口在页面中的位置。`&lt;reference&gt;`标签指示模块应插入的容器,如`left`或`right`。要移动模块,只需更改`name`属性...

    magento入门文档

    Magento的配置系统是其核心组成部分之一,通过一套复杂的机制管理着系统的各个部分,包括模块、模型、类、模板等。配置系统的核心在于能够通过配置文件的方式对系统进行高度定制。 为了创建一个新的模块,你需要先...

    Magento-中文开发教程(技术重点2)

    通过在模块的配置文件中指定类和方法的重写规则,可以覆盖 Magento 的默认行为。这种方法非常强大,但也需要谨慎使用,以免引入难以追踪的问题。 #### 数据操作与数据收集器 在 Magento 中,数据操作是一个常见的...

    Magento Category Filter Url静态化插件

    这通常涉及到Magento的URL重写管理模块,插件可能需要监听或扩展Magento的重写过程,添加自定义规则。 2. **路由处理**:静态URL需要被正确解析回实际的筛选条件。插件需要设置自定义控制器和动作来处理这些静态URL...

    Magento-URLCaseInsensitive:覆盖核心 URL 区分大小写功能的 magento 模块

    在这个模块中,可能会有一个观察器监听`controller_front_init_routers`事件,该事件在Magento加载所有路由之前触发。通过这个事件,模块可以确保所有的URL请求在处理前被转换为统一的大小写格式。 2. **重写核心...

    Magento2开发者指南

    - **Apache**:配置Apache以支持Magento 2所需的特性,如URL重写、SSL等。 **生产环境设置**:生产环境通常需要更高的稳定性和安全性。推荐使用Amazon Web Services (AWS)来部署Magento 2。 - **介绍AWS**:AWS...

    Magento2-MVC与订单生命周期

    为了实现这一目标,Magento 2允许开发者通过重写机制来定制平台行为,而不是直接修改核心代码,从而保持代码的清洁、可维护和可升级。 在Magento 2的模块目录结构中,有多个关键组成部分: 1. Controller:处理...

    magento 帮助文档

    - **请求分发与控制器**:Magento 使用 Front Controller 模式处理 HTTP 请求。请求经过一系列的路由和分发过程,最终到达适当的控制器动作来处理。理解这一过程对于创建自定义控制器和处理用户请求非常关键。 - *...

    magento 1.6.2

    2. **模块化设计**:Magento 的核心功能通过模块化实现,每个功能都可以视为独立的模块,这允许开发者根据需求开启或关闭特定功能,或者自定义功能以满足特定业务需求。 3. **商品管理**:Magento 提供了完善的商品...

    magento-mirror:Magento镜子

    2. **模块化**:Magento的核心功能被划分为多个模块,如销售、产品、购物车、用户管理等,方便开发者添加自定义功能或替换已有模块。 3. **模板系统**:Magento的模板引擎支持丰富的布局和设计定制,允许商家根据...

    magento:Magento CE 1.x源代码-ce source code

    5. **URL重写**:Magento提供强大的URL重写机制,可以自定义友好的SEO优化链接。 6. **购物车与结账流程**:Magento的购物车系统支持多地址配送、优惠券、积分等,结账过程包括多种支付方式和运输选项。 7. **搜索...

    magento.test1

    在这个环境中,我们可能看到的是一个Magento的源码仓库或者是某个特定版本的Magento安装包。 在深入讨论Magento的相关知识点之前,首先理解其基本架构是至关重要的。Magento采用MVC(Model-View-Controller)设计...

    magento-978-1-7832-8823-6:掌握 Magento 主题设计

    1. **Magento架构**:了解Magento的架构至关重要,包括其模块化设计、MVC(Model-View-Controller)结构以及数据库交互方式。这将帮助设计师理解如何在系统中定位和修改主题元素。 2. **主题层次结构**:Magento...

    magento2Override:该存储库显示了覆盖magento 2元素的方法,例如块,控制器和模型等

    在Magento 2中,有时我们需要根据业务需求对系统原有的功能进行修改或增强,这就涉及到了Magento 2的重写机制。本篇文章将深入探讨如何在Magento 2中覆盖元素,如块(Blocks)、控制器(Controllers)和模型(Models...

    CustomContactUrl:Magento 扩展允许店主为联系人页面设置自定义 URL

    安装和启用CustomContactUrl扩展后,店主只需在Magento后台设置界面中输入自定义的URL路径,保存后系统会自动处理URL重写,使新的联系人页面URL生效。这样,用户在访问这个页面时,就可以看到店主自定义的友好链接了...

    Magento_Community_Edition_1.8_User_Guide.pdf.zip_Unity3D_PHP_

    1. **架构设计**:Magento采用MVC(Model-View-Controller)架构,使得代码结构清晰,易于维护和扩展。它还使用了模块化设计,允许开发者按需添加或修改功能。 2. **安装与配置**:安装Magento涉及设置服务器环境...

Global site tag (gtag.js) - Google Analytics