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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.