Zdarzenie Magento do obliczania ceny, gdy zmienia się pole tekstowe opcji niestandardowej


10

Próbuję utworzyć produkt z dwoma niestandardowymi polami tekstowymi: Długość i Szerokość. Gdy użytkownik wpisze zarówno długość, jak i szerokość, cena musi zostać obliczona za pomocą formuły niestandardowej.

Próbuję znaleźć właściwe zdarzenie, z którym można połączyć obserwatora - ktoś wie, co to może być?

Oto, co wiem i próbowałem

1) niestandardowe pole tekstowe w widoku produktu zawiera zdarzenie onchange, w którym jeszcze nie wymyśliłem, jak skorzystać z tego zdarzenia za pomocą zdarzenia obserwatora - „opConfig.reloadPrice ()

2) Jeśli zbuduję obserwatora na zdarzeniu sales_quote_add_item, mogę zmienić cenę za pomocą formuły, gdy zostanie dodana do koszyka. Dzięki tej metodzie wciąż potrzebuję sposobu, aby to zmienić w widoku produktu, zanim zostanie dodany do koszyka.

3) Próbowałem również zdarzenia catalog_product_get_final_price, ale wydaje się, że jest uruchamiane tylko po załadowaniu strony produktu, więc po dodaniu długości lub szerokości produktu nie jest uruchamiane ponownie.

Wszelkie pomysły będą mile widziane!


czy Fabian pomógł ci? Jeśli tak, proszę przyjąć lub wyjaśnić, abyśmy mogli pomóc?
philwinkle

Odpowiedzi:


2

Użyłem tego przypadku użycia 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);
        }
    }
}

Po stronie klienta możesz po prostu użyć kilku wierszy JS, aby zaktualizować cenę?


2

catalog_product_get_final_pricejest prawidłowym zdarzeniem po stronie serwera, jest uruchamiane nie tylko po załadowaniu strony produktu, ale także po dodaniu produktu do koszyka. W takim przypadku masz wszystkie wybrane opcje niestandardowe dostępne z:

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

(Zobacz także: Czy istnieje sposób, w jaki użytkownik może ustawić niestandardową żądaną cenę większą niż zero i przejść do koszyka dla dowolnego produktu? )


Ponowne obliczanie ceny na stronie produktu to kolejny temat i wymaga JavaScript. reloadPricejest właściwą funkcją do podłączenia, chciałbym rozszerzyć ją w następujący sposób:

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();
    }
});
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.