我花了好几个小时尝试覆盖扩展中“添加商店”和“编辑商店”页面的Magento块,以便为其添加另一个文本框。经过书籍和谷歌搜索后,我发现了一些人们认为有效的解决方案,但不适合我。
一项建议是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 / General / Block / 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,但它主要创建一个顶级管理菜单,并指定扩展信息,而不是其他。
关于出了什么问题的任何想法?我们非常感谢您的解决方案!
答案 0 :(得分:10)
如下所示,稍作修改。看来你拼错了“编辑”为“sdit”。
<global>
<blocks>
<adminhtml>
<rewrite>
<system_store_edit_form>Nintera_General_Block_StoreEdit</system_store_edit_form>
</rewrite>
</adminhtml>
</blocks>
</global>
另外请记住,如果要使用Mage :: getModel(“nintera_general / myblock”)语法调用其他块,则还需要将自己的块添加到该代码中,如下所示。 / p>
<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>
答案 1 :(得分:3)
在阅读了几个主题后,我找到了解决此问题的解决方案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
并将我的函数放在那里。
对我来说这很好。