2012-09-24 80 views
1

我有一個真正的問題與自定義選項納入「」價格類型。自定義產品選項 - 修改基於百分比的定價邏輯:Magento

在簡單產品中,基於百分比的自定義選項按預期工作,但在可配置或捆綁的情況下,最終價格由基本價格確定,而不是基本價格+附加選項(這是商務需求規定的):

Config/Bundle Product 

base price = $1000 
option 1 + $100 
option 2 + 5% 
_____________________________ 
= $1150 (instead of $1155); 

我一直沒能找到任何處理這個大問題的東西。

我確實發現並實施了this Answer,但在Mage_Catalog_Model_Product_Type_Price -> _applyOptionsPrice中返回的$finalPrice未正確評估自定義選項的基本價格+提價。另外,在前端,Products.Options解決方案也沒有在計算中包含基準價格。我假設該修補程序是針對magento的先前版本(我在v1.11中)。

我懷疑修復策略是正確的,但它是一個非常複雜的交換,我不完全清楚需要改變什麼來處理這個問題。

任何想法都會受到歡迎。

乾杯


更新

我有一個位在前端的成功(獲得JavaScript才能正確地更新選項值和定價)。這些變化,但都沒有得到寫入價格模型。例如,當購物車進行渲染時,最終價格並非完全加載價格,而是父級產品的百分比:

下面是我在後端(這不會改變任何行爲)。我會注意到,我只是把他們複製到應用程序/ local目錄自動取款機,但我會適當地覆蓋它們,一旦我得到這個邏輯制定。

Mage_Catalog_Model_Product_Type_Price

public function getFinalPrice($qty=null, $product) 
    { 
     //... aggregate tier and special pricing, then apply custom options 

     $finalPrice = $product->getData('final_price'); 
     $finalPrice = $this->_applyOptionsPrice($product, $qty, $finalPrice); 

     return max(0, $finalPrice); 
    } 

    protected function _applyOptionsPrice($product, $qty, $finalPrice) 
    { 
     if ($optionIds = $product->getCustomOption('option_ids')) { 
      $basePrice = $finalPrice; 
      foreach (explode(',', $optionIds->getValue()) as $optionId) { 
       if ($option = $product->getOptionById($optionId)) { 

        $confItemOption = $product->getCustomOption('option_'.$option->getId()); 
        $group = $option->groupFactory($option->getType()) 
         ->setOption($option) 
         ->setConfigurationItemOption($confItemOption); 
        // grab option value based on finalprice 
        $finalPrice += $group->getOptionPrice($confItemOption->getValue(), $finalPrice); 
       } 
      }; 
     } 

     Mage::log('base price :'.$basePrice.' final price :'.$finalPrice); 

     return $finalPrice; 
    } 

由於據我所知,在Mage_Catalog_Model_Prod uct_Type_Configurable_Price,並 Mage_Catalog_Model_Product_Type_Grouped_Price,沒有什麼可以替代的,因爲他們在Parent::getFinalPrice每個呼叫在每個步驟以確定值...

問題仍然是 - 如何修改的定價模式以適應自定義選項百分比?

50分可以幫助我解決問題的人。 ...

有人嗎?

回答

0

如果我找到了您的需求,您需要可配置和分組產品,每個下一個選項的價格修改應該應用於之前(在應用先前的期權價格修改後)上計算的值。在這種情況下,你應該重寫兩個Mage_Catalog_Model_Product_Type_Configurable_PriceMage_Catalog_Model_Product_Type_Grouped_Price_applyOptionsPrice()方法在接下來的方式:

protected function _applyOptionsPrice($product, $qty, $finalPrice) 
{ 
    if ($optionIds = $product->getCustomOption('option_ids')) { 
     foreach (explode(',', $optionIds->getValue()) as $optionId) { 
      if ($option = $product->getOptionById($optionId)) { 
       $confItemOption = $product->getCustomOption('option_'.$option->getId()); 

       $group = $option->groupFactory($option->getType()) 
        ->setOption($option) 
        ->setConfigurationItemOption($confItemOption); 
       $finalPrice += $group->getOptionPrice($confItemOption->getValue(), $finalPrice); 
      } 
     } 
    } 

    return $finalPrice; 
} 
+0

Zyava ==感謝您的答覆,但我已經嘗試這種解決方案(它在我的問題...) 。我已將此更改應用於標準的'Price.php'和'configure/Price.php'。分組使用其子產品來確定自定義選項的成本(所以'Price.php'應該是修復)。然而......價格不是**成功地更新價格(例如在購物車中)。不知道我錯過了什麼,但我真的需要弄清楚這一點。 – Bosworth99

相關問題