как добавить еще один атрибут для выбора, который является пользовательским атрибутом в списке продуктов


У меня есть пользовательский атрибут, добавленный в мой каталог. это поле выбора

При перечислении каталога я хочу показать его отфильтрованным по этому атрибуту.

В моем 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.

Возможно ли это?

Author: zamil, 2013-03-11

3 answers

В приложении/коде/локальном/Компании/модуле/и т. Д. Введите это в свой 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;
        }

}
 1
Author: Linux Packet, 2013-03-13 11:46:37

Я предполагаю, что вы хотите добавить новый фильтруемый столбец в сетку продуктов, это действительно неясно из вашего вопроса. Как я уже сказал, в этом случае перезапись не требуется, но поскольку вы хотите использовать перезапись, вот как вы можете это сделать.

Во-первых, перепишите сетку продуктов в своем модуле. Допустим, ваш модуль называется 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 пример данных для CE 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;
    }
}

Делая это, вы получаете дополнительный столбец, который можно фильтровать. Надеюсь, я правильно понял ваш вопрос.

 1
Author: fmrng, 2016-03-24 16:12:57

Я уже делал нечто подобное в модуле, используя наблюдателя событий. Тогда я провел некоторое исследование и не смог найти "лучшего" решения для этого. Вот модуль, на случай, если вы захотите взглянуть на него: https://github.com/mzentrale/Mzentrale_ProductThumb

В принципе, я определил наблюдателя adminhtml, который слушает catalog_product_collection_load_before, и он загружает атрибут только для заданных дескрипторов (adminhtml_catalog_product_index и adminhtml_catalog_product_grid). Затем я добавил дополнительный столбец, используя XML-формат макета.

 0
Author: fmrng, 2013-03-11 13:51:54