我在覆盖核心 Controller 时遇到问题。我想添加一个新功能,但是仅当我在核心文件(代码/核心/结帐/ Controller /onepagecontroller.php)中使用它时,该功能才起作用。

我已经关注了一些帖子,但是没有用。他们之中有一些是:

  • http://www.magentocommerce.com/boards/viewthread/32979/P0/
  • http://www.webspeaks.in/2011/03/override-controllers-in-magento.html
  • www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/how_to_overload_a_controller

  • (抱歉,我无法添加更多链接)

    我不知道发生了什么...也许您可以帮助我;)。

    我正在使用magento 1.5,并且有以下3个文件:

    本地-> Arias-> CoreExtended->等等-> config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <config>
        <modules>
            <Arias_CoreExtended>
                <version>0.1.0</version>
            </Arias_CoreExtended>
        </modules>
    
        <frontend>
            <routers>
                <checkout>
                    <args>
                        <modules>
                            <Arias_CoreExtended before="Mage_Checkout">Arias_CoreExtended_Checkout</Arias_CoreExtended>
                        </modules>
                    </args>
                </checkout>
            </routers>
        </frontend>
    </config>
    

    应用->等等->模块-> Arias_CoreExtended.xml
    <?xml version="1.0"?>
    <config>
        <modules>
            <Arias_CoreExtended>
                <active>true</active>
                <codepool>local</codepool>
            </Arias_CoreExtended>
        </modules>
    </config>
    

    本地-> Arias-> CoreExtended-> Controller -> Checkout-> OnepageController.php
    <?php
    
    require_once 'Mage/Checkout/controllers/OnepageController.php';
    
    class Arias_CoreExtended_Checkout_OnepageController extends Mage_Checkout_OnepageController
    {
        public function collectAction()
        {
            echo 'WTF?';
        }
    
        public function indexAction()
        {
            echo "This controller has been overridden.";
        }
    }
    

    在此先感谢您的宝贵时间,谢谢。

    最佳答案

    我将首先镜像与您覆盖的 Controller 相同的目录结构,因此在这种情况下,请更改:local/Arias/CoreExtended/controllers/Checkout/OnepageController.phplocal/Arias/CoreExtended/controllers/OnepageController.php
    您应该小写您的 namespace /模块名称,并且需要删除_Checkout,因为它通常会覆盖 Controller ,并且如果不符合标准,则会查找模块中存在的任何内容以使用它们。正确的代码是:

    <arias_coreextended before="Mage_Checkout">Arias_CoreExtended</arias_coreextended>
    

    我已成功使用此精确设置覆盖了Onepage Controller !

    10-04 17:46