Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Magento:自定义期权价格的多种货币转换_Magento_Magento 1.7 - Fatal编程技术网

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

Magento:自定义期权价格的多种货币转换,magento,magento-1.7,Magento,Magento 1.7,我有几个网站在每个商店视图上使用不同的货币。基础货币(默认)设置为英镑。 如果我向自定义选项添加固定价格,则货币将根据存储货币进行转换,这很好 当我想在以后更新其他值时,问题就开始了,因为它一直在转换价格。 例如,假设我在Store View 1上有一个带有自定义选项的产品,该选项为蓝色选项增加100 GBP。 相同的产品将出现在Store View 2上,根据正确的货币换算,自定义选项为蓝色选项增加120欧元 如果我更改Store View 2上的任何值,例如,更改产品名称或添加图像,这是一项

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

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

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

之所以会出现这种情况,是因为Magento将自定义选项的附加价格称为需要转换的新值


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

我知道这是一个很老的问题,但这个错误仍然存在(即使在Magento 1.9中),所以我的回答可能会对某些人有所帮助

您必须覆盖图像、目录、模型、资源、产品、选项、值类

首先添加此方法:

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;
                    }
(...)

从管理面板在商店视图2中设置120欧元,并持续转换为英镑