Muszę wykryć za każdym razem, gdy zmienia się poziom zapasów produktu. Odniosłem pewien sukces przy użyciu cataloginventory_stock_item_save_after
zdarzenia, które jest uruchamiane, gdy zapasy są zmieniane w backend lub gdy zamówienie jest anulowane na frontend (przez Paypal), ale nie jest uruchamiane, gdy produkt jest kupowany z frontendu.
Przyłączam się do tego cataloginventory_stock_item_save_after
wydarzenia:
<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) {
Czy muszę użyć innego zdarzenia, aby uchwycić zmianę stanu zapasów, gdy klient coś kupuje, czy też jest coś nie tak ze sposobem, w jaki dołączyłem do wydarzenia?
źródło
Nie można użyć żadnego zdarzenia związanego z modelem towaru magazynowego, ponieważ Magento używa zoptymalizowanego zapytania SQL, aby zmniejszyć zapasy wszystkich zamówionych towarów jednocześnie, omijając model.
Rozwiązałem to, przepisując,
Mage_CatalogInventory_Model_Stock
gdzie dodałem dodatkowe wydarzenie:Wtedy obserwator
cataloginventory_stock_item_correct_qty_after
może wyglądać następująco:Odradzam intensywne przetwarzanie lub dodatkowe wywołania bazy danych (które są niezbędne do wykrycia, na przykład, czy produktu nie ma na magazynie), ale dodawanie produktów do kolejki przetwarzanej przez cronjob, aby zminimalizować dodatkowy czas ładowania użytkownik.
źródło
$stockItem->canSubtractQty()
nie działa u obserwatora ani nie ma$stockItem->getId()
żadnych wskazówek? Wygląda na to, że nie mogę uzyskać dostępu do metod