覆盖社区扩展中的Magento控制器
我的magento 1.7商店中安装了CreativeStyle CheckoutByAmazon扩展,我试图覆盖CheckoutController类,但magento似乎忽略了我的覆盖。如有任何建议,将不胜感激。也已清除缓存,但仍不工作 (应用程序/代码/本地文件夹中) MyModule \亚马逊退房 \控制器 \CheckoutController.php \等 \config.xml覆盖社区扩展中的Magento控制器,magento,controller,overriding,Magento,Controller,Overriding,我的magento 1.7商店中安装了CreativeStyle CheckoutByAmazon扩展,我试图覆盖CheckoutController类,但magento似乎忽略了我的覆盖。如有任何建议,将不胜感激。也已清除缓存,但仍不工作 (应用程序/代码/本地文件夹中) MyModule \亚马逊退房 \控制器 \CheckoutController.php \等 \config.xml <?xml version="1.0" encoding="UTF-8"?> <con
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<MyModule_CheckoutByAmazon>
<version>0.1.0</version>
</MyModule_CheckoutByAmazon>
</modules>
<frontend>
<routers>
<checkoutbyamazon>
<args>
<modules>
<MyModule_CheckoutByAmazon before="Creativestyle_CheckoutByAmazon">MyModule_CheckoutByAmazon</MyModule_CheckoutByAmazon>
</modules>
</args>
</checkoutbyamazon>
</routers>
</frontend>
</config>
(app/etc/config.xml)
0.1.0
MyModule_Checkout ByAmazon
(应用程序内/code/local/MyModule/CheckoutByAmazon/controllers/CheckoutController)
(在etc/modules/MyModule_CheckoutByAmazon.xml中)
真的
地方的
我哪里做错了;dr:原来的扩展配置可能是问题所在,但下面介绍如何排除故障。 为了开始调试,有必要了解您正在尝试做什么。如果当前没有任何自定义模块,Magento将采用请求路径frontname“checkout”,将其与目录/app/code/core/Mage/checkout/controllers/匹配,然后将第二个和第三个参数作为文件、该文件中的类定义和该类中的操作方法的组合来查找匹配项。非弃用的重写语法(您正试图使用模块执行该语法)只需添加一个额外的目录以进行匹配。在调试之前,最好先介绍一下基本知识。这为调试控制器重写提供了一个很好的机会 必须满足许多先决条件(模块的config.xml被合并,语法和文件结构正确,等等)。首先测试它们是否正常工作是很好的,因为它将减少并确定我们需要调试的区域 在Magento根目录中的test.php文件中,执行以下操作:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL^E_STRICT);
include 'app/Mage.php';
Mage::setIsDeveloperMode(true);
Mage::app();
$origDir = Mage::getModuleDir('controllers','Creativestyle_CheckoutByAmazon').DS;
require_once $origDir.'CheckoutController.php';
$controller = new MyModule_CheckoutByAmazon_CheckoutController(
Mage::app()->getRequest(), //required constructor arg
Mage::app()->getResponse() //required constructor arg
);
echo get_class($controller);
array(35) {
["core"]=>
array(1) {
[0]=>
string(9) "Mage_Core"
}
["install"]=>
array(1) {
[0]=>
string(12) "Mage_Install"
}
["directory"]=>
array(1) {
[0]=>
string(14) "Mage_Directory"
}
// ...
["checkout"]=>
array(2) {
[0]=>
string(25) "MyModule_CheckoutByAmazon"
[1]=>
string(13) "Mage_Checkout"
}
// ...
}
只要看到多个子阵列,就会有控制器目录重写。尝试了同样的操作,但也失败了。但我找到了原因。CheckoutByAmazon扩展有一个同名的admincontroller:
<admin>
<routers>
<checkoutbyamazon>
<use>admin</use>
<args>
<module>Creativestyle_CheckoutByAmazon</module>
<frontName>checkoutbyamazon</frontName>
</args>
</checkoutbyamazon>
</routers>
</admin>
要完成C4rter的回答,以下是必须添加到config.xml文件中的完整代码:
<admin>
<routers>
<checkoutbyamazon>
<args>
<modules>
<MyModule_CheckoutByAmazon before="Creativestyle_CheckoutByAmazon_Adminhtml">MyModule_CheckoutByAmazon</MyModule_CheckoutByAmazon>
</modules>
</args>
</checkoutbyamazon>
</routers>
</admin>
MyModule_Checkout ByAmazon
您不需要前端重写部分。请确认社区扩展是
Creativestyle\uuumymodule\u CheckoutByAmazon
而不是Creativestyle\uumymodule\u CheckoutByAmazon
。不完全理解您的评论。扩展名位于app/code/community/Creativestyle/CheckoutByAmazon,我的位于app/code/local/MyModule/CheckoutByAmazon。问题出在我的文件路径上吗?第一个代码的文件路径应该是app/code/local/MyModule/CheckoutByAmazon/etc/config.xml您声明“我有CreativeStyle CheckoutByAmazon扩展名”,但随后您列出了orig。Creativestyle下的代码;我只是想确认一下。模块config.xml文件在哪里?模块的配置文件位于以下文件路径app/code/local/MyModule/CheckoutByAmazon/etc/config.xml中。您是否有幸覆盖CheckoutController。我想覆盖CheckOutController中的SaveShippingAction。我将尝试此操作并发布results@benmarks,我这里有一个与OP类似的问题,我遵循了您的建议,但找不到解决方案。我提出了一个新问题,如果您的模块通过了这两项测试,但Magento仍然没有使用社区模块,您会提出什么建议?为了进一步说明我的评论,我已经运行了这两项反射测试并通过了测试,但Magento仍然存在模块未使用的问题。这里的细节:谢谢你,贝马克。你的回答节省了我很多时间…:)谢谢你们两位的回答。我也遇到过同样的情况,多亏了你的回答,现在一切都好起来了。然而,我没有得到它。这是一个前端路由,我们只需要添加一个管理路由?你能帮我理解吗?
array(35) {
["core"]=>
array(1) {
[0]=>
string(9) "Mage_Core"
}
["install"]=>
array(1) {
[0]=>
string(12) "Mage_Install"
}
["directory"]=>
array(1) {
[0]=>
string(14) "Mage_Directory"
}
// ...
["checkout"]=>
array(2) {
[0]=>
string(25) "MyModule_CheckoutByAmazon"
[1]=>
string(13) "Mage_Checkout"
}
// ...
}
<admin>
<routers>
<checkoutbyamazon>
<use>admin</use>
<args>
<module>Creativestyle_CheckoutByAmazon</module>
<frontName>checkoutbyamazon</frontName>
</args>
</checkoutbyamazon>
</routers>
</admin>
before="Creativestyle_CheckoutByAmazon_Adminhtml"
<admin>
<routers>
<checkoutbyamazon>
<args>
<modules>
<MyModule_CheckoutByAmazon before="Creativestyle_CheckoutByAmazon_Adminhtml">MyModule_CheckoutByAmazon</MyModule_CheckoutByAmazon>
</modules>
</args>
</checkoutbyamazon>
</routers>
</admin>