0

我正在尝试覆盖 Mage_Checkout_CartController 的默认 indexAction()。我在我的应用程序/本地创建了以下文件:
MyNamespace/cartStockCheck/controllers/CartController.php MyNamespace/cartStockCheck/etc/config.xml

并且在 app/etc/modules 中:MyNamespace_CartStockCheck.xml

看来 Magento 确实选择了我的扩展程序,因为我可以看到它在高级部分的管理后端中列出,但除此之外,当我打开购物车时没有任何反应。

编辑:没有其他插件覆盖 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>
4

3 回答 3

5

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

<codepool>local</codepool>

代替

<codePool>local</codePool>

在 MyNamespace_CartStockCheck.xml

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

于 2013-03-11T18:48:06.563 回答
1

您需要更正 indexAction

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

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

于 2013-03-11T12:18:01.060 回答
0

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

  1. 确保编译器模式未打开。当编译器模式打开时,文件是从 inc src 文件夹中获取的,而不是从其他地方获取的。

如果这两件事都到位并且您仍然发现您的控制器操作函数没有被调用,那么您需要检查是否完成了某些覆盖或某些事件/观察者已经劫持了您的代码。

于 2013-03-11T17:21:02.783 回答