2015-05-03 11 views
12

Il mio cliente deve effettuare un'operazione sulle opzioni personalizzate dei prodotti.Magento - reloadPrice() modifiche

Utilizzando Magento CE, creo un prodotto e gli dò alcune opzioni personalizzate all'interno del menu laterale sinistro incorporato in "Gestisci prodotti"> "Aggiungi nuovo prodotto", come "mm" (millimetri) e "mt" (metri)

Questo prodotto avrà entrambe le opzioni radio e un input textbot.

Diciamo che abbiamo

Base price: 0 

MM: 
Radio option A which costs 0,9 
Radio option B which costs 1,2 
Radio option C which costs 2,3 

MT: 
Textbox value = unknown yet 

Diciamo utente sceglie Radio option B ed entra 10 nel campo di testo

prezzo dovrebbe essere aggiornamenti in quanto tali:

1,2 * 10 + 0 

che è

radio value cost * textbox value + base price 

C'è un modo per dire al codice di prendere il valore del pulsante radio, moltiplicarlo per il valore della casella di testo e sommare tutto al prezzo base?

Dove potrei cercare di vedere il comportamento corrente delle opzioni personalizzate di un prodotto?

EDIT

ho visto che quando si seleziona un valore, la funzione reloadPrice() viene chiamato.

Ho pensato di verificare se entrambi gli ingressi sono radio e testo, quindi ottenere il valore del testo e moltiplicarlo per il valore della radio.

È giusto? Puoi indicarmi meglio?

+3

penso che sia perché le tue informazioni è così sparse. Hai davvero bisogno di spiegare quale carrello specifico stai usando, o collegare, dare esempi di codice. Magento non è una lingua, è una piattaforma. La tua domanda non è rispondente con le informazioni fornite –

+0

Non sto usando alcun plugin per il carrello, è solo l'impostazione predefinita di Magento. Non riesco a dare alcun esempio di codice perché non ho idea di dove dovrei inserire un codice personalizzato per fare in modo che l'opzione personalizzata si comporti come voglio. Proverò a dare ulteriori informazioni, ma non ce ne sono molte davvero. – Phillip

+0

Hai considerato prodotti configurabili con il campo qty invece di un campo di testo aggiuntivo? –

risposta

0

reloadPrice() non aggiorna il prezzo del prodotto a livello di server. Un modo per fare questo aggiornamento del prezzo del prodotto è implementando l'evento checkout_cart_product_add_after.

  • Hai una logica personalizzata a livello di client con javascript nella pagina dei dettagli. Assegna questo valore ad alcune variabili nascoste sotto il modulo product_addtocart_form. Un modo migliore è quello di salvare in sessione per ridurre le vulnerabilità del lato client o puoi trovare il tuo modo migliore. Oppure Implementa il tuo login solo nel metodo Observer. Qualunque cosa tu trovi sicura.
  • Riscrivere la classe Mage_Checkout_Model_Cart di modificare come,

    public function addProduct($productInfo, $requestInfo=null) 
    { 
    ... 
    Mage::dispatchEvent('checkout_cart_product_add_after', array('quote_item' => $result, 'product' => $product,'request_data'=>$request)); 
    ... 
    } 
    
  • Nel vostro nomemodulo/etc/config.xml:

    <config> 
        ... 
        <frontend> 
         ... 
         <events> 
          <checkout_cart_product_add_after> 
           <observers> 
            <unique_name> 
             <class>modulename/observer</class> 
             <method>customPrice</method> 
            </unique_name> 
           </observers> 
          </checkout_cart_product_add_after> 
         </events> 
         ... 
        </frontend> 
        ... 
    </config> 
    
  • e quindi creare una classe di osservatore al nomemodulo/Modello/Observer .php

    class <namespace>_<modulename>_Model_Observer 
    { 
        public function customPrice(Varien_Event_Observer $observer) 
        { 
         // Get the quote item 
         $item = $observer->getQuoteItem(); 
         $request=$observer->getRequestData(); 
         // Ensure we have the parent item, if it has one 
         $item = ($item->getParentItem() ? $item->getParentItem() : $item); 
         // Load the custom price 
         $price = "custom price logic";//whatever from your hidden value or by some other mean. 
         // Set the custom price 
         $item->setCustomPrice($price); 
         $item->setOriginalCustomPrice($price); 
         // Enable super mode on the product. 
         $item->getProduct()->setIsSuperMode(true); 
        } 
    

    }

Per ulteriori informazioni consulta here

1

Questo mi aiuta, spero che questo aiuta anche

initialize : function(config){ 
       this.config = config; 
       this.reloadPrice(); 
       document.observe("dom:loaded", this.reloadPrice.bind(this)); 

      }, 
      reloadPrice : function(){ 
       price = new Number(); 
       config = this.config; 
       skipIds = []; 
       skipIds = []; 
       relatedword = []; 
       relatedvalue = []; 
       relatedid = []; 
       counter_each=0; 
       counter=1; 
       first=0; 
       areaValue=1; 
       submitbutton=true; 

       $$('body .product-custom-option').each(function(element){ 
        var optionId = 0; 
        element.name.sub(/[0-9]+/, function(match){ 
         optionId = match[0]; 
        }); 
        if (this.config[optionId]) { 
         if (element.type == 'checkbox' || element.type == 'radio') 
         { 
          if (element.checked) 
          { 
           if (config[optionId][element.getValue()]) 
           { 
            <?php if(Mage::getVersion() >= 1.7): ?> 
             price += parseFloat(config[optionId][element.getValue()].price); 
            <?php else: ?> 
             price += parseFloat(this.config[optionId][selectOption.value]); 
            <?php endif; ?> 
           } 
          } 
         } 
}