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!

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.


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');
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.