0

私がこれまでに持っているもの:

etc/modules/BugFix_MageAdminhtmlBlockWidgetGrid.xml

<?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 で修正されています)。

4

1 に答える 1

0

サブクラス化する場合、書き換えは機能しません。この場合、グリッド クラスextendsは adminhtml グリッド ウィジェットをサブクラス化 ( ) します。つまり、クラスに使用される名前は元の名前であり、構成から書き直された名前ではありません。

概念実証:

<?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);

この場合、パスとファイルをコア コードプールからローカル コードプールにコピーし、そこで定義を変更する必要があります。インクルード パスの優先順位により、ローカル コードプールの定義が使用されます。ただし、アップグレードではこれを考慮する必要があります。

于 2012-07-04T14:27:52.577 に答える