bookmark bookmark
Автор: Мафусаил Дата публикации: 26 ноября 2008

Итак, практически сразу после небольшого ознакомления с magentocommerce и добавлением нескольких товаров для теста, мне понадобилось сменить набор атрибутов(attribute set) у уже добавленного товара.

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

первое изменение в файле:

1
app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php

перед строкой:

1
$this->getMassactionBlock()->addItem('attributes', array(

вставляем:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$sets = Mage::getResourceModel('eav/entity_attribute_set_collection')
            ->setEntityTypeFilter(Mage::getModel('catalog/product')->getResource()->getTypeId())
            ->load()
            ->toOptionHash();
        array_unshift($statuses, array('label'=>'', 'value'=>''));
        $this->getMassactionBlock()->addItem('attribute_set', array(
             'label'=> Mage::helper('catalog')->__('Change attribute set'),
             'url'  => $this->getUrl('*/*/massAttributeSet', array('_current'=>true)),
             'additional' => array(
                    'visibility' => array(
                         'name' => 'attribute_set',
                         'type' => 'select',
                         'class' => 'required-entry',
                         'label' => Mage::helper('catalog')->__('Изменить набор атрибутов'),
                         'values' => $sets
                     )
             )
        ));

второе изменение – в файле:

1
app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php

а теперь, например перед строкой:

1
protected function _isAllowed()

вставляем блок кода:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public function massAttributeSetAction()
    {
        $productIds = $this->getRequest()->getParam('product');
        $storeId = (int)$this->getRequest()->getParam('store', 0);
        if(!is_array($productIds)) {
            $this->_getSession()->addError($this->__('Please select product(s)'));
        } else {
            try {
                foreach ($productIds as $productId) {
                    $product = Mage::getSingleton('catalog/product')
                        ->unsetData()
                        ->setStoreId($storeId)
                        ->load($productId)
                        ->setAttributeSetId($this->getRequest()->getParam('attribute_set'))
                        ->setIsMassupdate(true)
                        ->save();
                }
                Mage::dispatchEvent('catalog_product_massupdate_after', array('products'=>$productIds));
                $this->_getSession()->addSuccess(
                    $this->__('Total of %d record(s) were successfully updated', count($productIds))
                );
            } catch (Exception $e) {
                $this->_getSession()->addError($e->getMessage());
            }
        }
        $this->_redirect('*/*/', array('store'=>(int)$this->getRequest()->getParam('store', 0)));
    }

После изменения кода в magento commerce появляется возможность смены набора атрибутов (attribute set) для уже добавленного товара.

Проверяем: в админ-панели заходим в главном меню затем “Catalog” – “Manage products” и в поле “Actions” должен появиться пункт “Изменить набор атрибутов“.

В категории: Мастерская magento

Рекламный блок

Оставить комментарий

Стабильная версия: 1.4.2.0 | Скачать Magento

Рекламный блок