Magento控制器覆盖

时间:2012-05-30 10:57:03

标签: magento controller override

我正在尝试覆盖扩展程序的控制器....这会覆盖购物车控制器。

目前覆盖购物车控制器的扩展程序是:

Innoexts/Warehouse/controllers/Checkout/CartController.php

Innoexts模块中的配置条目是:

<frontend>
    <routers>
        <checkout>
            <args>
                <modules>
                    <Innoexts_Warehouse before="Mage_Checkout">Innoexts_Warehouse_Checkout</Innoexts_Warehouse>
                </modules>
            </args>
        </checkout>
    </routers>

...blah...blah...

</frontend>

innoext cartcontroller文件的顶部是:

require_once 'Mage/Checkout/controllers/CartController.php';
class Innoexts_Warehouse_Checkout_CartController extends Mage_Checkout_CartController {

我想用这个控制器覆盖它:

Myco/Warehousemod/controllers/Checkout/CartController.php

控制器文件的顶部是:

require_once 'Innoexts/Warehouse/controllers/Checkout/CartController.php';
class Myco_Warehousemod_Checkout_CartController extends Innoexts_Warehouse_Checkout_CartController {

我创建的配置条目是:

<global>

...blah...blah...

<rewrite>
        <myco_warehousemod_checkout_cart>
            <from><![CDATA[#^/checkout/cart/#]]></from>
            <to>/warehousemod/checkout_cart/</to>
        </myco_warehousemod_checkout_cart>
    </rewrite>

</global>


<frontend>

<routers>
        <checkout>
    <args>
        <modules>
                  <Myco_Warehousemod before="Innoexts_Warehouse_Checkout">Myco_Warehousemod_Checkout</Myco_Warehousemod>
                </modules>
            </args>
        </checkout>
    </routers>

...blah...blah...

</frontend>

我现在收到结帐/购物车网址的404未找到错误....任何人都可以看到我哪里出错?在线资源非常不同......而且令人困惑!问题可能在于我试图覆盖覆盖控制器...... ??

提前感谢...

4 个答案:

答案 0 :(得分:1)

需要删除第一次重写:

<rewrite>
    <myco_warehousemod_checkout_cart>
        <from><![CDATA[#^/checkout/cart/#]]></from>
        <to>/warehousemod/checkout_cart/</to>
    </myco_warehousemod_checkout_cart>
</rewrite>

我认为某些人应该停止编写教程......他们半信半疑的SEO努力使网络变得混乱....

答案 1 :(得分:1)

这部分用于旧版本的Magento(我认为在1.4之前),但是如果你想扩展一个在配置文件中有这样重写的控制器,你必须在你的配置中做同样的事情。 / p>

<rewrite>
    <myco_warehousemod_checkout_cart>
        <from><![CDATA[#^/checkout/cart/#]]></from>
        <to>/warehousemod/checkout_cart/</to>
    </myco_warehousemod_checkout_cart>
</rewrite>

新版本只使用之前的部分,所以你应该有这样的东西:

<routers>
  <checkout>
    <args>
        <modules>
           <Myco_Warehousemod before="Innoexts_Warehouse">Myco_Warehousemod_Checkout</Myco_Warehousemod><!-- just the name of the module Innoexts_Warehouse the overridden folder will be taken from the part after the name of your module so Magento will look in app/local/Myco/Warehousemod/controllers/Checkout/* and load all the controllers from there -->
        </modules>
    </args>
  </checkout>
</routers>

答案 2 :(得分:0)

答案 3 :(得分:0)

这是关于控制器的包含路径的一点通知。

如果 Magento编译器模式已开启,则包括路径可能导致错误

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

而不是使用

require_once Mage::getModuleDir('controllers', 'Mage_Checkout').DS.'CartController.php';

它会更安全。