我已尽力解决这个问题,但我似乎无法在Magento中覆盖以下控制器:
法/核心/控制器/瓦里安/动作
现在我的扩展程序有以下文件:
应用/本地/ MyCompany的/ MyModule的/核心/控制器/前/ action.php的
应用/本地/ MyCompany的/ MyModule的/核心的/ etc / config.xml中
应用的/ etc /模块/ MyCompany_MyModule.xml
我的困惑在于config.xml。我之前已经覆盖了控制器目录中的控制器,但没有覆盖控制器。我不完全清楚差异,或者是否覆盖Controller目录中的文件的方法不同。
这是我在config.xml中的内容
<?xml version="1.0"?>
<config>
<modules>
<MyCompany_MyModule>
<version>0.0.1</version>
</MyCompany_MyModule>
</modules>
<global>
<controller>
<Mage_Core>
<rewrite>
<front_action>MyCompany_MyModule_Core_Controller_Front_Action</front_action>
</rewrite>
</Mage_Core>
</controllers>
</global>
</config>
有人可以告诉我我错过了什么吗?
答案 0 :(得分:4)
您无法通过Magento配置的类名重写来完成您想要的任务。如果您注意到,您正在更改超类(从其扩展的其他类),并且通过Varien_Autoload::autoload()
中的自动加载逻辑发现类定义。
如果您必须更改此类的定义,则可以将整个文件复制到 app / code / local / Mage / Core / Controller / Varien / 并在那里进行更改。您需要在升级Magento时随时将更新合并到此类。
答案 1 :(得分:0)
我也曾经修改过控制器功能,但我想我最后只修补了原来的控制器而不是覆盖它。我可能错了,但我认为Magento不支持覆盖Controller类。
如果我没记错的话,在某些方面甚至会在代码中静态调用它们。
答案 2 :(得分:0)
自magento控制器上的声明
class Mage_Catalog_ProductController extends Mage_Core_Controller_Front_Action
如果直接扩展了课程。我所做的是以某种方式替换所有控制器。
class Mage_Catalog_ProductController extends MyCompany_Core_Controller_Front_Action
要替换所有控制器,我使用此linux命令
find app/code/core/Mage/*/controllers/ -name "*.php" -print | xargs sed -i 's/Mage_Core_Controller_Front_Action/MyCompany_Core_Controller_Front_Action/g'