Wie erhalte ich den Produktpreis in allen zulässigen Währungen?

10

Ich habe ein Setup mit zwei Store-Ansichten.

Die erste Geschäftsansicht hat eine Basis und die einzige Währung ist auf USD eingestellt. Die zweite hat 2 erlaubte Währungen - USD und EUR. EUR ist die Standardeinstellung, USD wird als Basis festgelegt.

Die Preise aller Produkte werden nur in USD und der Wechselkurs für EUR auf 0,75 festgelegt. Der Preis des Produkts beträgt beispielsweise 14 US-Dollar.

Und mein Code lautet:

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

Dieser Code liefert immer den richtigen Preis (10,50) in EUR. Aber ich brauche beide Preise - in USD und in EUR, aber ich habe keinen Weg gefunden, wie ich eine Währung an eine getPriceMethode weitergeben kann.

Ich habe versucht Magento\Directory\Helper\Datazu konvertieren:

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

Aber es gibt mir 13,99 $, wenn der reale Preis in USD 14 $ beträgt - also ist die Berechnung falsch.

Wissen Sie, wie ich die Produktpreise für beide Geschäftswährungen erhalten kann? Vielen Dank!

Jan Petr
quelle

Antworten:

1

Wenn Sie der Meinung sind, dass die Berechnung falsch ist, ist es immer hilfreich, den Quellcode zu überprüfen. Wenn ich mir anschaue \Magento\Directory\Model\Currency::convert()(dies ist die innere Methode, die \Magento\Directory\Helper\Data::currencyConvert()verwendet wird), sehe ich etwas Interessantes:

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

Dies bedeutet, dass der Preis in den im $toCurrency. In Ihrem Beispiel konvertieren Sie EUR in USD. Ich schätze, der Kurs von USD beträgt 1,00. Wenn Sie also 14 USD * 1,00 umrechnen, erhalten Sie 13,99 (ich denke, das liegt daran, wie schwebende Zahlen funktionieren?).

Wie kann man das lösen? Nun, Sie haben Ihren Grundpreis in USD und Sie wissen, dass EUR einen Kurs von 0,75 hat. Wenn Sie also einen Code haben, der den Grundpreis Ihres Produkts abruft, laden Sie den EUR-Kurs und multiplizieren Sie ihn damit, dass Sie bereit sind . Zum Beispiel:

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

Ich habe es noch nicht getestet, daher bin ich mir nicht sicher, ob es funktioniert, sondern folge nur dem Code. Aber vielleicht hilft es Ihnen, Ihre Lösung zu finden.

Giel Berkers
quelle
1

Bitte verwenden Sie den folgenden Code

$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');
Nilesh Gosai
quelle