İzin verilen tüm para birimlerinde ürünün fiyatı nasıl alınır?


10

İki mağaza görünümü olan bir kurulum var.

İlk mağaza görünümü temel ve yalnızca bir para birimi ABD Doları olarak ayarlanmış. İkincisi 2 izin verilen para birimine sahiptir - USD ve EUR. EUR, görüntülenen varsayılan değerdir, USD temel olarak ayarlanır.

Tüm ürünlerin fiyatları sadece ABD Doları olarak ve EUR kuru 0,75 olarak belirlenmiştir. Ürünün fiyatı 14 $ diyelim.

Ve kodum gidiyor:

// 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();

Bu kod her zaman EUR cinsinden doğru fiyatı (10.50) getirir. Ama her iki fiyata da ihtiyacım var - USD ve EUR cinsinden, ancak herhangi bir getPriceyönteme para birimi aktarmanın bir yolunu bulamadım .

Magento\Directory\Helper\DataDönüştürmek için kullanmaya çalıştım :

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

Ama USD'deki gerçek fiyat 14 $ olduğunda bana 13.99 dolar veriyor - bu yüzden hesaplama yanlış.

Her iki mağaza para birimi için ürün fiyatlarını nasıl alabilirim biliyor musunuz? Çok teşekkürler!

Yanıtlar:


1

'Hesaplama yanlış' gibi hissettiğinizde, kaynak koduna bakmak her zaman yardımcı olur. Baktığımda \Magento\Directory\Model\Currency::convert()(bu, kullanılan iç yöntemdir \Magento\Directory\Helper\Data::currencyConvert()), ilginç bir şey görüyorum:

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

Bu, fiyatı, içinde ayarlanan orana dönüştüreceği anlamına gelir $toCurrency. Örneğinizde EUR'yu USD'ye çevirin Sanırım USD oranı 1,00, yani 14 USD * 1,00 dönüştürürken, 13,99 olsun (bu kayan sayıların nasıl çalıştığından kaynaklanıyor?).

Bunu nasıl çözebilirim? Peki, taban fiyatınız USD cinsindendir ve EUR'nun 0.75 oranına sahip olduğunu bilirsiniz, bu nedenle ürününüzün taban fiyatını getiren bir kodunuz varsa, EUR oranını yükler ve gitmek için ayarlanmış olabileceğinizle çarpar . Örneğin:

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

Henüz test etmedim, bu yüzden işe yarayıp yaramadığından emin değilim. Ama belki de çözümünüzü bulmanıza yardımcı olur.


1

Lütfen aşağıdaki kodu kullanın

$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');
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.