2014-04-02 92 views
3

我有幾個網站在每個商店視圖上使用不同的貨幣。基本貨幣(默認)設置爲英鎊。 如果我將固定價格添加到自定義選項,貨幣將根據商店貨幣進行轉換,這很好。Magento:多種貨幣轉換自定義選項價格

問題出現在我想要更新其他值後繼續轉換價格。 例如,假設我在Store View 1上有一個產品,並帶有一個自定義選項,爲藍色選項添加100 GBP。 根據正確的貨幣換算,相同的商品將出現在商店視圖2中,並帶有一個自定義選項,該選項可爲藍色選項增加120歐元。

如果我更改了Store View 2上的任何值,例如更改產品的名稱或添加圖像,則不涉及價格或自定義選項的更改,並且我保存更改,將繼續轉換自定義選項的價格。 如果是120歐元,則將其視爲120英鎊的新價值,並將其轉換爲143.5歐元等等。 如果我再次點擊保存,它會再次將其轉換爲171.5歐元等。

發生這種情況是因爲Magento將自定義選項的價格添加爲需要轉換的新值。

任何想法如何解決這個問題,因爲每當我更改產品的價值時,它都會改變自定義選項的價格?

+0

SET從管理面板 – himansu

+0

120歐元,商店查看2它使轉換成英鎊 – ido

回答

0

我知道這是一個很老的問題,但是這個錯誤仍然會發生(即使在Magento 1.9中),所以也許我的回答會幫助某人。

您必須覆蓋Mage_Catalog_Model_Resource_Product_Option_Value類。

首先添加這個方法:

protected function checkIfPriceHasNotBeenChanged($object, $storeId) 
{ 
    $newPrice = (float)sprintf('%F', $object->getPrice()); 
    $priceTable = $this->getTable('catalog/product_option_type_price'); 

    $select = $this->_getReadAdapter()->select() 
     ->from($priceTable, 'price') 
     ->where('option_type_id = ?', (int)$object->getId()) 
     ->where('store_id = ?', $storeId); 
    $oldPrice = $this->_getReadAdapter()->fetchOne($select); 

    return $newPrice == $oldPrice; 
} 

然後在_saveValuePrices方法使用它:

if ($object->getStoreId() != '0' && $scope == Mage_Core_Model_Store::PRICE_SCOPE_WEBSITE 
     && !$object->getData('scope', 'price')) { 

     $baseCurrency = Mage::app()->getBaseCurrencyCode(); 

     $storeIds = Mage::app()->getStore($object->getStoreId()) 
      ->getWebsite() 
      ->getStoreIds(); 

     if (is_array($storeIds)) { 
      foreach ($storeIds as $storeId) { 
       if ($priceType == 'fixed') { 

        if ($this->checkIfPriceHasNotBeenChanged($object, $storeId)) { 
         continue; 
        } 
(...)