0

我正在尝试覆盖扩展的控制器....即覆盖购物车控制器。

当前覆盖购物车控制器的扩展是:

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>

我现在收到结帐/购物车 URL 的 404 not found 错误......谁能看到我哪里出错了?在线资源非常不同......而且令人困惑!问题可能出在我试图覆盖覆盖控制器...??

提前致谢...

4

4 回答 4

1

需要删除第一次重写:

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

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

于 2012-05-30T11:43:53.787 回答
1

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

<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>
于 2012-05-30T15:17:04.273 回答
0

对于那些想了解扩展和可能的解决方案之间的冲突(就像上面的案例)的人来说,只是一个附加说明,请参考以下链接:

http://www.webshopapps.com/blog/2010/11/resolving-magento-extension-conflicts/

http://sweettoothrewards.com/wiki/index.php/Resolving_extension_conflicts

http://magebase.com/magento-tutorials/magento-extension-clashes-winners-and-loosers/

http://www.magestore.com/blog/2011/12/21/magento-methods-to-resolve-the-module-conflicts-in-magento/

于 2012-05-31T19:29:21.507 回答
0

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

如果打开Magento 编译器模式,此包含路径可能会导致错误

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

取而代之的是,它很好用

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

会更安全。

于 2014-01-23T09:50:00.753 回答