2015-03-09 2 views
1

Я пытаюсь использовать Magento reloadPrice() с jQuery, чтобы обновить цену. У меня есть настраиваемый продукт с настраиваемыми параметрами. Без JQuery, то SELECT код опции:Использовать Magento opConfig.reloadPrice() с jQuery и настраиваемыми опциями

<select id="select_281" class=" required-entry product-custom-option" title="" name="options[281]" onchange="opConfig.reloadPrice()"> 
<option value="0"></option> 
<option rel="1" price="0" value="275"></option> 
<option rel="2" price="0" value="276"></option> 
</select> 

С JQuery я удалить код Prototype onchange и попытаться вычислить цену для моего варианта (скажем, $ 50):

jQuery('#select_281').removeAttr('onchange').change(function(){ 

//Price of the option to add to a basic price of the conf product 
price = 50; 

optionsPrice.changePrice('opConfig', price); 
optionsPrice.reload(); 

}); 

Цена настраиваемый продукт: $150. (SELECT): $50.

Новая цена $200 отображается на странице продукта, но не на странице корзины: на странице корзины отображается только 150 долларов США, что неверно.

Кому-то может помочь?

С уважением, COM.

ответ

1

ReloadPrice() не может изменять любые цены на серверы. Итак, мы решили эту проблему, используя 2 наблюдателя: checkout_cart_product_add_after наблюдатель, чтобы изменить цену при первом добавлении продукта в корзину, и checkout_cart_update_items_after наблюдатель, чтобы изменить цену за каждый товар в корзине (при нажатии пользователем «Изменить корзину " кнопка на странице корзины).

Код здесь проверен на конфигурируемые продукты с 2 настраиваемыми опциями numberOfColors and engravingType. Для каждой пары numberOfColors/engravingType У нас есть tierprices, хранящиеся в специальной таблице MySQL, мы можем изменить цену по специальной цене. Каждый простой продукт имеет свои tierPrices.

<code>//checkout_cart_product_add_after observer 
    public function modifyPrice(Varien_Event_Observer $observer) 
    { 
     $item = $observer->getQuoteItem(); 
     $item = ($item->getParentItem() ? $item->getParentItem() : $item); 
     $productType = $product->getTypeID(); 
     $price = 100;//Unit price of product without engraving, 100 for example 

     //Unit price with engraving, depending of 2 custom options of configurable product 
     if($productType == 'configurable'){ 
      //get custom options of config here 
      . 
      . 
      $engravingPrice = 1.2;//Get unit price with engraving from a special MySQL table 
      $finalUnitPrice = $price + $engravingPrice;//Final custom price 

      //Modify the price 
      $item->setCustomPrice($finalUnitPrice); 
      $item->setOriginalCustomPrice($finalUnitPrice); 
      $item->getProduct()->setIsSuperMode(true); 
     } 
    } 

    //checkout_cart_update_items_after observer 
    public function modifyCartItems(Varien_Event_Observer $observer) 
    { 
     foreach ($observer->getCart()->getQuote()->getAllVisibleItems() as $item) { 
      if ($item->getParentItem()) {$item = $item->getParentItem();} 
      $productType = $product->getTypeID(); 
      $productType = $product->getTypeID(); 
      $price = 100;//Unit price of product without engraving 

      //Unit price with engraving, depending of 2 custom options of configurable product 
      if($productType == 'configurable'){ 
       . 
       . 
       $engravingPrice = 1.2;//Get unit price with engraving from a special MySQL table 
       $finalUnitPrice = $price + $engravingPrice;//Final custom price 

       //Modify the price for the item 
       $item->setCustomPrice($finalUnitPrice); 
       $item->setOriginalCustomPrice($finalUnitPrice); 
       $item->getProduct()->setIsSuperMode(true); 
      } 
     } 
    }</code> 

Но ..... одна проблема остается: на странице корзины, когда пользователь нажимает на ссылку «Редактировать», чтобы изменить продукт на странице, так что он может изменить количество, ... и нажмите Кнопка «Обновить корзину», эта кнопка обновления не читает checkout_cart_product_add_after для обновления цены.

Не знаете, как заставить это "Обновить корзину" действий для обработки кода в checkout_cart_product_add_after observer? Этот код выполняется только при добавлении продукта в корзину?

Спасибо.

COM

Смежные вопросы