Программно добавленный пакетный продукт не отображается во внешнем интерфейсе

Я пытаюсь вставить связанные продукты в базу данных Magento из сценария PHP. Речь идет о версии Community 1.5.1.0.

Я попробовал метод, описанный в вопросе « Программно добавлять продукты Bundle в Magento, используя SKU / ID простых элементов ». Вставленные продукты хорошо отображаются в разделе администрирования - я могу их редактировать, добавлять новые параметры и выборки и т. Д. Однако они вообще не отображаются в интерфейсе Magento, что бы я ни пытался - например, перестроение индексов или повторное сохранение их из серверной части. Добавление пакетов через интерфейс администрирования работает нормально.

Покопавшись в базе данных, я заметил, что при использовании моего скрипта в таблицах catalog_product_index_price и catalog_product_index_price_bundle_idx нет необходимых записей добавление пакета через серверную часть обычно обновляет индексы. Повторная индексация просто игнорирует добавленный пакетный продукт в отношении этих таблиц.

Я покопался в исходных файлах 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();
*/

?>

7
задан Community 23 May 2017 в 11:53
поделиться