31 de maio de 2013

[UPDATED]Esta solução só é indicada para quem usa o TBT Enhancedgrid, se você deseja esta funcionalidade recomendo utilizar o módulo Flagbit Change Attribute Set disponível aqui:
http://www.magentocommerce.com/magento-connect/flagbit-change-attribute-set.html
Apesar de não constar compatibilidade com o Magento 1.7.x, funciona!

Este é o meu primeiro post sobre magento, acredito que deverá ser útil, principalmente em pt_BR.

O magento não permite nativamente que esta operação seja realizado obrigando ao administrador exportar e importar os produtos.
É um pouco chato isso pois perde-se muito tempo, mas com essa simples solução o processo se torna bem simples e possível diretamente através da listagem de produtos.
Uma nova ação é adicionada à lista, permitindo assim escolher o grupo de atributos para os produtos selecionados.

 Mão na massa:

Copie o arquivo em app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php para app/code/local/Mage/Adminhtml/Block/Catalog/Product/Grid.php

Se os diretórios/estrutura não existirem, crie!

Edite o arquivo Grid.php e (na versão 1.7.0.2) adicione na função  _prepareMassaction(), linha 286:

        $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'=> 'Alterar Grupo de Atributos',
            'url' => $this->getUrl('*/*/massAttributeSet', array('_current'=>true)),
            'additional' => array(
                'visibility' => array(
                    'name' => 'attribute_set',
                    'type' => 'select',
                    'class' => 'required-entry',
                    'label' => Mage::helper('catalog')->__('Attribute Set'),
                    'values' => $sets
                )
            )
            ));

Copie o arquivo em app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php para app/code/local/Mage/Adminhtml/controllers/Catalog/ProductController.php

Se os diretórios/estrutura não existirem, crie!

Edite o arquivo ProductController.php e (na versão 1.7.0.2) adicione ao final da classe a função massAttributeSetAction, na linha 1103:

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('*/*/index', array('store'=>(int)$this->getRequest()->getParam('store', 0)));
        $this->_redirect('*/*/index');
}

Se você utilizar a extensão/módulo TBT Enhancedgrid, ela subscreve a customização em /local e estas alterações devem ser feitas nos mesmo arquivos mas só que em /app/community/TBT/Enhancedgrid/Block/Catalog/Product/Grid.php na linha 543 e em /app/controllers/Catalog/ProductController.php linha 153.

 

UPDATE:
Dependendo da configuração do PHP do seu servidor, específicamente para:

max_input_vars
e
Maximum execution time

A quantidade de produtos que poderão ser alterados ao mesmo tempo pode variar.