Özel seçenek metin alanı değiştiğinde fiyatı hesaplamak için Magento etkinliği


10

İki özel metin alanı olan bir ürün oluşturmaya çalışıyorum: Uzunluk ve Genişlik. Kullanıcı hem uzunluk hem de genişlik yazdığında, fiyatın özel formülle hesaplanması gerekir.

Bir gözlemci bağlamak için doğru olayı bulmaya çalışıyorum - kimse bunun ne olabileceğini biliyor mu?

İşte bildiğim ve denediğim

1) ürün görünümündeki özel alan metin kutusunda, henüz bir gözlemci etkinliği aracılığıyla nasıl dokunacağımı anlayamadığım bir değişim etkinliği var - "opConfig.reloadPrice ()

2) sales_quote_add_item etkinliğinde bir gözlemci oluşturursam, sepete eklendiğinde fiyatı formül aracılığıyla değiştirebilirim. Bu yöntemle, sepete eklenmeden önce ürün görünümünde değiştirmenin bir yoluna ihtiyacım var.

3) Ayrıca catalog_product_get_final_price olayını denedim, ancak bu sadece ürün sayfası yüklendiğinde tetikleniyor gibi görünüyor, bu nedenle bir ürün uzunluğu veya genişliği eklendikten sonra yeniden ateşlenmiyor.

Herhangi bir fikir büyük mutluluk duyacağız!


Fabian bu sana yardımcı oldu mu? Eğer öyleyse, yardımcı olabilmemiz için lütfen kabul edebilir veya açıklayabilir misiniz?
philwinkle

Yanıtlar:


2

Bu kullanım için kullandım 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);
        }
    }
}

Müşteri tarafında, fiyatı güncellemek için birkaç JS satırı kullanabilirsiniz?


2

catalog_product_get_final_pricedoğru sunucu tarafı etkinliğidir, yalnızca ürün sayfası yüklendiğinde değil, ürün sepete eklendiğinde de tetiklenir. Bu durumda, seçilen tüm özel seçeneklere sahip olursunuz:

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

(Ayrıca bkz: Kullanıcının istediği özel fiyatı sıfırdan daha büyük ayarlayıp herhangi bir ürün için alışveriş yapmaya devam edebileceği herhangi bir yol var mı? )


Ürün sayfasındayken fiyatı yeniden hesaplamak başka bir konudur ve JavaScript gerekir. reloadPriceiçine kanca için doğru işlevi, ben böyle genişletmek olurdu:

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();
    }
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.