【问题标题】:Magento: Multiple Currency Conversion on Custom Options PricesMagento:自定义期权价格的多种货币转换
【发布时间】:2014-05-13 13:25:49
【问题描述】:

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

当我想在之后更新其他值时问题就开始了,因为它一直在转换价格。 例如,假设我在 Store View 1 上有一个带有自定义选项的产品,该选项为蓝色选项增加了 100 GBP。 根据正确的货币换算,相同的产品将显示在 Store View 2 中,并带有一个自定义选项,蓝色选项增加 120 欧元。

如果我更改商店视图 2 上的任何值,例如,更改产品名称或添加图片、不涉及价格或自定义选项的更改,然后我保存更改,它将继续转换自定义选项的价格。 如果它是 120 欧元,它会将其称为 120 英镑的新值并将其转换为 143.5 欧元,依此类推。 如果我再次点击保存,它将再次转换为 171.5 欧元等等。

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

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

【问题讨论】:

  • 在管理面板的商店视图 2 中设置 120 欧元
  • 一直转换成英镑

标签: magento magento-1.7


【解决方案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;
                    }
(...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多