Standardowo po utworzeniu produktu typu "Configurable" nie ma już potem możliwości zmiany nadanych zestawów cech, zdarza się jednak, że czasem źle wybierzemy te zestawy. Aby nie kasować produktu i aby nie tracić czasu na powtórne dodawanie lub aby hurtowo zmienić zestawy dla kilkunastu produktów na raz należy wykonać następujące czynności:
1. Otwieramy app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php i znajdujemy w nim następujący fragment kodu (około linii 250 - 260):
Kod: Zaznacz cały
$statuses = Mage::getSingleton('catalog/product_status')->getOptionArray();
array_unshift($statuses, array('label'=>'', 'value'=>''));
$this->getMassactionBlock()->addItem('status', array(
'label'=> Mage::helper('catalog')->__('Change status'),
'url' => $this->getUrl('*/*/massStatus', array('_current'=>true)),
'additional' => array(
'visibility' => array(
'name' => 'status',
'type' => 'select',
'class' => 'required-entry',
'label' => Mage::helper('catalog')->__('Status'),
'values' => $statuses
)
)
));
poniżej dodajemy:
Kod: Zaznacz cały
$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')->__('Zmień zestaw cech'),
'values' => $sets
)
)
));
2. Otwieramy app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php i przed:
Kod: Zaznacz cały
protected function _isAllowed()
{
return Mage::getSingleton('admin/session')->isAllowed('catalog/products');
}
dodajemy następujący fragment kodu:
Kod: Zaznacz cały
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)));
}