Question

J'ai une routine d'importation personnalisée qui crée des produits configurables et leur affecte des enfants.Ceux-ci apparaissent sur le front-end sans problème jusqu'à ce que j'exécute manuellement la réindexation de l'état des stocks.

J'ai fait un instantané avant et après la réindexation et il y a une table qui change. cataloginventory_stock_status où le stock_status la colonne est modifiée de 1 (quand il apparaît) à 0 (n'apparaissant plus) pour mon parent configurable.

Quelqu'un peut-il expliquer ce comportement ou savoir comment y remédier ?

Juste pour clarifier, resynchroniser mon produit qui appelle le code suivant :

$stockStatus = Mage::getModel('cataloginventory/stock_status');
$stockStatus->assignProduct($product);
$stockStatus->saveProductStatus($product->getId(), 1);

fait réapparaître les options jusqu'à la prochaine réindexation du statut.

Était-ce utile?

La solution 2

Il s'avère que lors de l'importation du parent configurable, j'ignorais du code qui mettait une entrée dans cataloginventory_stock_item ce qui a provoqué le stock_status être réglé sur 0 lorsque le processus de réindexation a été exécuté.Dans cet esprit, nous devons nous assurer qu'un parent configurable dispose d'un élément, c'est-à-dire :

$stockItem = Mage::getModel('cataloginventory/stock_item');
$stockItem->assignProduct($product);
$stockItem->setData('stock_id', 1);
$stockItem->setData('qty', $stockLevel);
$stockItem->setData('use_config_min_qty', 1);
$stockItem->setData('use_config_backorders', 1);
$stockItem->setData('min_sale_qty', 1);
$stockItem->setData('use_config_min_sale_qty', 1);
$stockItem->setData('use_config_max_sale_qty', 1);
$stockItem->setData('is_in_stock', ($isInStock) ? 1 : 0);
$stockItem->setData('use_config_notify_stock_qty', 1);
$stockItem->setData('use_config_manage_stock', 0);
$stockItem->setData('manage_stock', ($this->getPropS($kcStockItem, 'STOCK_CONTROLLED') == '-1') ? 1 : 0); 
$stockItem->setData('backorders', $backorderVal);
$stockItem->setData('use_config_backorders', "0");
$stockItem->save();

Autres conseils

J'ai rencontré ce problème lors de l'importation de l'état des stocks via la méthode API.Ce que je devais faire était de patcher le noyau en réécrivant un module principal. Mage_Catalog_Model_Resource_Product_Status::getProductStatus()contient un bug qui charge incorrectement les statuts des enfants.Afin de corriger ce bug, j'ai remplacé l'affectation $select dans l'instruction else de cette méthode par

    $select = $adapter->select()
        ->from(
        array('t1' => $attributeTable),
                    '')
        ->joinLeft(
        array('t2' => $attributeTable),
                    't1.entity_id = t2.entity_id AND t1.attribute_id = t2.attribute_id AND t2.store_id = ' . (int)$storeId,
        array('t1.entity_id')
        )
        ->columns(array('value' => $valueCheckSql))
        ->where('t1.store_id = ?', Mage_Core_Model_App::ADMIN_STORE_ID)
        ->where('t1.attribute_id = ?', $attribute->getAttributeId())
        ->where('t1.entity_id IN(?)', $productIds);

Assurez-vous de le faire en remplaçant le Mage_Catalog_Model_Resource_Product_Status::getProductStatus() méthode pour y parvenir afin que vous ne modifiiez pas directement le noyau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top