[英]Programatically added bundle product isn't showing up in frontend
I am trying to insert bundled products to the Magento database from a PHP script.我正在尝试从 PHP 脚本将捆绑产品插入 Magento 数据库。 The version in question is Community 1.5.1.0.有问题的版本是 Community 1.5.1.0。
I tried the method described in the question " Programmatically add Bundle Products in Magento, using the SKU / ID of Simple Items ".我尝试了问题“ 使用简单项目的 SKU / ID 以编程方式在 Magento 中添加捆绑产品”中描述的方法。 The inserted products show up nicely in the administration section -- I can edit them, add new options and selections etc. However, they are not showing up at all in the Magento frontend no matter what I try - eg rebuilding indexes or re-saving them from the back-end.插入的产品很好地显示在管理部分 - 我可以编辑它们,添加新选项和选择等。但是,无论我尝试什么,它们都不会出现在 Magento 前端 - 例如重建索引或重新保存他们从后端。 Adding bundles through the administration interface works fine.通过管理界面添加捆绑包可以正常工作。
After some digging through the database, I noticed there are no necessary entries in the catalog_product_index_price
and catalog_product_index_price_bundle_idx
tables when using my script, while adding the bundle through the back-end updates the indexes normally.在对数据库进行了一些挖掘之后,我注意到在使用我的脚本时catalog_product_index_price
和catalog_product_index_price_bundle_idx
表中没有必要的条目,而通过后端添加bundle 会正常更新索引。 Re-indexing simply ignores the added bundle product as far as those tables are concerned.就这些表而言,重新索引只会忽略添加的捆绑产品。
I dug through the Magento source files and can't find any hints on what I'm doing wrong.我翻阅了 Magento 源文件,找不到任何关于我做错了什么的提示。 All caches are disabled, selections are in stock, and I tried to include all data I dug up while studying the POST request Magento sends while inserting the product in the back-end.所有缓存都被禁用,选择有库存,我试图包括我在研究 Magento 在后端插入产品时发送的 POST 请求时挖掘的所有数据。
Here's the complete script I use for testing, along with some desperate attempts commented out at the bottom:这是我用于测试的完整脚本,以及底部注释掉的一些绝望尝试:
$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,
'position' => 0,
'is_default' => true,
'selection_id' => '',
'option_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();
*/
?>
Please try using the following code & see what happens:-请尝试使用以下代码并查看会发生什么:-
<?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',
'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);
Mage::register('product', $product);
Mage::register('current_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,
'option_id' => '',
'position' => 0,
'type' => 'select',
'title' => 'FooOption',
'default_title' => 'FooOption',
'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,
'selection_qty' => 1,
'selection_can_change_qty' => 1,
'position' => 0,
'is_default' => 1,
'selection_id' => '',
'selection_price_type' => 0,
'selection_price_value' => 0.0,
'option_id' => '',
'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();
?>
Hope it helps.希望能帮助到你。
I have tried using your code, but it did not seem to work in Magento 1.7.0.2.我试过使用你的代码,但它似乎在 Magento 1.7.0.2 中不起作用。 Apparently the product could not be saved.显然无法保存产品。
What I did was added the following lines:我所做的是添加了以下几行:
Mage::register('product', $product);
Mage::register('current_product', $product);
$product->setCanSaveConfigurableAttributes(false);
$product->setCanSaveCustomOptions(true);
Just before the lines:就在行之前:
// Set the Bundle Options & Selection Data
$product->setBundleOptionsData($optionRawData);
$product->setBundleSelectionsData($selectionRawData);
$product->setCanSaveBundleSelections(true);
$product->setAffectBundleProductSelections(true);
$product->save();
This seemed to fix the issue of not being able to save the file.这似乎解决了无法保存文件的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.