Як отримати ціну товару у всіх дозволених валютах?


10

У мене налаштування з двома переглядами магазину.

Перший вигляд магазину має базову і єдину валюту, встановлену на USD. У другій є 2 дозволені валюти - USD та EUR. 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');

Але це дає мені 13,99 дол. США, коли реальна ціна в доларах становить 14 доларів США - значить, розрахунок невірний.

Чи знаєте ви, як я можу отримати ціни на продукти для обох валют магазину? Дуже дякую!

Відповіді:


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 (я думаю, це пов’язано з тим, як працюють плаваючі числа?).

Як це вирішити? Ну, у вас є ваша базова ціна в доларах, і ви знаєте, що євро має курс 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');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.