Magento事件,用于在自定义选项文本字段更改时计算价格


10

我正在尝试创建具有两个自定义文本字段的产品:“长度”和“宽度”。当用户同时输入长度和宽度时,价格需要通过自定义公式进行计算。

我正在尝试找到将观察者连接到的正确事件-有人知道这可能是什么吗?

这是我所知道并尝试过的

1)产品视图中的自定义字段文本框有一个onchange事件,我还没有想出如何通过观察者事件来使用它-“ opConfig.reloadPrice()

2)如果我在事件sales_quote_add_item上构建了一个观察者,则可以在添加到购物车时通过公式更改价格。使用这种方法,我仍然需要一种在将产品添加到购物车之前在产品视图中对其进行更改的方法。

3)我还尝试了事件catalog_product_get_final_price,但这似乎仅在加载产品页面时才会触发,因此在添加了产品长度或宽度之后,它不会重新触发。

任何想法将不胜感激!


Fabian对您有帮助吗?如果可以,请您接受或澄清,以便我们提供帮助吗?
philwinkle

Answers:


2

我用这个用例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);
        }
    }
}

在客户端,您可以只使用几行JS来更新价格?


2

catalog_product_get_final_price是正确的服务器端事件,不仅会在加载产品页面时触发,而且还会在产品添加到购物车时触发。在这种情况下,您可以使用以下所有选定的自定义选项:

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

(另请参见:用户是否可以通过任何方式将自定义期望价格设置为大于零并继续购物以购买任何产品?


在产品页面上重新计算价格是另一个主题,需要JavaScript。reloadPrice是正确的函数,我可以像这样扩展它:

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();
    }
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.