我正在尝试覆盖扩展程序的控制器....这会覆盖购物车控制器。
目前覆盖购物车控制器的扩展程序是:
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未找到错误....任何人都可以看到我哪里出错?在线资源非常不同......而且令人困惑!问题可能在于我试图覆盖覆盖控制器...... ??
提前感谢...
答案 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)
对于那些想要了解扩展和可能解决方案之间冲突的人(如上所述),请参阅以下链接:
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/
答案 3 :(得分:0)
这是关于控制器的包含路径的一点通知。
如果 Magento编译器模式已开启,则包括路径可能导致错误。
require_once 'Mage/Checkout/controllers/CartController.php';
而不是使用
require_once Mage::getModuleDir('controllers', 'Mage_Checkout').DS.'CartController.php';
它会更安全。