Programmatically add Bundle Products in Magento, using the SKU / ID of Simple Items
I have some simple catalog products in Magento, so I have their SKUs & IDs. Now I want to create a Bundled product using the array elements "bundle_options" & "bundle_selections" of the Bundle Items, which are used by the Magento Admin coding in its Observer Class.
Also in the Observer class, there are method calls of two functions "setBundleOptionsData()
" & "setBundleSelectionsData()
", for whose I am not able to find any function definition.
Please any professional post here, because I need some proper way of doing th开发者_运维问答is thing. If it needs, overriding modules or using events, I will do, but I need really professional help. Thanks in advance.
Edit:-
Regarding the two methods mentioned above "setBundleOptionsData()
" & "setBundleSelectionsData()
", what I'm almost certain is that they are using some sort of PHP magic methods, but I don't know where the main logic of these magic methods are written?
Please anybody provide some correct answer. Any help is greatly appreciated.
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
)
))
$MyOptions[0] = array (
'title' => 'My Bad','default_title' => 'My Bad',
'delete' => '',
'type' => 'radio',
'required' => 0,
'position' => 0
);
or
$optionModel = Mage::getModel('bundle/option') ->addSelection('op111') ->setTitle('op111') ->setDefaultTitle('op111') ->setParentId($product_id) ->setStoreId($product->getStoreId()); $optionModel->save();
I am not using any Web Services, for this. I have simply used the following methods meant specifically for the Bundled Products, which are:-
- setBundleOptionsData()
- setBundleSelectionsData()
- setCanSaveBundleSelections(true)
For the first method, the details of the Bundle Options are provided to the method as the parameter in the form of an array. Similarly, for the second method "setBundleSelectionsData()", we are providing the details of the Bundle Selections to this method as the parameter in the form of an array.
This is the main logic in what goes through for adding any Bundled Product in Magento. Hope this helps to any newbies!!!
Please check this link for more details on Bundle Product creation in a proper way.
精彩评论