Php magento重写不起作用
我创建了一个模块,该模块使用一个自定义小部件/网格/列为我的管理网格显示缩略图图像,一切正常。现在,我需要在同一个项目中创建另一个模块,该模块执行相同的操作,但是image列将无法工作。看起来它甚至没有加载我的新类,因为它不会执行我放入文件中的任何stmt。我知道它正确加载数据,b/c如果我将类型更改为文本,则数据库中的正确信息将填充到字段中。但当我换成新的“图像”类型时,单元格是空的。有人知道为什么它不起作用吗Php magento重写不起作用,php,zend-framework,configuration,magento,Php,Zend Framework,Configuration,Magento,我创建了一个模块,该模块使用一个自定义小部件/网格/列为我的管理网格显示缩略图图像,一切正常。现在,我需要在同一个项目中创建另一个模块,该模块执行相同的操作,但是image列将无法工作。看起来它甚至没有加载我的新类,因为它不会执行我放入文件中的任何stmt。我知道它正确加载数据,b/c如果我将类型更改为文本,则数据库中的正确信息将填充到字段中。但当我换成新的“图像”类型时,单元格是空的。有人知道为什么它不起作用吗 ABT/Background/etc/config.xml我不确定您的设置是否正确
ABT/Background/etc/config.xml我不确定您的设置是否正确 无论如何,看起来在同一个类
Widget\u Grid\u Column
上有两个覆盖规则。最后加载的模块是ABT\u功能
,因此该块的规则覆盖ABT\u后台
模块的规则
您有两种解决方案:
ABT\u功能块块块块块块块块块块块网格列
类将扩展ABT\u背景块块块块块块块块块块网格列
李>
下面是重写类时Magento发生的情况 当Magento实例化一个块类时,它使用如下代码
$this->getLayout()->createBlock('adminhtml/widget_grid_column')
createBlock
方法是一个工厂。Magento使用标识符
adminhtml/widget_grid_column
查找应该实例化的类。默认情况下,这是
Mage_Adminhtml_Block_Widget_Grid_Column
当您创建重写时,您正在告诉Magento
嘿。“Adminhtml/Widget\u Grid\u Column”不应使用“Mage\u Adminhtml\u Block\u Widget\u Grid\u Column”,而应使用“ABT\u Background\u Block\u Widget\u Grid\u Column”
这意味着,对于任何给定的系统,类只能重写一次。在上面显示的代码中,您试图重写该类两次。你的重写只有一次会赢
我要采取的快速方法是将所有的自定义项保存在一个覆盖类中
更一般地说,如果可能的话,我尽量避免使用重写。他们是一个强大的系统,但应该节约使用。我没有做太多的网格定制,但我尝试采用的一般方法是更改adminhtml布局,从自定义模块中实例化一个新的网格类,该类扩展了现有网格类,而现有网格类又可能使用自定义列类
前面还有很多工作要做,但一旦你弄明白了,你就可以反复使用这项技术,而不用担心重写会产生冲突 你可能是对的-我可能没有正确的设置。这是我第一次和Magento一起工作,我只是按照这个指南让我的新类型工作。这听起来比我现在做的更好。就像我上面说的,这是我的第一个项目w/magento,所以我对所有这些都是新手。你不会碰巧知道有什么资源可以帮助我一瘸一拐地做你描述的事情吧?不幸的是,我不知道。关于Magento的大多数在线文章都是基于配方的。“做这件事让它发生”,大多数人都喜欢重写方法。如果您需要尽快完成您的工作,我将继续使用您以前的方法,但只需在您的单重写类方法中添加额外的逻辑。我已经写了一系列深入的文章(plug:),可以帮助您充分理解系统,从而采用我推荐的方法,但是需要克服一个学习曲线。哦,好吧,我应该能够步履蹒跚地走下去。谢谢你的见解和网站,我一定会看一看!
adminhtml/widget_grid_column
Mage_Adminhtml_Block_Widget_Grid_Column