Magento Wizard
Latest Stories: 

Write articles for us and make money!  Make Money

Changing an Existing Product to Have an Attribute Set

 Add to Favourites   Email This Post Email This Post
This Blog WASN\'TThis Blog WAS (+1 rating, 1 votes)
Loading ...

With Magento, you have the ability of adding attribute sets really easy.  That is, if you have a group of product which all have the same options - you do not have to create those options repetitively (and tediously) with each product - instead you create an Attribute set.

For instance, say you’ve got a category on your web-site which sells computer monitors.  You also need to establish attributes within product the resoliton, screen size, and brightness of the monitor.  Rather than going into each product one by one and adding those three options, you merely create a single attribute set, called “Monitor” (for example).  Then, when you create a product in Magento, its simply a case of selecting the attibute set you want to apply to the product, and hey presto, your job is done!

HOWEVER, at the moment - if you create a “Simple product” - like many people would usually do when they are starting out with Magento, you’ll encounter a problem.  Once you’ve selected what type of product it is, you cannot go back and change or add an attribute set to the product - until now…

Pasting the code below into certain Magento files will alleviate the problem.  You can then simply go into Admin > Manage Products, select multiple products using checkboxes, and use the drop down box at the top-right of the screen to change the Attribute Sets of multiple products at once.  Now didn’t that save a lot of time..!

In app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php around line 253 ad:

$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')->__('Attribute Set'),
'values' => $sets
)
)
));

And then in app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php (anywhere in the class) add a new function:

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)));
}

Hope this helps!

Digg   del.icio.us   Facebook   Google   LinkedIn   Live   Reddit   StumbleUpon   Technorati   TwitThis  

about the author

    This article was written by Sam Davis on October 17, 2008.
    Computing over a glass of Grenache Shiraz... again!
    Sam encourages you to make money by writing articles for us! Learn More

related articles

 Export list of Magento orders in CSV format
 Magento Admin System - Video Guide
 Setting Catalog Prices Rules in Magento
 Cannot upload images in on Magento Product Page
 Site-wide Catalog Price Rules do not over-ride Special Prices!

comments

One Response to “Changing an Existing Product to Have an Attribute Set”

  1. Conor Wyse on November 12th, 2008

    Thanks! It works like a treat.

    A word of warning: there are (word processor style) single left quotes and single right quotes in the code which need to be replaced by simple single quotes. Also there are a couple of double quotes which should actually be pairs of (empty) single quotes.

Leave a Reply





Delete Test Orders in Magento
    Magento Hosting
    Magento Themes
    Just wanted to say that Inline translating is the best thing ever. I love magento....
  • Sponsored Ads

  • The New Blasted Thing

    Blasted Thing has recently undergone an essential re-design, as we prepare to welcome a host of new features in to our web-site.

    We will continue to be gathering useful articles, tutorials and advice regarding Magento - and we'll be focusing on a number of hosting and theme companies which we have independently verified.

  • Translate this page

    Translate