创建捆绑产品,Magento的

问题描述:

我一直在这个例子中沿着如下:Magento programmaticaly create bundle Product创建捆绑产品,Magento的

,当我创建一个新的产品代码工作,但是,我不能让它当我打开一个工作产品捆绑或简单。 [编辑]我可以加载我通过下面的代码以编程方式创建的捆绑产品,并将产品添加到捆绑产品中。通过GUI创建的捆绑产品我无法添加产品。

任何想法如何我可以加载产品,然后捆绑与另一个产品?

这里是我当前的代码:

$items = array(); 
$items[] = array(
    'title'  => 'Bundle Option', 
    'option_id' => '', 
    'delete' => '', 
    'type'  => 'radio', 
    'required' => 1, 
    'position' => 0, 
); 

$selectionRawData = array(); 
$selectionRawData[0] = array(); 
$selectionRawData[0][] = array(
    'selection_id'    => '', 
    'option_id'    => '', 
    'product_id'    => 3, 
    'delete'     => '', 
    'selection_price_value' => 0, 
    'selection_price_type'  => 0, 
    'selection_qty'   => 1, 
    'selection_can_change_qty' => 0, 
    'position'     => 0, 
    'is_default'    => 1, 
); 

$selections = $selectionRawData; 

$websiteIDs = array(1); 
$cats = array(4); 

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 

// load product 
// NOT WORKING 
$product = Mage::getModel('catalog/product'); 
$product->load(127); 


// new product 
/****** 
* THIS WORKS 

$p = array(
      'sku_type' => 1, 
      'sku' => '123321', 
      'name' => "BarProduct", 
      'description' => 'Foo', 
      'short_description' => 'Bar', 
      'type_id' => 'bundle', 
      'attribute_set_id' => 4, 
      'weight_type' => 0, 
      'visibility' => 4, 
      'price_type' => 1, 
      'price_view' => 0, 
      'price' => 1.99, 
      'has_options' => 1, 
      'required_options' => 1, 
      'status' => 1, 
      'created_at' => strtotime('now'), 
      'category_ids' => $cats, 
      'store_id' => 0, 
      'website_ids' => $websiteIDs, 
      'weight' => 0, 
      'weight_type' => 1, 
      'delivery_time' => '', 
      'generate_meta' => 1, 
      'tax_class_id' => 1, //19% 
    ); 
    $product->setData($p); 

*****/ 

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->setAffectBundleProductSelections(true); 

$product->save(); 

$result['product_name'] = $product->getId(); 
return $result; 

我有一些时髦的东西与我的产品指标回事。我删除了我的所有产品并修复了我的索引,现在这种方法可行,虽然效果不好。

所以这是我从过程中收集:

如果你想利用两个简单的产品和捆绑他们,你需要通过$p = array代码来创建一个新的捆绑的捆绑产品上面,再加入两简单的产品。

否则,您将需要通过magento gui预制的捆绑产品。那么您将使用$ product-> load(product_id)命令调出该产品,然后将简单的产品添加到该产品中。

只要删除这样所有不需要的选项:

$optionsselectionsmap = array(); 
     $options = Mage::getModel("bundle/option")->getCollection()->setProductIdFilter($product->getId()); 
     foreach($options as $option){ 
      $selection = Mage::getModel("bundle/selection")->getCollection()->setOptionIdsFilter($option->getId())->getFirstItem(); 
      $tmp = array(); 
      $tmp['option_id'] = $option->getId(); 
      $tmp['selection_id'] = $selection->getData('selection_id'); 
      $optionsselectionsmap[$selection->getData('sku')] = $tmp; 
     } 

$deleteoptionids = array(); 
     foreach($optionsselectionsmap as $k=>$v) $deleteoptionids[] = $v['option_id']; 
     foreach($product->getTypeInstance(true)->getOptionsCollection($product) as $deleteitem){ 
      $deleteitem = $deleteitem->getData(); 
      $deleteitem['delete'] = 1; 
      $bundleOptions[] = $deleteitem; 
     } 

这是捆绑产品的重要:

$product->setData("price_type", 0); 

您必须在保存前将该属性设置为0(动态价格)。 当然,Reindexing是必要的。