17

If have a multiselect attribute and want to set the selection on a product.

$selectedOptions = "red,green,blue";
$product->..... // # what to do?

How can I do that?

3 Answers 3

24

Multiselect attributes can be set as a comma separated list (or also an array) containing the attribute value ids.

So first we have to convert the actual values to Magento's internal ids.

$attrCode = 'color_base';
$sourceModel = Mage::getModel('catalog/product')->getResource()
    ->getAttribute($attrCode)->getSource();
$valuesText = explode(',', 'red,green,blue');
$valuesIds = array_map(array($sourceModel, 'getOptionId'), $valuesText);
$product->setData($attrCode, $valuesIds);
$product->save();
1
  • this is not working, the page is keep on loading with this code
    – Netorica
    Commented Nov 25, 2013 at 6:34
2

Modify last line of the above code

$product->save();

with

$product->getResource()->saveAttribute($product, $attrCode);

It works

0
$attrCode = 'color_base';
$sourceModel = Mage::getModel('catalog/product')->getResource()
   ->getAttribute($attrCode)->getSource();
$valuesText = explode(',', 'red,green,blue');
$valuesIds = array_map(array($sourceModel, 'getOptionId'), $valuesText);
$OptionIds = implode(',', $valuesIds); 
$product->setColorBase($attrCode, $OptionIds);
$product->getResource()->saveAttribute($product, 'color_base');  

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.