Подія Magento для розрахунку ціни при зміні текстового поля спеціального параметра


10

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

Я намагаюся знайти правильну подію, щоб підключити спостерігача - хтось знає, що це може бути?

Ось що я знаю і спробував

1) у текстовому полі спеціального поля у вікні продукту є подія зміни, яку я ще не зрозумів, як скористатися ще через події спостерігача - "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.