无法覆盖Magento 1.7 CartController的indexAction()

时间:2013-03-11 11:26:57

标签: php xml magento controller override

我正在尝试覆盖Mage_Checkout_CartController的默认indexAction()。我在app / local中创建了以下文件:
myNameSpace对象/ cartStockCheck /控制器/ CartController.php myNameSpace对象/ cartStockCheck的/ etc / config.xml中

还在app / etc / modules中: MyNamespace_CartStockCheck.xml

看来Magento拿起我的分机是因为我可以看到它在高级部分的Admin后端中列出,但除此之外我打开购物车时没有任何反应。

编辑:没有其他插件覆盖CartController。我还修复了indexAction中不正确的调用。仍然无法看到我的文字在购物车中回显

EDIT2:检查下面的答案。它有效!

CartController.php的内容是:

<?php   
  require_once 'Mage/Checkout/controllers/CartController.php';

  class MyNamespace_CartStockCheck_CartController extends Mage_Checkout_CartController
  {
    public function addAction()
    {
        echo 'test addAction';
        parent::addAction();
    }

    public function indexAction()
    {
        echo 'test indexAction';
        parent::addAction();
    }
  }
?> 

config.xml的内容:

<?xml version="1.0"?>
<config>
    <modules>
        <MyNamespace_CartStockCheck>
            <version>0.1.0</version>
        </MyNamespace_CartStockCheck>
    </modules>

    <frontend>
        <routers>
            <checkout>
                <args>
                    <modules>
                        <MyNamespace_CartStockCheck before="Mage_Checkout">MyNamespace_CartStockCheck</MyNamespace_CartStockCheck>
                    </modules>
                </args>
            </checkout>
        </routers>
    </frontend>
</config>

MyNamespace_CartStockCheck.xml的内容:

<?xml version="1.0"?>

<config>
    <modules>
        <MyNamespace_CartStockCheck>
            <active>true</active>
            <codepool>local</codepool>
        </MyNamespace_CartStockCheck>
    </modules>
</config>

3 个答案:

答案 0 :(得分:5)

我不相信这一点。我的代码不起作用的全部原因是:

<codepool>local</codepool>

而不是

<codePool>local</codePool>
MyNamespace_CartStockCheck.xml中的

我实际上将代码复制到一些教程中,其中“P”没有大写,我不知道它可能是这个,直到我开始检查其他扩展并注意到它。猜猜我会很容易记住这个。

答案 1 :(得分:1)

您需要更正indexAction

     public function indexAction()
      {
         echo 'test indexAction';
         parent::indexAction();
      }  

你应该调用 parent :: indexAction(); 而不是 parent :: addAction();

答案 2 :(得分:0)

您需要检查的两个原因。 1.您确定已清除缓存吗?

  1. 确保未启用编译器模式。当打开编译器模式时,文件是从inc src文件夹而不是从其他地方获取的。
  2. 如果这两件事情到位并且你仍然发现你的控制器动作函数没有被调用,那么你需要检查是否有一些覆盖已经完成或某些事件/观察者已经劫持了你的代码。