許可されているすべての通貨で製品の価格を取得するにはどうすればよいですか?


10

2つのストアビューの設定があります。

最初のストアビューには、基本と唯一の通貨がUSDに設定されています。2番目の通貨には、USDとEURの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)をEURでフェッチします。しかし、私は米ドルとユーロの両方の価格が必要ですが、どのgetPrice方法にも通貨を渡す方法を見つけることができませんでした。

私はMagento\Directory\Helper\Data変換に使用しようとしました:

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

しかし、米ドルでの実際の価格が14ドルの場合、13.99ドルになります。したがって、計算は間違っています。

両方の店舗の通貨で製品の価格を取得する方法を知っていますか?どうもありがとう!

回答:


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に変換します。USDのレートは1.00だと思うので、14 USD * 1.00を変換すると、13.99になります(これは浮動小数点数がどのように機能するかによると思いますか?)。

これを解決するには?まあ、あなたはあなたの基本価格をUSDで持っていて、EURのレートが0.75であることを知っているので、あなたの製品の基本価格をフェッチするコードがある場合、EURレートをロードし、それを掛けて、あなたが行くように設定されているかもしれません。例えば:

$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');
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.