Evento Magento per calcolare il prezzo quando cambia il campo di testo delle opzioni personalizzate


10

Sto cercando di creare un prodotto con due campi di testo personalizzati: Lunghezza e Larghezza. Quando l'utente digita sia una lunghezza che una larghezza, il prezzo deve essere calcolato tramite una formula personalizzata.

Sto cercando di trovare l'evento corretto a cui collegare un osservatore: qualcuno sa cosa potrebbe essere?

Ecco cosa so e ho provato

1) la casella di testo del campo personalizzato nella vista prodotto ha un evento onchange che non ho ancora capito come attingere tramite un evento osservatore - "opConfig.reloadPrice ()

2) Se creo un osservatore sull'evento sales_quote_add_item, allora posso cambiare il prezzo tramite la formula quando viene aggiunto al carrello. Con questo metodo ho ancora bisogno di un modo per cambiarlo nella vista del prodotto prima che venga aggiunto al carrello.

3) Ho anche provato l'evento catalog_product_get_final_price ma questo sembra attivarsi solo quando viene caricata la pagina del prodotto, quindi dopo aver aggiunto una lunghezza o una larghezza del prodotto, non si attiva nuovamente.

Qualsiasi idea sarebbe molto apprezzata!


Fabian ti è stato di aiuto? In tal caso, ti preghiamo di accettare o chiarire in modo che possiamo aiutarti?
Philwinkle,

Risposte:


2

Ho usato per questo caso d'uso 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);
        }
    }
}

Sul lato client, puoi semplicemente utilizzare alcune righe di JS per aggiornare il prezzo?


2

catalog_product_get_final_priceè l'evento lato server corretto, non viene generato solo quando viene caricata la pagina del prodotto, ma anche quando il prodotto viene aggiunto al carrello. In questo caso hai tutte le opzioni personalizzate selezionate disponibili con:

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

(Vedi anche: esiste un modo in cui l'utente può impostare il prezzo desiderato personalizzato maggiore di zero e procedere al carrello per qualsiasi prodotto? )


Il ricalcolo del prezzo nella pagina del prodotto è un altro argomento e necessita di JavaScript. reloadPriceè la funzione giusta da agganciare, la estenderei in questo modo:

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();
    }
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.