Итак, практически сразу после небольшого ознакомления с magentocommerce и добавлением нескольких товаров для теста, мне понадобилось сменить набор атрибутов(attribute set) у уже добавленного товара.
Как ни странно, но в движке по умолчанию нет такого функционала. Поэтому, после нескольких минут поиска на форуме можно найти решение данной проблемы. Для этого потребуется небольшая правка кода в двух файлах.
первое изменение – в файле:
1 | app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php |
перед строкой:
1 | $this->getMassactionBlock()->addItem('attributes', ( |
вставляем:
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(); ($statuses, ('label'=>'', 'value'=>'')); $this->getMassactionBlock()->addItem('attribute_set', ( 'label'=> Mage::helper('catalog')->__('Change attribute set'), 'url' => $this->getUrl('*/*/massAttributeSet', ('_current'=>true)), 'additional' => ( 'visibility' => ( '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(!($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', ('products'=>$productIds)); $this->_getSession()->addSuccess( $this->__('Total of %d record(s) were successfully updated', ($productIds)) ); } catch (Exception $e) { $this->_getSession()->addError($e->getMessage()); } } $this->_redirect('*/*/', ('store'=>(int)$this->getRequest()->getParam('store', 0))); } |
После изменения кода в magento commerce появляется возможность смены набора атрибутов (attribute set) для уже добавленного товара.
Проверяем: в админ-панели заходим в главном меню затем “Catalog” – “Manage products” и в поле “Actions” должен появиться пункт “Изменить набор атрибутов“.

