Frage

Ich habe eine benutzerdefinierte Importroutine, die konfigurierbare Produkte erstellt und ihnen untergeordnete Elemente zuweist.Diese werden ohne Probleme im Frontend angezeigt, bis ich die Neuindexierung des Aktienstatus manuell durchführe.

Ich habe einen Schnappschuss von vor und nach der Neuindexierung gemacht und es ändert sich eine Tabelle, nämlich cataloginventory_stock_status wo die stock_status spalte wird geändert von 1 (wenn es erscheint) zu 0 (wird jetzt nicht angezeigt) für mein konfigurierbares Elternteil.

Kann jemand dieses Verhalten erklären oder wissen, wie man es behebt?

Nur um das zu verdeutlichen, synchronisieren Sie mein Produkt erneut, das den folgenden Code aufruft:

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

lässt die Optionen bis zur nächsten Statusneuindizierung erneut angezeigt werden.

War es hilfreich?

Lösung 2

Es stellte sich heraus, dass ich beim Importieren des konfigurierbaren übergeordneten Elements einen Code übersprungen habe, in den ein Eintrag eingefügt wurde cataloginventory_stock_item was verursachte die stock_status zu setzen auf 0 wann der Neuindexierungsprozess ausgeführt wurde.In diesem Sinne müssen wir sicherstellen, dass ein konfigurierbares Elternteil ein Element hat, dh:

$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();

Andere Tipps

Ich bin beim Importieren des Lagerstatus über die API-Methode auf dieses Problem gestoßen.Was ich tun musste, war den Kern zu patchen, indem ich ein Kernmodul neu schrieb. Mage_Catalog_Model_Resource_Product_Status::getProductStatus() hat einen Fehler darin, der die untergeordneten Status falsch lädt.Um diesen Fehler zu beheben, habe ich die $ select-Zuweisung in der else-Anweisung dieser Methode durch ersetzt

    $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);

Stellen Sie sicher, dass Sie dies tun, indem Sie das überschreiben Mage_Catalog_Model_Resource_Product_Status::getProductStatus() methode, um dies zu erreichen, damit Sie den Kern nicht direkt ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top