如何获得所有允许货币的产品价格?


10

我有两个商店视图的设置。

第一个商店视图具有基准,唯一的一种货币设置为USD。第二种有2种允许的货币-美元和欧元。EUR是显示的默认值之一,USD被设置为基数。

所有产品的价格均仅设置为美元,欧元的汇率设置为0.75。该产品的价格为14美元。

我的代码去了:

// Store ID 2 - default currency EUR, base currency USD
// $product is instance of Magento\Catalog\Model\Product
$priceInfo = $product->getPriceInfo();
$price = $priceInfo->getPrice('regular_price')->getValue();

此代码始终会提取正确的欧元价格(10.50)。但是我同时需要价格-美元和欧元,但是我没有找到如何将货币转换为任何getPrice方法的方法。

我试图用Magento\Directory\Helper\Data转换:

$helper->currencyConvert($price, 'EUR', 'USD');

但是,当美元的实际价格为14美元时,它给了我13.99美元-因此计算错误。

您知道如何获得两种商店货币的产品价格吗?非常感谢!

Answers:


1

当您觉得“计算错误”时,始终可以查看源代码。当我查看时\Magento\Directory\Model\Currency::convert()(这是使用的内部方法\Magento\Directory\Helper\Data::currencyConvert()),我看到了一些有趣的东西:

public function convert($price, $toCurrency = null)
{
    if ($toCurrency === null) {
        return $price;
    } elseif ($rate = $this->getRate($toCurrency)) {
        return $price * $rate;
    }

这意味着它将价格转换为中设置的汇率$toCurrency。在您的示例中,您将EUR转换为USD。我猜美元的汇率是1.00,所以当您转换14 USD * 1.00时,您会得到13.99(我想这是由于浮动数字的工作原理?)。

如何解决呢?好吧,您有美元的基准价格,并且知道欧元的汇率为0.75,因此,如果您有获取产品基础价格的代码,则加载欧元汇率并将其乘以该价格,则可以设置为。例如:

$basePrice = $product->getPrice();
$currency  = $currencyFactory->create()->load('EUR');
$eurPrice  = $currency->convert($basePrice, 'EUR');

还没有测试过,所以我不确定它是否有效,仅遵循代码即可。但是也许它可以帮助您找到解决方案。


1

请使用下面的代码

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productId = 46;
$product = $objectManager->create('Magento\Catalog\Model\Product')->load(productId );
$price = $product->getFinalPrice();
$currency = $objectManager->create('Magento\Directory\Model\Currency')->load('USD');
echo $currency->convert($price,'EUR');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.