Programmatically add Bundle Products in Magento, using the SKU / ID of Simple Items

后端 未结 3 1197
说谎
说谎 2020-12-09 06:27

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\" & \"bu

3条回答
  •  一向
    一向 (楼主)
    2020-12-09 07:28

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

提交回复
热议问题