Opzioni configurabili che scompaiono dal front-end dopo il ri-indice dello stato dello stock
-
12-12-2019 - |
Domanda
Ho una routine di importazione personalizzata che crea prodotti configurabili e assegna loro i bambini a loro.Questi appaiono sul front-end senza problemi fino a quando non eseguono manualmente il ri-indice dello stato dello stock.
Ho fatto un'istantanea da prima e dopo il ri-index e c'è una tabella che cambia che è cataloginventory_stock_status
in cui la colonna stock_status
viene modificata da 1
(quando viene visualizzato) a 0
(ora non appare) per la mia configurabilegenitore.
Qualcuno può spiegare questo comportamento o sapere come risolverlo?
Solo per chiarire, ri-sincronizzare il mio prodotto che chiama il seguente codice:
$stockStatus = Mage::getModel('cataloginventory/stock_status');
$stockStatus->assignProduct($product);
$stockStatus->saveProductStatus($product->getId(), 1);
.
Rende di nuovo le opzioni fino a quando il successivo ri-indice di stato.
Soluzione 2
Si scopre quando si importano il genitore configurabile, sto saltando un codice che inserisca un'ingresso in cataloginventory_stock_item
che ha causato impostare il stock_status
su 0
quando è stato eseguito il processo di ri-index.Con questo in mente, dobbiamo assicurarci che un genitore configurabile abbia un articolo I.e:
$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();
. Altri suggerimenti
Ho incontrato questo problema durante l'importazione dello stato delle scorte tramite il metodo API.Quello che ho dovuto fare è curare il nucleo riscrivendo un modulo principale.Mage_Catalog_Model_Resource_Product_Status::getProductStatus()
.
Ha un bug in esso che carica erroneamente gli stati dei bambini.Per risolvere questo bug, ho sostituito l'assegnazione di $ Select in all else di questo metodo con
$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);
.
Assicurarsi di farlo sovrascrivere il metodo Mage_Catalog_Model_Resource_Product_Status::getProductStatus()
per eseguire ciò in modo da non modificare direttamente il nucleo.