首页 文章

Magento:自定义期权价格的多种货币转换

提问于
浏览
4

我在每个商店视图中有几个使用不同货币的网站 . 基础货币(默认)设置为GBP . 如果我向自定义选项添加固定价格,则根据商店货币转换货币,这很好 .

当我想继续更新其他值时,问题就开始了,因为它不断转换价格 . 例如,假设我在Store View 1上有一个产品,其中包含一个自定义选项,可为蓝色选项添加100英镑 . 根据正确的货币换算,相同的产品将显示在Store View 2上,并带有自定义选项,可为蓝色选项添加120欧元 .

如果我更改Store View 2上的任何值,例如,更改产品名称或添加图像,更改不涉及价格或自定义选项,并且我保存更改,它将继续转换自定义选项的价格 . 如果它是120欧元,它将把它称为120英镑的新 Value 并将其转换为143.5欧元等等 . 如果我再次单击“保存”,它将再次转换为171.5 EUR,依此类推 .

发生这种情况是因为Magento将自定义选项添加价格称为需要转换的新值 .

我知道如何解决这个问题,因为每次更改产品的 Value 都会改变自定义选项的价格吗?

1 回答

  • 1

    我知道这是一个很老的问题,但是这个错误仍然存在(即使在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;
                        }
    (...)
    

相关问题