覆盖社区扩展中的Magento控制器

覆盖社区扩展中的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

我的magento 1.7商店中安装了CreativeStyle CheckoutByAmazon扩展,我试图覆盖CheckoutController类,但magento似乎忽略了我的覆盖。如有任何建议,将不胜感激。也已清除缓存,但仍不工作

(应用程序/代码/本地文件夹中)

MyModule \亚马逊退房 \控制器 \CheckoutController.php \等 \config.xml

<?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>