Làm thế nào để có được giá sản phẩm trong tất cả các loại tiền tệ được phép?


10

Tôi có một thiết lập với hai lượt xem cửa hàng.

Chế độ xem cửa hàng đầu tiên có cơ sở và một loại tiền tệ duy nhất được đặt thành USD. Loại thứ hai có 2 loại tiền được phép - USD và EUR. EUR là mặc định được hiển thị, USD được đặt làm cơ sở.

Tất cả giá của sản phẩm chỉ được đặt bằng USD và tỷ giá hối đoái cho EUR được đặt thành 0,75. Giá của sản phẩm là 14 đô la.

Và mã của tôi đi:

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

Mã này luôn lấy giá chính xác (10,50) bằng EUR. Nhưng tôi cần cả hai giá - bằng USD và bằng EUR, nhưng tôi không tìm được cách chuyển tiền sang bất kỳ getPricephương thức nào .

Tôi đã cố gắng sử dụng Magento\Directory\Helper\Datađể chuyển đổi:

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

Nhưng nó mang lại cho tôi $ 13,99 khi giá thực tế bằng USD là $ 14 - vì vậy tính toán sai.

Bạn có biết làm thế nào tôi có thể nhận được giá sản phẩm cho cả hai loại tiền tệ cửa hàng không? Cảm ơn rất nhiều!

Câu trả lời:


1

Khi bạn cảm thấy như 'tính toán sai', nó luôn giúp xem mã nguồn. Khi tôi nhìn vào \Magento\Directory\Model\Currency::convert()(đây là phương pháp bên trong \Magento\Directory\Helper\Data::currencyConvert()sử dụng), tôi thấy một điều thú vị:

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

Điều này có nghĩa là nó chuyển đổi giá thành tỷ lệ được đặt trong $toCurrency. Trong ví dụ của bạn, chuyển đổi EUR sang USD. Tôi đoán tỷ giá USD là 1,00, vì vậy khi bạn chuyển đổi 14 USD * 1,00, bạn nhận được 13,99 (Tôi đoán điều này là do cách các số trôi nổi hoạt động?).

Làm thế nào để giải quyết điều này? Chà, bạn có giá cơ sở bằng USD và bạn biết rằng EUR có tỷ lệ 0,75, vì vậy nếu bạn có mã lấy giá cơ sở của sản phẩm, hãy tải tỷ giá EUR và nhân với giá trị mà bạn có thể được đặt . Ví dụ:

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

Chưa thử nghiệm nó nên tôi không chắc nó có hoạt động không, chỉ tuân theo mã. Nhưng có lẽ nó giúp bạn tìm ra giải pháp của mình.


1

Vui lòng sử dụng mã dưới đây

$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');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.