सभी अनुमत मुद्राओं में उत्पाद की कीमत कैसे प्राप्त करें?


10

मेरे पास दो स्टोर दृश्यों के साथ एक सेटअप है।

पहले स्टोर के दृश्य में आधार है और केवल एक ही मुद्रा USD में सेट है। दूसरे में 2 अनुमत मुद्राएँ हैं - 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();

यह कोड हमेशा EUR में सही मूल्य (10.50) प्राप्त करता है। लेकिन मुझे दोनों कीमतों की आवश्यकता है - USD में और EUR में, लेकिन मुझे कोई तरीका नहीं मिला कि किसी भी getPriceतरीके से मुद्रा को कैसे पास किया जाए ।

मैंने Magento\Directory\Helper\Dataबदलने की कोशिश की :

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

लेकिन यह मुझे $ 13.99 देता है जब USD में वास्तविक मूल्य $ 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 मिलता है (मुझे लगता है कि यह फ्लोटिंग नंबर काम करने के कारण है?)।

इसे कैसे हल करें? वैसे, 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');
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.