Was having a hard time with this, but found that this got me over the hump:
$items[] = array(
'title' => 'test title',
'option_id' => '',
'delete' => '',
'type' => 'radio',
'required' => 1,
'position' => 0);
$selections = array();
$selectionRawData[] = array(
'selection_id' => '',
'option_id' => '',
'product_id' => '159',
'delete' => '',
'selection_price_value' => '10',
'selection_price_type' => 0,
'selection_qty' => 1,
'selection_can_change_qty' => 0,
'position' => 0);
$selections[] = $selectionRawData;
$productId = 182;
$product = Mage::getModel('catalog/product')
->setStoreId(0);
if ($productId) {
$product->load($productId);
}
Mage::register('product', $product);
Mage::register('current_product', $product);
$product->setCanSaveConfigurableAttributes(false);
$product->setCanSaveCustomOptions(true);
$product->setBundleOptionsData($items);
$product->setBundleSelectionsData($selections);
$product->setCanSaveCustomOptions(true);
$product->setCanSaveBundleSelections(true);
$product->save();
Specifically, the
Mage::register('product', $product);
Mage::register('current_product', $product);
was the key
EDIT::
Also looks like there's a bit of a peculiarity when trying to add multiple options / selections. The setBundleOptionsData takes an array of options i.e.
Array(
[1] => Array
(
[title] => Option 2
[option_id] =>
[delete] =>
[type] => select
[required] => 1
[position] =>
)
[0] => Array
(
[title] => Option 1
[option_id] =>
[delete] =>
[type] => select
[required] => 1
[position] =>
))
And then the selections will be an array of selections arrays with their indexes corresponding to the options array:
Array(
[1] => Array
(
[2] => Array
(
[selection_id] =>
[option_id] =>
[product_id] => 133
[delete] =>
[selection_price_value] => 0.00
[selection_price_type] => 0
[selection_qty] => 1
[selection_can_change_qty] => 1
[position] => 0
)
[3] => Array
(
[selection_id] =>
[option_id] =>
[product_id] => 132
[delete] =>
[selection_price_value] => 0.00
[selection_price_type] => 0
[selection_qty] => 1
[selection_can_change_qty] => 1
[position] => 0
)
)
[0] => Array
(
[0] => Array
(
[selection_id] =>
[option_id] =>
[product_id] => 206
[delete] =>
[selection_price_value] => 0.00
[selection_price_type] => 0
[selection_qty] => 1
[selection_can_change_qty] => 1
[position] => 0
)
[1] => Array
(
[selection_id] =>
[option_id] =>
[product_id] => 159
[delete] =>
[selection_price_value] => 0.00
[selection_price_type] => 0
[selection_qty] => 1
[selection_can_change_qty] => 1
[position] => 0
)
))
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…