허용되는 모든 통화로 제품 가격을 얻는 방법은 무엇입니까?


10

두 개의 상점보기가있는 설정이 있습니다.

첫 번째 상점보기에는 기본이 있고 통화는 USD로 설정되어 있습니다. 두 번째 통화에는 USD와 EUR의 두 가지 통화가 허용됩니다. 기본적으로 EUR가 표시되고 USD가 기본으로 설정됩니다.

모든 제품 가격은 USD로만 설정되며 EUR 환율은 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로 가져옵니다. 그러나 USD와 EUR의 가격이 필요하지만 통화를 모든 getPrice방법 으로 전달하는 방법을 찾지 못했습니다 .

나는 Magento\Directory\Helper\Data변환하는 데 사용하려고했습니다 .

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

그러나 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.