Acara Magento untuk menghitung harga ketika bidang teks opsi kustom berubah


10

Saya mencoba membuat produk dengan dua bidang teks khusus: Panjang dan Lebar. Saat pengguna mengetikkan panjang dan lebar, harga harus dihitung melalui formula khusus.

Saya mencoba menemukan acara yang tepat untuk menghubungkan pengamat - ada yang tahu apa itu?

Inilah yang saya tahu dan sudah coba

1) kotak teks bidang khusus dalam tampilan produk memiliki acara pertukaran yang belum saya ketahui cara memanfaatkannya melalui acara pengamat - "opConfig.reloadPrice ()

2) Jika saya membangun pengamat pada event sales_quote_add_item, maka saya dapat mengubah harga melalui formula saat ditambahkan ke troli. Dengan metode ini saya masih membutuhkan cara untuk mengubahnya dalam tampilan produk sebelum ditambahkan ke troli.

3) Saya juga sudah mencoba event catalog_product_get_final_price tetapi ini sepertinya hanya akan menyala ketika halaman produk dimuat, jadi setelah panjang atau lebar produk ditambahkan, itu tidak kembali menyala.

Setiap ide akan sangat dihargai!


apakah Fabian membantu Anda? Jika demikian dapatkah Anda menerima atau mengklarifikasi sehingga kami dapat membantu?
philwinkle

Jawaban:


2

Saya menggunakan untuk usecase ini sales_quote_collect_totals_before:

/**
 * Set prices
 *
 * @param Varien_Event_Observer $observer
 */
public function salesQuoteCollectTotalsBefore(Varien_Event_Observer $observer)
{
    /* @var $quote Mage_Sales_Model_Quote */
    $quote = $observer->getQuote();
    foreach ($quote->getAllItems() as $quoteItem) {
        if (is your product of choice) {
            /* @var $quoteItem Mage_Sales_Model_Quote_Item */
            $product = $quoteItem->getProduct();
            $price = whatever formula you want to use;
            $product->setPrice($price);
        }
    }
}

Di sisi klien, Anda bisa menggunakan beberapa baris JS untuk memperbarui harga?


2

catalog_product_get_final_priceadalah peristiwa sisi server yang benar, ini tidak hanya dipicu ketika halaman produk dimuat tetapi juga ketika produk ditambahkan ke troli. Dalam hal ini Anda memiliki semua opsi khusus yang dipilih tersedia dengan:

$observer->getProduct()->getCustomOption($customOptionName);

(Lihat juga: Apakah ada cara di mana pengguna dapat menetapkan harga yang diinginkan lebih dari nol dan melanjutkan ke keranjang untuk produk apa pun? )


Menghitung ulang harga saat berada di halaman produk adalah topik lain dan membutuhkan JavaScript. reloadPriceadalah fungsi yang tepat untuk dihubungkan, saya akan memperluasnya seperti ini:

Product.prototype.reloadPrice = Product.prototype.reloadPrice.wrap(function(callOriginal) {
    if (should_be_calculated_based_on_length_and_with) {

        // copy the original reloadPrice function here and change how `price` is calculated

    } else {
        callOriginal();
    }
});
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.