Событие Magento для расчета цены при изменении текстового поля пользовательской опции


10

Я пытаюсь создать продукт с двумя пользовательскими текстовыми полями: длина и ширина. Когда пользователь вводит длину и ширину, цену необходимо рассчитать по пользовательской формуле.

Я пытаюсь найти правильное событие для подключения наблюдателя - кто-нибудь знает, что это может быть?

Вот что я знаю и попробовал

1) в текстовом поле настраиваемого поля в представлении продукта есть событие onchange, к которому я еще не придумал, как подключиться через событие наблюдателя - "opConfig.reloadPrice ()

2) Если я построю наблюдателя на событии sales_quote_add_item, то я могу изменить цену по формуле, когда она будет добавлена ​​в корзину. С этим методом мне все еще нужен способ изменить его в представлении продукта, прежде чем он будет добавлен в корзину.

3) Я также пробовал событие catalog_product_get_final_price, но, похоже, оно срабатывает только при загрузке страницы продукта, поэтому после добавления длины или ширины продукта оно не запускается повторно.

Благодарим за любую идею!


Фабиан это тебе помогло? Если да, не могли бы вы принять или уточнить, чтобы мы могли помочь?
Philwinkle

Ответы:


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();
    }
});
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.