Saya perlu mendeteksi kapan tingkat persediaan suatu produk berubah. Saya sudah cukup sukses menggunakan cataloginventory_stock_item_save_afteracara yang dipicu saat inventaris diubah di backend, atau ketika pesanan dibatalkan di frontend (via Paypal), tetapi tidak dipicu ketika produk dibeli dari frontend.
Saya mengaitkan ke cataloginventory_stock_item_save_afteracara seperti ini:
Apakah saya perlu menggunakan acara lain untuk menangkap perubahan inventaris ketika pelanggan membeli sesuatu, atau ada sesuatu yang salah dengan cara saya terhubung ke acara tersebut?
Sudah beberapa waktu yang lalu saya membangun sesuatu untuk ini, saya harus mendengarkan banyak pengamat karena mereka di mana tidak semua ditangani oleh penyimpanan katalog katalog, saya harus mengikuti kode:
Ketika saya menggunakan ini apa adanya, itu menghasilkan kesalahan 500 server ketika membatalkan pesanan dan menempatkan pesanan tidak berfungsi. Saya harus menghapus kondisi if ($ this-> isEnabled ()) dari fungsi agar ini berfungsi. Adakah alasan mengapa hal ini terjadi? Apakah karena saya menggunakan tipe singleton? Terima kasih
Moustafa Elqabbany
5
Anda tidak dapat menggunakan peristiwa apa pun yang terkait dengan model item persediaan, karena Magento menggunakan kueri SQL yang dioptimalkan untuk mengurangi stok untuk semua item yang dipesan sekaligus, melewati model.
Saya memecahkan ini dengan menulis ulang di Mage_CatalogInventory_Model_Stockmana saya menambahkan acara tambahan:
Maka pengamat untuk cataloginventory_stock_item_correct_qty_afterdapat terlihat seperti ini:
/**
* @var $items array array($productId => array('qty'=>$qty, 'item'=>$stockItem))
*/
$items = $observer->getItems();foreach($items as $productId => $item){
$stockItem = $item['item'];
$product = $stockItem->getProduct();// Do anything you need with $stockItem and $product here}
Saya sarankan untuk tidak melakukan pemrosesan berat atau panggilan database tambahan (yang diperlukan untuk mendeteksi jika produk kehabisan stok misalnya), tetapi untuk menambahkan produk ke antrian yang diproses oleh cronjob, untuk meminimalkan waktu muat tambahan untuk pengguna.
$stockItem->canSubtractQty()tidak bekerja di pengamat juga $stockItem->getId().. ada tips? Sepertinya saya tidak dapat mengakses metode
snh_nl
Fabian, apa tujuan menambahkan acara khusus di sini karena Anda dapat menambahkan fitur dengan fungsi yang ditimpa itu sendiri? apakah ini hanya untuk memisahkan? Mohon panduannya.
Magento Learner
@ MagentoLearner ya, itu memudahkan saya untuk menggunakan kembali dan menambahkan fitur yang berbeda. Secara teknis Anda juga bisa memperkenalkan metode pribadi sebagai gantinya
Fabian Schmengler
Ini mungkin melibatkan penulisan ulang kelas inti, tetapi masih merupakan solusi paling lengkap di sini. Kadang-kadang Anda hanya perlu menambahkan acara Anda sendiri di M1: P
Anda tidak dapat menggunakan peristiwa apa pun yang terkait dengan model item persediaan, karena Magento menggunakan kueri SQL yang dioptimalkan untuk mengurangi stok untuk semua item yang dipesan sekaligus, melewati model.
Saya memecahkan ini dengan menulis ulang di
Mage_CatalogInventory_Model_Stock
mana saya menambahkan acara tambahan:Maka pengamat untuk
cataloginventory_stock_item_correct_qty_after
dapat terlihat seperti ini:Saya sarankan untuk tidak melakukan pemrosesan berat atau panggilan database tambahan (yang diperlukan untuk mendeteksi jika produk kehabisan stok misalnya), tetapi untuk menambahkan produk ke antrian yang diproses oleh cronjob, untuk meminimalkan waktu muat tambahan untuk pengguna.
sumber
$stockItem->canSubtractQty()
tidak bekerja di pengamat juga$stockItem->getId()
.. ada tips? Sepertinya saya tidak dapat mengakses metode