2009-12-09 97 views
3

我花了数小时试图覆盖Magento块的扩展中的“添加商店”和“编辑商店”页面,以添加另一个文本框。在浏览书籍和谷歌搜索之后,我发现了几种人们说的解决方案,但不适合我。Magento - 覆盖Adminhtml块

一个建议是this one

我已经复制了Lee Saferite的原本正确的解决方案,该解决方案适用于原始海报,但不适合我。当然,我将这些值更改为我重写的类和新的修改后的类。

我config.xml文件(相关部分):

<global> 
    <blocks> 
     <adminhtml> 
     <rewrite> 
      <system_store_sdit_form>Nintera_General_Block_StoreEdit</system_store_sdit_form> 
     </rewrite> 
     </adminhtml> 
    </blocks> 
    <resources></resources> 
    <helpers> 
     <Nintera_General> 
     <class>Nintera_General_Helper</class> 
     </Nintera_General> 
    </helpers> 
    </global> 

而且位于Nintera /一般/座/ StoreEdit.php块类:

class Nintera_General_Block_StoreEdit extends Mage_Adminhtml_Block_System_Store_Edit_Form 
{ 
    /** 
    * Prepare form data 
    * 
    * return Mage_Adminhtml_Block_Widget_Form 
    */ 
    protected function _prepareForm() 
    { ... } 
} 

这个类包含了新的输入域。该字段显示了完美的,如果我修改原始核心文件在:

应用程序/核心/法师/ Adminhtml /模块/系统/存储/ Edit.php

但我真的希望我的扩展覆盖它。如果有必要,我可以发布我的整个config.xml,但它主要是创建顶级管理菜单并指定扩展信息,而不是其他。

有什么错误的想法吗?高度赞赏解决方案!

回答

10

显示如下,稍作修改。看起来你的拼写错误是“编辑”为“sdit”。

<global> 
    <blocks> 
     <adminhtml> 
     <rewrite> 
      <system_store_edit_form>Nintera_General_Block_StoreEdit</system_store_edit_form> 
     </rewrite> 
     </adminhtml> 
    </blocks> 
</global> 

也请记住,如果你想使用法师:: getModel(“nintera_general/myblock”)语法调用其他块,你需要自己的块添加到代码为好,如如下所示。

<global> 
    <blocks> 
     <adminhtml> 
     <rewrite> 
      <system_store_edit_form>Nintera_General_Block_StoreEdit</system_store_edit_form> 
     </rewrite> 
     </adminhtml> 
     <nintera_general> 
     <class>Nintera_General_Block</class> 
     </nintera_general> 
    </blocks> 
</global> 
2

读几条线后,我已经找到了覆盖Mage_Adminhtml_Block_Widget_Grid这个问题的解决方案。

在本thread
提到“您可以覆盖(重写)在配置只被实例化的块。你不能注入任何东西到类层次结构,因为它不是由PHP支持”

我想覆盖方法protected function _addColumnFilterToCollection($column)

对于Mage_Adminhtml_Block_Sales_Order_Grid的扩展层次结构。

而不是重写Mage_Adminhtml_Block_Widget_Grid我重写类Mage_Adminhtml_Block_Sales_Order_Grid并将我的功能放在那里。

对我来说这工作正常。