จะรับราคาสินค้าในทุกสกุลเงินได้อย่างไร


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

รหัสนี้จะดึงราคาที่ถูกต้อง (10.50) เป็น EUR เสมอ แต่ฉันต้องการราคาทั้งในสกุลเงิน 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 (ฉันเดาว่านี่เป็นเพราะเลขทศนิยมทำงานอย่างไร)

วิธีแก้ปัญหานี้ คุณมีราคาพื้นฐานเป็นดอลลาร์สหรัฐและคุณรู้ว่า 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');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.