Ich muss feststellen, wann sich der Lagerbestand eines Produkts ändert. Ich hatte einige Erfolge mit dem cataloginventory_stock_item_save_after
Ereignis, das ausgelöst wird, wenn das Inventar im Backend geändert wird oder wenn eine Bestellung im Frontend (über Paypal) storniert wird, aber nicht ausgelöst wird, wenn ein Produkt über das Frontend gekauft wird.
Ich betrete das cataloginventory_stock_item_save_after
Event wie folgt:
<global>
<events>
<cataloginventory_stock_item_save_after>
<observers>
<cataloginventory_stock_item_save_after_handler>
<type>model</type>
<class>stockchange/observer</class>
<method>stockChange</method>
</cataloginventory_stock_item_save_after_handler>
</observers>
</cataloginventory_stock_item_save_after>
</events>
<?php
class FashionBunker_StockChange_Model_Observer {
public function stockChange(Varien_Event_Observer $observer) {
Muss ich ein anderes Ereignis verwenden, um die Inventaränderung zu erfassen, wenn ein Kunde etwas kauft, oder stimmt etwas nicht mit der Art und Weise überein, wie ich mich in das Ereignis eingebunden habe?
quelle
Sie können keine Ereignisse verwenden, die sich auf das Lagerartikelmodell beziehen, da Magento mithilfe einer optimierten SQL-Abfrage den Lagerbestand für alle bestellten Artikel gleichzeitig unter Umgehung des Modells verringert.
Ich löste dieses Problem mit einer Umschreibung, in der
Mage_CatalogInventory_Model_Stock
ich ein zusätzliches Ereignis hinzufügte:Dann kann der Beobachter für
cataloginventory_stock_item_correct_qty_after
so aussehen:Ich empfehle, keine umfangreichen Verarbeitungsvorgänge oder zusätzlichen Datenbankaufrufe (die erforderlich sind, um beispielsweise festzustellen, ob das Produkt nicht vorrätig ist) durchzuführen, sondern die Produkte einer Warteschlange hinzuzufügen, die von einem Cronjob verarbeitet wird, um die zusätzliche Ladezeit für das zu minimieren Benutzer.
quelle
$stockItem->canSubtractQty()
arbeitet nicht im beobachter noch gibt$stockItem->getId()
.. irgendwelche tipps? Scheint, ich kann nicht auf die Methoden zugreifen