2015-05-03 10 views
12

Mój klient musi wykonać operację na niestandardowych opcjach produktów.Magento - reloadPrice() modyfikacje

Korzystając z Magento CE, tworzę produkt i dodam kilka niestandardowych opcji z wbudowanego menu po lewej stronie w "Zarządzaj produktami"> "Dodaj nowy produkt", na przykład "mm" (milimetry) i "mt" (metry)

Ten produkt będzie miał zarówno opcje radiowe, jak i wejście tekstowe.

Powiedzmy mamy

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 

Powiedzmy użytkownik wybiera Radio option B i wchodzi 10 w polu tekstowym

Cena powinna być dodane jako takie:

1,2 * 10 + 0 

który jest

radio value cost * textbox value + base price 

Czy istnieje sposób, aby powiedzieć kodowi, aby wziąć wartość przycisku opcji, pomnożyć go dla wartości pola tekstowego i zsumować go do ceny podstawowej?

Gdzie mogę sprawdzić bieżące zachowanie niestandardowych opcji produktu?

EDIT

Widziałam, że gdy zostanie wybrana wartość, funkcja reloadPrice() nazywa.

Pomyślałem, aby sprawdzić, czy oba wejścia to radio i tekst, a następnie uzyskać wartość tekstu i pomnożyć ją dla wartości radia.

Czy to prawda? Czy możesz wskazać mi lepiej?

+3

Myślę, że to dlatego, że informacja jest tak rzadki. Naprawdę musisz wyjaśnić, który konkretny koszyk używasz lub podłączyć, podać próbki kodu. Magento nie jest językiem, jest platformą. Na twoje pytanie nie można odpowiedzieć podając –

+0

Nie używam żadnej wtyczki do koszyka, to tylko domyślne Magento. Nie mogę podać żadnego przykładu kodu, ponieważ nie mam pojęcia, gdzie powinienem umieścić niestandardowy kod, aby opcja niestandardowa zachowywała się tak, jak chcę. Spróbuję podać dalsze informacje, ale nie ma zbyt wiele. – Phillip

+0

Czy rozważyłeś konfigurowalne produkty z polem qty zamiast dodatkowego pola tekstowego? –

Odpowiedz

0

reloadPrice() nie aktualizuje ceny produktu na poziomie serwera. Jednym ze sposobów wykonania tej aktualizacji cen produktu jest wdrożenie zdarzenia checkout_cart_product_add_after.

  • Niestandardową logikę na poziomie klienta z javascript na stronie szczegółów. Przypisz tę wartość do ukrytej zmiennej pod nazwą product_addtocart_form. Lepszym sposobem jest zapisanie w sesji, aby zmniejszyć luki w zabezpieczeniach po stronie klienta lub znaleźć własny lepszy sposób. Lub Wdroż swoje logowanie tylko w metodzie Observer. Cokolwiek znajdziesz bezpieczne.
  • Przepisz klasę Mage_Checkout_Model_Cart do modyfikacji jak

    public function addProduct($productInfo, $requestInfo=null) 
    { 
    ... 
    Mage::dispatchEvent('checkout_cart_product_add_after', array('quote_item' => $result, 'product' => $product,'request_data'=>$request)); 
    ... 
    } 
    
  • W swojej yourmodule/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> 
    
  • a następnie utworzyć klasę obserwatora przy yourmodule/model/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); 
        } 
    

    }

Aby uzyskać więcej informacji sprawdź here

1

To pomaga mi, mam nadzieję, że będzie to również pomaga

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; ?> 
           } 
          } 
         } 
}