Email pemberitahuan stok untuk produk yang dapat dikonfigurasi

8

Baru-baru ini saya mengalami masalah dengan sebuah toko, ketika saya mulai memperhatikan email notifikasi stok tertentu tidak dikirim. Semua email untuk produk sederhana baik-baik saja, tetapi ketika datang ke produk yang dapat dikonfigurasi, inilah masalah saya:

Saat ini, pelanggan dapat mendaftar untuk email notifikasi stok. Pekerjaan cron berjalan dengan baik, dan sistem secara logis hanya mengirim mereka ketika mereka benar-benar dalam stok dan tidak diatur ke 0. Namun produk yang dapat dikonfigurasi, selalu diatur ke 0, dan produk sederhana yang termasuk dalam yang dapat dikonfigurasi ini melakukan perubahan stok. Jadi apa yang terjadi sekarang adalah, orang hanya dapat berlangganan produk ketika SEMUA ukuran kehabisan stok (sehingga bahkan tidak dapat memilih ukuran yang ingin mereka terima informasi), tetapi kemudian ketika sepatu misalnya mendapatkan kembali persediaan , mereka tidak menerima pemberitahuan karena yang dapat dikonfigurasi (yang merupakan produk tempat mereka berlangganan) masih pada 0.

Saya yakin saya bukan orang pertama yang mengalami masalah ini, jadi saya bertanya-tanya apakah ada yang bisa mengatasinya atau menemukan solusi?

magin
sumber

Jawaban:

1

Sepertinya Anda perlu menyesuaikan kode di dua tempat. Pertama, di mana kode Anda memeriksa untuk setiap produk apakah pelanggan diizinkan untuk berlangganan. Kedua, di mana kode Anda (tugas cron saya asumsikan) memeriksa perubahan stok untuk produk.

Dalam contoh pertama, Anda dapat mengizinkan berlangganan jika salah satu dari produk anak-anak kehabisan stok:

    $allowSubscriptionForProduct = false;
    if ($product->getData('type_id') == 'configurable') {
        $childProductIds = Mage::getModel('catalog/product_type_configurable')
            ->getChildrenIds($product->getId())
        foreach ($childProductIds[0] as $childProductId) {
            $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($childProductId);
            if ($stock->getData('is_in_stock') == 1) {
                $allowSubscriptionForProduct = true;
                break;
            }
        }
    }
    if ($allowSubscriptionForProduct === true) {
        // change a product attribute to let customers subscribe to this product. 
    }

NB: $ childProductIds memiliki struktur yang aneh. Saya mengharapkan array id, tetapi getChildrenIds () membungkus array itu di array lain. Karenanya [0] pada loop foreach.

Dalam contoh kedua, Anda harus beralih dari produk anak ke produk yang dapat dikonfigurasi induk.

    foreach ($simpleProductThatWasOutOfStock as $outOfStockSimpleProduct) {
        $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($outOfStockSimpleProduct->getId());
        if ($stock->getData('is_in_stock') == 1) {
            $configurableProductIds = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($outOfStockSimpleProduct->getId())
            foreach ($configurableProductIds as $configurableProductId) {
                // use the code that schedules/sends the email notifications 
            }
        }
    }

Tanpa kode aktual yang Anda gunakan, sulit untuk lebih tepat. Saya harap ini menempatkan Anda di jalur yang benar setidaknya.

Entri-entri ini juga mungkin berguna. Untuk memeriksa status stok:

https://stackoverflow.com/a/2703800

https://stackoverflow.com/a/31612963

Beralih dari produk anak ke induk yang dapat dikonfigurasi:

https://stackoverflow.com/a/1706297

https://magento.stackexchange.com/a/30245

Vincent_v_E
sumber
0

Anda mungkin perlu mengubahsuaikan kode atau menggunakan ekstensi apa pun yang menyediakan fungsionalitas seperti pekerjaan produk yang dapat dikonfigurasi berdasarkan produk utama, bukan sesuai dengan produk sederhana.

MageComp
sumber