Как добавить специальную цену к категории продуктов сетки?

magento.stackexchange https://magento.stackexchange.com/questions/3644

Вопрос

Как добавить колонку специальной цены к

Категория продуктов сетка

под

Каталог -> Управление категориями -> Категория_TO_BE_EDITED

Это было полезно?

Решение

Чтобы достичь этого, вам необходимо переопределить блок, который отображает сетку продукта на экране редактирования категории. Этот блок Mage_Adminhtml_Block_Catalog_Category_Tab_Product.
Для этого создайте новый модуль. Назовем это Easylife_Adminhtml со следующими файлами:
app/etc/modules/Easylife_Adminhtml.xml - Файл объявления модуля.

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Adminhtml>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Adminhtml />
            </depends>
        </Easylife_Adminhtml>
    </modules>
</config>

app/code/local/Easylife/Adminhtml/etc/config.xml - Файл конфигурации модуля

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Adminhtml>
            <version>0.0.1</version>
        </Easylife_Adminhtml>
    </modules>
    <global>
        <blocks>
            <adminhtml>
                <rewrite>
                    <catalog_category_tab_product>Easylife_Adminhtml_Block_Catalog_Category_Tab_Product</catalog_category_tab_product><!-- override the default block with your ownw-->
                </rewrite>
            </adminhtml>
        </blocks>
    </global>
</config>

app/code/local/Easylife/Adminhtml/Block/Catalog/Category/Tab/Product.php - Класс переопределения блока.

<?php 
class Easylife_Adminhtml_Block_Catalog_Category_Tab_Product extends Mage_Adminhtml_Block_Catalog_Category_Tab_Product{
    protected function _prepareCollection()
    {
        if ($this->getCategory()->getId()) {
            $this->setDefaultFilter(array('in_category'=>1));
        }
        $collection = Mage::getModel('catalog/product')->getCollection()
            ->addAttributeToSelect('name')
            ->addAttributeToSelect('sku')
            ->addAttributeToSelect('price')
            ->addAttributeToSelect('special_price')//add attributes you need
            ->addStoreFilter($this->getRequest()->getParam('store'))
            ->joinField('position',
                'catalog/category_product',
                'position',
                'product_id=entity_id',
                'category_id='.(int) $this->getRequest()->getParam('id', 0),
                'left');
        $this->setCollection($collection);

        if ($this->getCategory()->getProductsReadonly()) {
            $productIds = $this->_getSelectedProducts();
            if (empty($productIds)) {
                $productIds = 0;
            }
            $this->getCollection()->addFieldToFilter('entity_id', array('in'=>$productIds));
        }

        //simulate parent::parent::_prepareCollection() because you cannot call parent::_prepareCollection
        if ($this->getCollection()) {

            $this->_preparePage();

            $columnId = $this->getParam($this->getVarNameSort(), $this->_defaultSort);
            $dir      = $this->getParam($this->getVarNameDir(), $this->_defaultDir);
            $filter   = $this->getParam($this->getVarNameFilter(), null);

            if (is_null($filter)) {
                $filter = $this->_defaultFilter;
            }

            if (is_string($filter)) {
                $data = $this->helper('adminhtml')->prepareFilterString($filter);
                $this->_setFilterValues($data);
            }
            else if ($filter && is_array($filter)) {
                $this->_setFilterValues($filter);
            }
            else if(0 !== sizeof($this->_defaultFilter)) {
                $this->_setFilterValues($this->_defaultFilter);
            }

            if (isset($this->_columns[$columnId]) && $this->_columns[$columnId]->getIndex()) {
                $dir = (strtolower($dir)=='desc') ? 'desc' : 'asc';
                $this->_columns[$columnId]->setDir($dir);
                $this->_setCollectionOrder($this->_columns[$columnId]);
            }

            if (!$this->_isExport) {
                $this->getCollection()->load();
                $this->_afterLoadCollection();
            }
        }

        return $this;
    }

    protected function _prepareColumns()
    {
        //add the special price collumn after the 'price' column
        $this->addColumnAfter('special_price', array(
            'header'    => Mage::helper('catalog')->__('Special Price'),
            'type'  => 'currency',
            'width'     => '1',
            'currency_code' => (string) Mage::getStoreConfig(Mage_Directory_Model_Currency::XML_PATH_CURRENCY_BASE),
            'index'     => 'special_price'
        ), 'price');
        return parent::_prepareColumns();
    }
}

Очистить кеш, и он должен работать. Это сработало для меня.

Другие советы

Я сделал то же самое, что и Мариус, но вместо того, чтобы перезаписать _prepareCollection () , я перезаписываю setCollection () как это

public function setCollection($collection){
        $collection->addAttributeToSelect('manufacturer');
        $collection->addAttributeToSelect('visibility');  
        parent::setCollection($collection);
    }

Это сделало код намного короче. Я не знаю, есть ли какие -либо побочные эффекты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top