我试图从
PHP脚本将捆绑的产品插入Magento数据库.有问题的版本是Community 1.5.1.0.
我尝试了问题“Programmatically add Bundle Products in Magento,using the SKU / ID of Simple Items”中描述的方法.插入的产品很好地显示在管理部分 – 我可以编辑它们,添加新选项和选择等.但是,无论我尝试什么,它们都不会出现在Magento前端 – 例如重建索引或从后端重新保存它们.通过管理界面添加捆绑工作正常.
在对数据库进行一些挖掘之后,我注意到在使用我的脚本时,catalog_product_index_price和catalog_product_index_price_bundle_idx表中没有必要的条目,而通过后端添加bundle通常会更新索引.就这些表而言,重新索引只是忽略添加的捆绑产品.
我挖掘了Magento源文件,找不到任何关于我做错的提示.所有缓存都被禁用,选择有库存,我试图包括我在研究Magento在后端插入产品时发送的POST请求时挖出的所有数据.
这是我用于测试的完整脚本,以及在底部注释的一些绝望尝试:
$magentoPath = '/home/nikola/bin/magento-1.5/'; require_once($magentoPath . 'includes/config.PHP'); require_once($magentoPath . 'app/Mage.PHP'); $storeID = 1; $websiteIDs = array(1); $mageObj = Mage::app()->setCurrentStore($storeID); $product = Mage::getModel('catalog/product'); $cats = array("210"); $p = array( 'sku_type' => 0,'sku' => 687,'name' => "BarProduct",'description' => 'Foo','short_description' => 'Bar','type_id' => 'bundle','attribute_set_id' => 4,'weight_type' => 0,'visibility' => 4,'price_type' => 0,'price_view' => 0,'status' => 1,'created_at' => strtotime('now'),'category_ids' => $cats,'store_id' => $storeID,'website_ids' => $websiteIDs ); $product->setData($p); $product->setCanSaveBundleSelections(true); $product->setCanSaveCustomOptions(true); Mage::register('product',$product); Mage::register('current_product',$product); $optionRawData = array(); $selectionRawData = array(); $optionRawData[0] = array( 'required' => 1,'option_id' => '','position' => 0,'type' => 'select','title' => 'FooOption','default_title' => 'FooOption','delete' => '' ); $selectionRawData[0] = array(); $selectionRawData[0][] = array( 'product_id' => 1810,'is_default' => true,'selection_id' => '','selection_price_type' => 0,'selection_price_value' => 0.0,'selection_qty' => 1,'selection_can_change_qty' => 1,'delete' => '' ); $product->setBundleOptionsData($optionRawData); $product->setBundleSelectionsData($selectionRawData); $product->save(); /* $stockItem = Mage::getModel('cataloginventory/stock_item'); $stockItem->loadByProduct($product->getId()); if (!$stockItem->getId()) { $stockItem->setProductId($product->getId())->setStockId(1); } $stockItem->setData('is_in_stock',1); $stockItem->save(); $pi = Mage::getSingleton('bundle/price_index'); $pi->addPriceIndexToProduct($product); $pi->save(); */ ?>
请尝试使用以下代码&走着瞧吧:-
<?PHP $magentoPath = '/home/nikola/bin/magento-1.5/'; require_once($magentoPath . 'includes/config.PHP'); require_once($magentoPath . 'app/Mage.PHP'); $storeID = 1; $websiteIDs = array(1); $cats = array("210"); Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); $product = Mage::getModel('catalog/product'); $p = array( 'sku_type' => 0,'sku' => '687','website_ids' => $websiteIDs ); $product->setData($p); Mage::register('product',$product); /** * Section of Bundle Options * * required Properties of Bundle Options are:- * 1. title * 2. option_id * 3. delete * 4. type * 5. required * 6. position * 7. default_title */ $optionRawData = array(); $optionRawData[0] = array( 'required' => 1,'delete' => '',); /** * Section of Bundle Selections * * required Properties of Bundle Selections * 1. selection_id * 2. option_id * 3. product_id * 4. delete * 5. selection_price_value * 6. selection_price_type * 7. selection_qty * 8. selection_can_change_qty * 9. position * 10. is_default */ $selectionRawData = array(); $selectionRawData[0] = array(); $selectionRawData[0][] = array( 'product_id' => 1810,'is_default' => 1,'delete' => '' ); $product->setCanSaveConfigurableAttributes(false); $product->setCanSaveCustomOptions(true); // Set the Bundle Options & Selection Data $product->setBundleOptionsData($optionRawData); $product->setBundleSelectionsData($selectionRawData); $product->setCanSaveBundleSelections(true); $product->setAffectBundleProductSelections(true); $product->save(); ?>
希望能帮助到你.