重写某个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的文件目录结构、URL路由与分发器、模板调用对应的JS、CSS、图片、重写核心模块等知识点,可以更好地理解magento的工作机理和开发magento模块和主题。
首先,调整Magento模块的位置是一项基本操作。在示例中,`newsletter.xml`文件用于定义订阅邮件窗口在页面中的位置。`<reference>`标签指示模块应插入的容器,如`left`或`right`。要移动模块,只需更改`name`属性...
Magento的配置系统是其核心组成部分之一,通过一套复杂的机制管理着系统的各个部分,包括模块、模型、类、模板等。配置系统的核心在于能够通过配置文件的方式对系统进行高度定制。 为了创建一个新的模块,你需要先...
通过在模块的配置文件中指定类和方法的重写规则,可以覆盖 Magento 的默认行为。这种方法非常强大,但也需要谨慎使用,以免引入难以追踪的问题。 #### 数据操作与数据收集器 在 Magento 中,数据操作是一个常见的...
这通常涉及到Magento的URL重写管理模块,插件可能需要监听或扩展Magento的重写过程,添加自定义规则。 2. **路由处理**:静态URL需要被正确解析回实际的筛选条件。插件需要设置自定义控制器和动作来处理这些静态URL...
在这个模块中,可能会有一个观察器监听`controller_front_init_routers`事件,该事件在Magento加载所有路由之前触发。通过这个事件,模块可以确保所有的URL请求在处理前被转换为统一的大小写格式。 2. **重写核心...
- **Apache**:配置Apache以支持Magento 2所需的特性,如URL重写、SSL等。 **生产环境设置**:生产环境通常需要更高的稳定性和安全性。推荐使用Amazon Web Services (AWS)来部署Magento 2。 - **介绍AWS**:AWS...
为了实现这一目标,Magento 2允许开发者通过重写机制来定制平台行为,而不是直接修改核心代码,从而保持代码的清洁、可维护和可升级。 在Magento 2的模块目录结构中,有多个关键组成部分: 1. Controller:处理...
- **请求分发与控制器**:Magento 使用 Front Controller 模式处理 HTTP 请求。请求经过一系列的路由和分发过程,最终到达适当的控制器动作来处理。理解这一过程对于创建自定义控制器和处理用户请求非常关键。 - *...
2. **模块化设计**:Magento 的核心功能通过模块化实现,每个功能都可以视为独立的模块,这允许开发者根据需求开启或关闭特定功能,或者自定义功能以满足特定业务需求。 3. **商品管理**:Magento 提供了完善的商品...
2. **模块化**:Magento的核心功能被划分为多个模块,如销售、产品、购物车、用户管理等,方便开发者添加自定义功能或替换已有模块。 3. **模板系统**:Magento的模板引擎支持丰富的布局和设计定制,允许商家根据...
5. **URL重写**:Magento提供强大的URL重写机制,可以自定义友好的SEO优化链接。 6. **购物车与结账流程**:Magento的购物车系统支持多地址配送、优惠券、积分等,结账过程包括多种支付方式和运输选项。 7. **搜索...
在这个环境中,我们可能看到的是一个Magento的源码仓库或者是某个特定版本的Magento安装包。 在深入讨论Magento的相关知识点之前,首先理解其基本架构是至关重要的。Magento采用MVC(Model-View-Controller)设计...
1. **Magento架构**:了解Magento的架构至关重要,包括其模块化设计、MVC(Model-View-Controller)结构以及数据库交互方式。这将帮助设计师理解如何在系统中定位和修改主题元素。 2. **主题层次结构**:Magento...
在Magento 2中,有时我们需要根据业务需求对系统原有的功能进行修改或增强,这就涉及到了Magento 2的重写机制。本篇文章将深入探讨如何在Magento 2中覆盖元素,如块(Blocks)、控制器(Controllers)和模型(Models...
安装和启用CustomContactUrl扩展后,店主只需在Magento后台设置界面中输入自定义的URL路径,保存后系统会自动处理URL重写,使新的联系人页面URL生效。这样,用户在访问这个页面时,就可以看到店主自定义的友好链接了...
1. **架构设计**:Magento采用MVC(Model-View-Controller)架构,使得代码结构清晰,易于维护和扩展。它还使用了模块化设计,允许开发者按需添加或修改功能。 2. **安装与配置**:安装Magento涉及设置服务器环境...