我有一个自定义属性添加到我的目录中。它是一个选择框

在列出目录时,我想显示该属性过滤它。

在我的 mage/adminhtml/block/catalog/product/grid.php 我有 _preparecollection 功能

我正在尝试将我的额外过滤器添加到 _preparecolletion 从我的自定义模块。

怎么做

 protected function _prepareCollection()
    {
        $store = $this->_getStore();
        $collection = Mage::getModel('catalog/product')->getCollection()
            ->addAttributeToSelect('sku')
            ->addAttributeToSelect('name')
            ->addAttributeToSelect('attribute_set_id')
            ->addAttributeToSelect('type_id')
            ->addFieldToFilter('my_custom_field');// i want to add this filter from my custom module
        // so that i don't need to touch my core files.

可能吗?

有帮助吗?

解决方案

在app/code/local/company/module/etc中,在您的config.xml中输入此信息

<config>
<global>
    <blocks>
        <adminhtml>
            <rewrite>
                <catalog_product_grid>Company_Module_Block_Adminhtml_Catalog_Product_Grid</catalog_product_grid>
            </rewrite>
        </adminhtml>
    </blocks>
</global>

在App/code/local/company/module/block/adminhtml/catalog/product/grid.php中

      class Company_Module_Block_Adminhtml_Catalog_Product_Grid extends Mage_Adminhtml_Block_Catalog_Product_Grid
    {

        protected function _prepareCollection()
        {
            parent::_prepareCollection();
            $this->getCollection()->addFieldToFilter('field', 'value');
            return $this;
        }

}

其他提示

我假设您想在产品网格中添加一个新的可过滤列,从您的问题中不清楚。就像我说的那样,在这种情况下,重写不是必需的,但是由于您想使用重写,因此您可以做到这一点。

首先,将产品网格重写在您的模块中。假设您的模块称为Company_Module。在下面 app/code/local/Company/Module/etc, ,在您的 config.xml

<config>
    <global>
        <blocks>
            <adminhtml>
                <rewrite>
                    <catalog_product_grid>Company_Module_Block_Adminhtml_Catalog_Product_Grid</catalog_product_grid>
                </rewrite>
            </adminhtml>
        </blocks>
    </global>
</config>

这告诉Magento您想重写网格块。在此示例中,我将使用Magento示例数据1.6+-属性 color, ,使用类似于您的选项。您需要覆盖2种方法, _prepareCollection_prepareColumns.

app/code/local/Company/Module/Block/Adminhtml/Catalog/Product/Grid.php

class Company_Module_Block_Adminhtml_Catalog_Product_Grid extends Mage_Adminhtml_Block_Catalog_Product_Grid
{

    protected function _prepareCollection()
    {
        parent::_prepareCollection();
        $this->getCollection()->addAttributeToSelect('color');
        return $this;
    }

    protected function _prepareColumns()
    {
        $options = Mage::getSingleton('eav/config')
                ->getAttribute(Mage_Catalog_Model_Product::ENTITY, 'color')
                ->getSource()
                ->getAllOptions(false, true);
        $optionsArray = array();
        foreach ($options as $option) {
            $optionsArray[$option['value']] = $option['label'];
        }

        $this->addColumnAfter('color', array(
            'header' => Mage::helper('catalog')->__('Color'),
            'width' => '100px',
            'type' => 'options',
            'options' => $optionsArray,
            'index' => 'color',
        ), 'status');

        parent::_prepareColumns();
        return $this;
    }
}

通过这样做,您将获得一个可过滤的额外列。希望我能正确解决您的问题。

我已经使用事件观察者已经在模块中做了类似的事情。那时我做了一些研究,我找不到一个“更好的”解决方案。这是模块,以防您要查看它: https://github.com/mzentrale/mzentrale_productthumb

基本上,我定义了一个adminhtml观察者,该观察者倾听 catalog_product_collection_load_before, ,并且它仅为给定的手柄加载属性(adminhtml_catalog_product_indexadminhtml_catalog_product_grid)。然后,我使用布局XML添加了额外的列。

许可以下: CC-BY-SA归因
scroll top