扩展magento核心控制器(Checkout / OnepageController)

时间:2011-10-27 15:40:24

标签: magento controller override extend

我在覆盖核心控制器时遇到问题。我想添加一个新函数,但只有在核心文件(code / core / checkout / controllers / onepagecontroller.php)中才能使用它。

我已经关注了一些帖子,但它没有用。其中一些是:

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

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

我正在使用magento 1.5,我有这3个文件:


local - >咏叹调 - > 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>

app - &gt;等 - &gt;模块 - &gt; Arias_CoreExtended.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Arias_CoreExtended>
            <active>true</active>
            <codepool>local</codepool>
        </Arias_CoreExtended>
    </modules>
</config>

local - &gt;咏叹调 - &gt; CoreExtended - &gt;控制器 - &gt;结帐 - &gt; 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.";
    }
}

提前感谢您的时间,问候。

3 个答案:

答案 0 :(得分:1)

我首先会镜像您要覆盖的控制器的相同目录结构,因此在这种情况下更改:local/Arias/CoreExtended/controllers/Checkout/OnepageController.phplocal/Arias/CoreExtended/controllers/OnepageController.php

你应该小写你的命名空间/模块名称,你需要删除_Checkout,因为它一般会覆盖控制器,并且会查找模块中存在的任何内容,以便在不符合标准的情况下使用它们。正确的代码是:

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

我已经成功使用了这个确切的设置来覆盖Onepage控制器!

答案 1 :(得分:0)

我会尝试降低你的命名空间/模块名称,如下所示:

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

答案 2 :(得分:0)

你的方法大多是正确的@satumo。你唯一应该改变的就是这一行

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

所以你的完整配置必须如下所示:

<?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</Arias_CoreExtended>
                    </modules>
                </args>
            </checkout>
        </routers>
    </frontend>
</config>