如何扩展Magento Core模块块(在不编辑Core的情况下修复Magento错误)
到目前为止,我所拥有的: etc/modules/BugFix_MageAdminhtmlBlockWidgetGrid.xml如何扩展Magento Core模块块(在不编辑Core的情况下修复Magento错误),magento,grid,widget,block,adminhtml,Magento,Grid,Widget,Block,Adminhtml,到目前为止,我所拥有的: etc/modules/BugFix_MageAdminhtmlBlockWidgetGrid.xml <?xml version="1.0"?> <config> <modules> <BugFix_MageAdminhtmlBlockWidgetGrid> <active>true</active> <codePool
<?xml version="1.0"?>
<config>
<modules>
<BugFix_MageAdminhtmlBlockWidgetGrid>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Adminhtml />
</depends>
</BugFix_MageAdminhtmlBlockWidgetGrid>
</modules>
</config>
app/local/BugFix/MageAdminhtmlBlockWidgetGrid/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<BugFix_MageAdminhtmlBlockWidgetGrid>
<version>1.0.0</version>
</BugFix_MageAdminhtmlBlockWidgetGrid>
</modules>
<global>
<blocks>
<mageadminhtmlblockwidgetgrid>
<class>BugFix_MageAdminhtmlBlockWidgetGrid_Block</class>
</mageadminhtmlblockwidgetgrid>
<adminhtml>
<rewrite>
<widget_grid>BugFix_MageAdminhtmlBlockWidgetGrid_Block_Widget_Grid</widget_grid>
</rewrite>
</adminhtml>
</blocks>
</global>
</config>
app/local/BugFix/MageAdminhtmlBlockWidgetGrid/Block/Widget/Grid.php
<?php
class BugFix_MageAdminhtmlBlockWidgetGrid_Block_Widget_Grid extends Mage_Adminhtml_Block_Widget_Grid
{
public function getRowUrl($item)
{
$res = parent::getRowUrl($item);
return ($res ? $res : '#');
}
}
不知何故,上面的代码不起作用。一定很简单
作为模块的错误修复适用于Magento 1.4,由Magento在1.7中修复。子类化时重写不起作用。在本例中,grid classes子类扩展了adminhtml网格小部件,这意味着该类使用的名称是原始名称,而不是配置中重写的名称 POC:
在这种情况下,您需要将路径和文件从核心代码池复制到本地代码池,并更改其中的定义。由于包含路径优先,将使用本地代码池中的定义。不过,您必须在升级中对此进行说明。Thx。希望Magento 2.0实现PHP5.3+名称空间和Zend 2.0。在那之前,复制到本地,更改就可以了。不幸的是,集成名称空间将是一个巨大的体系结构转变。以下是当前状态:
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors',1);
include 'app/Mage.php';
Mage::setIsDeveloperMode(true);
Mage::app();
$block = Mage::app()->getLayout()->createBlock('adminhtml/widget_grid');
echo get_class($block);
//or echo Mage::getConfig()->getBlockClassName('adminhtml/widget_grid');
$block = new Mage_Adminhtml_Block_Widget_Grid;
echo get_class($block);