Ich habe ein paar online gefundene Schnipsel ausprobiert, aber ohne Erfolg.
Ich versuche nur, ein Produkt so einzustellen, dass es mit Code auf Lager / nicht vorrätig ist. Dies ist soweit ich gekommen bin:
$product = Mage::getModel('catalog/product')->load( 'id' );
$stockItem = $product->getStockItem();
$stockItem->setData('manage_stock', 1);
$stockItem->setData('is_in_stock', 0);
$stockItem->setData('use_config_notify_stock_qty', 0);
$stockItem->setData('qty', 0);
$stockItem->save();
$product->save();
Es werden keine Änderungen an den Produktinformationen vorgenommen, wenn diese über das Admin-Panel angezeigt werden. Irgendwelche Ideen?
inventory
ce-1.6.2.0
Mike
quelle
quelle
Antworten:
Versuchen Sie stattdessen Folgendes:
und dann setzen und speichern Sie Ihre Änderungen wie zuvor.
quelle
Versuche Folgendes. Sie sollten kein neues Lagerobjekt laden müssen
Und speichern Sie das Produkt einfach so, wie Sie es in Ihrem Skript getan haben
quelle
Ich hatte ein ähnliches Problem, aber mit dem Unterschied, dass es für ein bestimmtes Produkt kein Lagerartikelobjekt gab. In diesem Fall ist es sinnvoll, das Lagerartikelobjekt zunächst vor dem Festlegen der Menge zu erstellen (es sei denn, es gibt gleichzeitig einen Weg zu ihnen).
quelle
$product->save();
- Wird es nach dem Speichern benötigt$stockItem
?Ich habe Magento 1.8.1.0 CE ausprobiert und konnte "Menge" nicht speichern, da der Wert "type_id" fehlte (für neues Element). gelöst durch
quelle
Als Ergänzung zu allen Antworten kann es eine gute Idee sein, diese zu verwenden,
addData
anstatt siesetData
zu verwenden, um die Informationen sicher zu aktualisieren und nicht nur festzulegen.quelle
Ich möchte eine Änderung von Rajs Antwort vorschlagen, um seltsame Situationen zu unterstützen. Damit die Antwort funktioniert, musste ich die if-Anweisung auskommentieren, da programmatisch erstellte Produkte teilweise, aber unvollständige Bestandsdaten enthalten können. Nur so konnte ich es zum Laufen bringen.
quelle
Hier ist eine mögliche Ursache, die mich ungefähr 2 Stunden Arbeit gekostet hat: Ich habe es ewig versucht und mich gefragt, warum es nicht sparen würde. Ich hatte eine
exit;
PHP-Anweisung nach dem->save()
und ein paar Echos, damit es nicht automatisch zum nächsten Bildschirm wechselt (um das Debuggen zu erleichtern).Die Festschreibungen in die Datenbank müssen jedoch erst spät beim Laden der Seite erfolgen. Sie werden erst gespeichert, wenn ich die
exit;
!quelle
Wie in anderen vorgeschlagenen Antworten kann man die Klasse
Mage_CatalogInventory_Model_Stock_Item
direkt verwenden. Man muss das Produkt jedoch über einen Aufruf korrekt referenzieren,setProduct
um einen Arbeitscode sowohl für neue als auch für vorhandene Lagerartikel zu erhalten.Alternative Lösung
Wenn Sie jedoch
$product->save
trotzdem anrufen, würde ich die Bestandsdaten einfach$product->setStockdata($array)
wie folgt einstellen . Auf diese Weise erstellt Magento aus den Bestandsdaten einen korrekten Lagerartikel. Ein großer Vorteil ist, dass die Aktualisierung des Lagerartikels in derselben Transaktion wie erfolgt$product->save()
. Dies ist wichtig für die Datenkonsistenz.quelle
Dies ist mein C # -Code
is_in_stockSpecified
ist wichtigDies ist die Ausgabe
quelle