Я пытаюсь вставить связанные продукты в базу данных Magento из сценария PHP.Рассматриваемая версия - Сообщество 1.5.1.0.
Я попробовал метод, описанный в вопросе " Программно добавить набор продуктов в Magento, используя SKU / ID простых элементов ".Вставленные продукты хорошо отображаются в разделе администрирования - я могу их редактировать, добавлять новые опции и варианты выбора и т. Д. Однако они не отображаются вообще в интерфейсе Magento, независимо от того, что я пытаюсь - например, перестроение индексов или повторное сохранениеих от фоновой.Добавление пакетов через интерфейс администрирования работает нормально.
После некоторых копаний в базе данных я заметил, что нет никаких необходимых записей в таблицах catalog_product_index_price
и catalog_product_index_price_bundle_idx
при использовании моего сценария при добавлении пакета черезback-end обновляет индексы нормально.Для этих таблиц повторная индексация просто игнорирует добавленный пакетный продукт.
Я копался в исходных файлах Magento и не могу найти никаких намеков на то, что я делаю неправильно.Все кэши отключены, выборки есть в наличии, и я попытался включить все данные, которые я выкопал при изучении POST-запроса, который Magento отправляет при вставке продукта в серверную часть.
Вот полный скрипт, который я использую длятестирование вместе с некоторыми отчаянными попытками прокомментированы внизу:
$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();
*/
?>