2012-04-13 82 views
0
行动

我已经尽最大努力想出解决办法,但我似乎无法得到以下控制器在Magento覆盖:覆盖法师/核心/控制器/瓦瑞恩/在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

什么是你想改变什么?可能有另一种方法。 – benmarks 2012-04-13 17:54:36

回答

4

你不能通过Magento配置的类名重写来达到你想要的效果。如果你注意到,你正在改变一个超类(其他类从它扩展),并且通过Varien_Autoload::autoload()的自动加载逻辑发现类定义。

如果您必须更改此类的定义,您可以将整个文件复制到app/code/local/Mage/Core/Controller/Varien/并在此处进行更改。您需要在升级Magento时随时将更新合并到此类。

+0

那么这很烂:P 我的最终目标是如果一个特定的cookie值不存在,将前端的用户重定向到另一个页面。你认为重写Action.php类是解决这个问题的正确方法吗? – Axel 2012-04-13 18:54:48

+0

好吧,我决定覆盖位于app/code/core/Mage/Page/Block/Html.php中的Html块。 由于Magento中的每个页面都加载了Html块,所以很容易将重定向功能集成到该块类的构造函数中。 – Axel 2012-04-13 20:47:12

+0

通过观察预渲染事件,您可以以更少的侵入性和更适合框架的方式执行此操作。请参阅'Mage_Core_Controller_Varien_Action'中的'controller_action_predispatch'事件。 – benmarks 2012-04-13 21:42:47

0

我也曾经修改过控制器功能,但我想我最终只修补了原来的控制器而不是覆盖它。我可能错了,但我认为Magento不支持覆盖控制器类。

如果我记得正确的话,他们甚至在代码中静态调用某些点。

+0

正确。有一种机制可以在frontname下添加额外的模块目录,但不能像block,helpers,models和resource模型那样重写类名。 – benmarks 2012-04-13 17:47:31

0

由于上的magento控制器

class Mage_Catalog_ProductController extends Mage_Core_Controller_Front_Action

如果是宣言直接扩展的类。我所做的是以某种方式替换所有的控制器。

class Mage_Catalog_ProductController extends MyCompany_Core_Controller_Front_Action

全部更换控制器,I用户这个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'

+0

这种类型的破坏不覆盖核心文件的目的吗? – Axel 2013-05-21 14:16:35