【问题标题】:magento rewrite not workingmagento重写不起作用
【发布时间】:2010-11-23 16:20:43
【问题描述】:

我创建了一个模块,它为我的管理网格使用自定义小部件/网格/列来显示缩略图图像,一切正常。现在我需要在同一个项目中创建另一个模块来做同样的事情,但是图像列不起作用。看起来它甚至没有加载我的新类,因为它不会执行我放入文件的任何 stmt。我知道它正确加载数据,b/c 如果我将类型更改为文本,那么来自数据库的正确信息将填充到该字段中。但是当我更改为新的“图像”类型时,单元格是空的。有谁知道为什么它不起作用?

ABT/Background/etc/config.xml

<global>
    ....
    <blocks>
        <background>
            <class>ABT_Background_Block</class>
        </background>
        <adminhtml>
            <rewrite>
                <widget_grid_column>ABT_Background_Block_Widget_Grid_Column</widget_grid_column>
            </rewrite>
        </adminhtml>
    </blocks>
    ....
</global>

我为启动和运行而复制的模块具有完全相同的配置设置,但它工作正常 ABT/Feature/etc/config.xml

<global>
    ....
    <blocks>
        <feature>
            <class>ABT_Feature_Block</class>
        </feature>
        <adminhtml>
            <rewrite>
                <widget_grid_column>ABT_Feature_Block_Widget_Grid_Column</widget_grid_column>   
            </rewrite>
        </adminhtml>
    </blocks>
    ....
</global>

【问题讨论】:

    标签: php zend-framework configuration magento


    【解决方案1】:

    当你重写一个类时,Magento 会发生什么。

    当 Magento 实例化一个 Block 类时,它使用如下代码

    $this->getLayout()->createBlock('adminhtml/widget_grid_column')
    

    createBlock 方法是一个工厂。 Magento 使用标识符

    adminhtml/widget_grid_column
    

    查找应该实例化的类。默认情况下,这是

    Mage_Adminhtml_Block_Widget_Grid_Column
    

    当你创建你的重写时,你是在告诉 Magento

    嘿。而不是使用 'Mage_Adminhtml_Block_Widget_Grid_Column' 作为 'adminhtml/widget_grid_column',你应该使用 'ABT_Background_Block_Widget_Grid_Column'

    这意味着,对于任何给定的系统,一个类只能被重写一次。在上面显示的代码中,您尝试重写该类两次。只有一个你的重写会赢。

    我会采取的快速方法是将所有您的自定义设置保存在单个覆盖类中。

    更一般地说,我尽量避免使用重写。它们是一个强大的系统,但应该谨慎使用。我没有做太多的网格自定义,但我尝试采用的一般方法是更改​​ adminhtml 布局以从我的自定义模块中实例化一个新的网格类,该模块扩展现有的网格类,这又可以使用自定义列类。

    更多的工作要做,但是一旦你弄明白了,你就可以一遍又一遍地使用该技术,而不必担心重写会产生冲突。

    【讨论】:

    • 这听起来比我正在做的更好。就像我上面说的,这是我的第一个带有 magento 的项目,所以我对这一切都很陌生。您不会碰巧知道任何资源可以帮助我按照您的描述一瘸一拐地做吗?
    • 不幸的是,我没有。大多数关于 Magento 的在线文章都是基于配方的。 “这样做是为了实现这一点”,大多数人都爱上了重写方法。如果您需要尽快完成工作,我会继续使用您的方法,但只需在您的单个覆盖类方法中添加额外的逻辑。我写了很多深入的文章(插件:alanstorm.com/category/magento),可以帮助您充分了解系统以采用我推荐自己的方法,但是需要克服学习曲线。
    • 哦,好吧,我应该能够顺利完成这项工作。感谢您的洞察力和网站,我一定会看看!
    【解决方案2】:

    我不确定您的设置是否正确。

    无论如何,看起来您在同一个类Widget_Grid_Column 上有两个覆盖规则。最后加载的模块是ABT_Feature,因此该块的规则会覆盖ABT_Background 模块的规则。

    你有两个解决方案:

    1. 将特征和背景模块合二为一
    2. 根据背景制作功能块并更新重写规则,以便ABT_Feature_Block_Widget_Grid_Column 类将扩展ABT_Background_Block_Widget_Grid_Column

    【讨论】:

    • 您可能是对的 - 很可能我的设置不正确。这是我第一次与 Magento 合作,我只是按照本指南让我的新类型工作krishnasunuwar.com.np/2009/07/…
    猜你喜欢
    • 2012-03-22
    • 2012-05-30
    • 2011-10-18
    • 2015-05-14
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 2016-04-30
    相关资源
    最近更新 更多