Magentoめも

Magentoを利用する目的は多言語、多通貨対応が目的だと思われます。

複数の通貨に対応する方法です。

通貨の設定

STORES - Configuration - GENERAL - Currency Setup - Currency Options にて
ベースとする通貨、デフォルトで表示する通貨、表示切り替えを可能とする通貨を設定します。

通貨レートの設定

通貨を設定するだけでは公開画面では通貨の切り替えはできません。

STORES - Currency Rates にて通貨レートの設定が必要になります。

何も考えずに Import Service を Yahoo Finance Exchange 選択し、Importした上で Save Currency Rates すればレートが保存されます。

あとはキャッシュをクリアすれば公開画面で通貨の切り替えが可能になります。

価格表示

価格は以下のテンプレートで表示されます。
vendor/magento/module-catalog/view/base/templates/product/price/amount/default.phtml

変更したい場合は、以下にファイルをコピーして変更を加えます。
app/design/frontend/Yassujp/blank/Magento_Catalog/templates/product/price/amount/default.phtml

このテンプレート内で価格を取得する場合は以下でできます。

// インスタンス生成
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

// 商品データ取得
$productId = $block->getSaleableItem()->getId();
$product = $objectManager->get('Magento\Catalog\Model\Product')->load($productId);

var_dump(
    'regular_price: ' . $block->getSaleableItem()->getPriceInfo()->getPrice('regular_price')->getAmount()->getValue(),
    'final_price base: ' . $block->getSaleableItem()->getPriceInfo()->getPrice('final_price')->getAmount()->getBaseAmount(),
    'final_price: ' . $block->getSaleableItem()->getPriceInfo()->getPrice('final_price')->getAmount()->getValue(),
    'special_price: ' . $block->getSaleableItem()->getPriceInfo()->getPrice('special_price')->getAmount()->getValue(),
    'FinalPrice: ' . $product->getFinalPrice(),
    'FinalPrice: ' . $product->getPriceModel()->getFinalPrice(1, $product),
    'CalculatedFinalPrice: ' . $product->getCalculatedFinalPrice(),
    'MinimalPrice: ' . $product->getMinimalPrice(),
    'SpecialPrice: ' . $product->getSpecialPrice()
);

通貨換算

ベース通貨の取得

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$storeManager = $objectManager->get('Magento\Store\Model\StoreManagerInterface');
$baseCurrencyCode = $storeManager->getStore()->getBaseCurrencyCode();

選択中通貨の取得

$currencyCode = $storeManager->getStore()->getCurrentCurrency()->getCode();

ベース通貨から選択中通貨への換算

$currencyFactory = $objectManager->get('Magento\Directory\Model\CurrencyFactory');
$rate = $currencyFactory->create()->load($currencyCode)->getAnyRate($baseCurrencyCode);
$currentPrice = $basePrice * $rate;
$priceCurrency = $objectManager->create('Magento\Framework\Pricing\PriceCurrencyInterface');
$currentPrice = $priceCurrency->convert($basePrice, null, $currencyCode);
$currentPrice = $priceCurrency->convert($basePrice);
// 丸める
$currentPrice = $priceCurrency->round($currentPrice );

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-09-19 (日) 19:09:25