magento2で数値を通貨形式に変換する方法


回答:


38

magento 2には、「コア」モジュールはありません。これは、ビューファイル(.phtml)内で次の方法で取得できます。

$ this-> helper( 'Magento \ Framework \ Pricing \ Helper \ Data')-> currency(number_format(50,2)、true、false);

価格に通貨記号が必要な場合はどうなりますか?currency()メソッドは、現在のスコープ通貨を使用して変換します。
MagePsycho

1
これは1000を超える価格では機能しません。number_formatは数千のセパレータを追加します。これは、ポイントが千のセパレータであるヨーロッパのシステムで問題を引き起こします。たとえば、12000ユーロの価格は€12,00を返しますが、これは間違っています。そして、あなたは削除する必要がありnumber_format()、ちょうど量を渡す:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
ジャック・

これは確かに最高の投票であり、受け入れられているものではありません。より良い承認はdchaykaの答えです:magento.stackexchange.com/a/148082/5827
Akif

不思議な人のために、署名はcurrency($value, $format = true, $includeContainer = true)
コリンアンダーソン

16

まず、ビュー(.phtml)ファイル内で通貨の書式設定を行わず、ヘルパーまたはブロックまたは両方の組み合わせを使用します。

受け入れられた答えはnumber_format、まったく使用すべきではない関数を使用しています。少なくとも、そのアプローチには行きません。

モデルを使用して試すことができます:

タイプのモデルMagento\Directory\Model\Currencyformat()小数点以下の桁数とフォーマットを担当するものとして機能します。

変数$modelを想定し、$productインスタンス化された例:

$model->format($product->getPrice(), array('symbol' => ''), false, false)

$金額の横にドルなしの書式設定用の小数点以下2桁。array()金額にストア通貨を追加する場合は、空を渡します。


この方法を使用するもう1つの利点は、1000ドルを超える値で作業することです。他の回答では、この数値形式を考慮していないため、フロントエンドに誤った価格が表示されることになります。私はあなたに1,000票を与えることができたらいいのにと思う
circlesix

1
@circlesixに感謝します。
dchayka

それで、何をするのかMagento\Directory\Model\Currency、そしてなぜそれを使うべきなのか?現在のストアビュー通貨構成、または顧客が選択した通貨を確認しますか?
エルファン

1
@ErfanはCurrency、Directoryモジュールでモデルを見ると、最終的な価格値を操作するヘルパーのようなものです。フレームワークのヘルパーの例では、価格をストアの正しい通貨に変換できますが、金額の精度を制御することはできず、クラスを拡張してカスタマイズする必要があります。通貨は最終的な金額を期待するのとは反対ですが、書式設定、10進数の精度などをカスタマイズできます
。– dchayka

13

あなたがしたいのは、これを使用したいテンプレートファイルのブロックに「PriceCurrencyInterface」を注入することです。

template.phtml

<div><?= $block->getFormatedPrice('342.4345') ?>

Item.php(上記のテンプレートのブロッククラス...それが何であれ)

<?php
namespace \Whatever

use Magento\Framework\Pricing\PriceCurrencyInterface;
use Magento\Framework\View\Element\Template;

class Item extends Template
{
    /** @var PriceCurrencyInterface $priceCurrency */
    protected $priceCurrency;

    public function __construct(
        Template\Context $context,
        PriceCurrencyInterface $priceCurrency,
        array $data = []
    ) {
        parent::__construct($context, $data);
        $this->priceCurrency = $priceCurrency;
    }

    /**
     * Function getFormatedPrice
     *
     * @param float $price
     *
     * @return string
     */
    public function getFormatedPrice($amount)
    {
        return $this->priceCurrency->convertAndFormat($amount);
    }

これには、現在のストアロケールに基づいて正しい形式を表示するという追加の利点があります。また、役に立つかもしれない他のメソッドも提供しています。チェックしてください...

コンテナ精度など、表示する結果を構成できるため、メソッドのシグネチャを確認してください

priceCurrency->convertAndFormat($amount, $includeContainer, $precision)

乾杯!


10

これは、ビューファイル(.phtml)内で次の方法で取得できます。

$ price = 5.5;
$ this-> helper( 'Magento \ Framework \ Pricing \ Helper \ Data')-> currency($ price、true、false);

不思議な人のために、署名はcurrency($value, $format = true, $includeContainer = true)
コリンアンダーソン

リンクチェックbit.ly/2MKg1L4
ラケッシュJesadiya

これは、currentoInterfaceをMagentoのTemplate-classに実装するためだけに、個別のモジュールを構築したくない場合の最も簡単な方法です。
ダーン

phtmlの複数の場所で同じフォーマッターを使用する必要があるため、$this->関数内で提案を呼び出す代わりに使用できるもの
BraDev

1

価格設定ヘルパーを使用する

<?php
namespace \Vendor\Module

class MyClass extends Template
{
    public $priceHelper;

    public function __construct(
        Template\Context $context,
        \Magento\Framework\Pricing\Helper\Data $priceHelper,
        array $data = []
    ) {
        parent::__construct($context, $data);
        $this->priceHelper  = $priceHelper;
    }

    public function myCustomFunction($product) {
        return $this->priceHelper->currency($product->getPrice(),true,false);
    }
}

これは、特定の製品から価格と通貨記号を出力します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.