2011-05-13 64 views
4

我想要實現這樣的功能,如果我們有一個自定義選項價格值10,其價格類型是百分比,其基本價格是0我該如何實現它。我想要修改自定義選項百分比功能

我從我的第一個客戶要首先選擇的尺寸,並加入價格根據大小,當客戶選擇從顏色的顏色下拉那麼百分比值應該從第一個下拉值來計算選擇

例如

如果客戶端選擇

一個選項A和價格:$ 20 $ 20被添加到它的價格和我具有由calculatiog的seond下拉值,並與來自第一選擇dropdowm價格來計算價格。

回答

5

首先,讓我試着重新修改您的問題:

在每個自定義選項ste p,您如何根據前面步驟的價格計算百分比,而不是基於產品基準價格?換句話說,你如何讓Magento累計自定義期權價格而不是總結它們?

實施例產物:

  1. 基本價格:$ 0
  2. 尺寸A:+ $ 20
  3. 顏色X:+ 10%

Magento的計算:基價0的10%= 0.總價20.

預期計算:基準價格的10%和尺寸價格= 20%的10%總價22.

解決方案

要做到這一點,你必須重寫Magento的自定義期權定價邏輯。必須在價格模型(用於服務器端計算)以及塊和模板代碼(用於客戶端Javascript計算)中進行更改。

在價格模型Mage_Catalog_Model_Product_Type_Price,在功能_applyOptionsPrice更改計算:

//$finalPrice += $group->getOptionPrice($quoteItemOption->getValue(), $basePrice); 
$finalPrice += $group->getOptionPrice($quoteItemOption->getValue(), $finalPrice); 

Mage_Catalog_Block_Product_View_Options,功能getJsonConfig計算其返回到模板前的基本價格的百分比。更改爲獲取返回到模板的實際百分比值:

//$_tmpPriceValues[$value->getId()] = Mage::helper('core')->currency($value->getPrice(true), false, false); 
// Add fixed price or percentage (don't calculate percentage yet, done by JS live instead) 
$_tmpPriceValues[$value->getId()]['pricing_value'] = ($value->getPriceType() != 'percent') ? Mage::helper('core')->currency($value->getPrice(true), false, false) : $value->getPrice(); 
$_tmpPriceValues[$value->getId()]['is_percentage'] = ($value->getPriceType() == 'percent'); 

現在修改JavaScript中template/catalog/product/view/options.phtml來計算即時的百分比,累計。在JavaScript Product.Options課程,新增功能進行計算:

getPriceToAdd : function(optionvalue, oldprice) { 
    var value = parseFloat(optionvalue['pricing_value']); 
    if (optionvalue['is_percentage']) { 
     return Math.round(value*oldprice)/100; 
    } else { 
     return value; 
    } 
} 

,改變reloadPrice功能,使用新的計算方法:

//price += parseFloat(config[optionId][element.getValue()]); 
price += opConfig.getPriceToAdd(config[optionId][element.getValue()], price); 
... 
//price += parseFloat(this.config[optionId]); 
price += opConfig.getPriceToAdd(this.config[optionId], price); 
... 
//price += parseFloat(this.config[optionId][selectOption.value]); 
price += opConfig.getPriceToAdd(this.config[optionId][selectOption.value], price); 
... 
//price += parseFloat(this.config[optionId]); 
price += opConfig.getPriceToAdd(this.config[optionId], price); 

像往常一樣,不直接編輯核心文件。使用本地重寫。

<config> 
    <global> 
    <catalog> 
     <product> 
     <type> 
      <simple> 
      <price_model>mymodule/product_type_simple_price</price_model> 
      </simple> 
      ... 
     </type> 
     </product> 
    </catalog> 
    </global> 
</config> 
1

隨着Magento的更新,該行於_applyOptionsPrice修改已更新:

來自: $ finalPrice +請注意,您的新的價格模式,必須在每個相關產品類型的配置聲明= $ group-> getOptionPrice($ quoteItemOption-> getValue(),$ finalPrice);

: $ finalPrice + = $ group-> getOptionPrice($ confItemOption-> getValue(),$ finalPrice);