重写某个magento模块的某个controller
2011-01-14 15:39
176 查看
重写某个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
的一些在文档上没有东西。只能等有时间一点点整理了。
模块的某个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模块的某个controller
- Magento Controller Rewrite - Magento 控制器重写
- 重写magento的model, block 和controller
- Magento 模块开发之模块重写
- magento 模块重写机制
- magento 模块重写
- 重写magento的model, block 和controller
- MAGENTO 开发之模块重写
- Magento 模块开发之模块重写
- IIS URL重写模块和ASP.NET路由组件比较
- jQuery 1.5发布 Ajax模块重写
- magento --完成magento支付IPS(环讯)模块
- magento模块的config.xml
- Magento 新闻模块开发教程 (四) 创建模块的xml配置文件
- 多模块打包后,扫描不到@controller和@service,实现 ADD DIRECTORY ENTRIES
- 第八章 深入理解Magento – 修改、扩展、重写Magento代码
- Magento 模块开发之 System.xml 配置详解
- 有关magento控制器重写
- Magento模块解析
- magento:在controller中添加breadcrumbs