So konvertieren Sie Zahlen in das Währungsformat in magento2

21

Ich möchte Zahlen in magento2 in das Währungsformat konvertieren, so wie wir es in Magento 1.x tun

$_coreHelper = $this->helper('core');
$_coreHelper->currency(number_format(50,2),true,false)

Wie mache ich das selbe in Magento2?

Gaurav Jain
quelle
bit.ly/2MKg1L4 funktioniert gut mit Link
Rakesh Jesadiya

Antworten:

38

In Magento 2 gibt es kein Kernmodul. Sie erhalten dies auf folgende Weise in der Ansichtsdatei (.phtml)

$ this-> helper ('Magento \ Framework \ Pricing \ Helper \ Data') -> currency (number_format (50,2), true, false);
Sohel Rana
quelle
Was ist, wenn Sie nur ein Währungssymbol für den Preis wünschen? currency()Die Methode verwendet die aktuelle Bereichswährung für die Konvertierung.
MagePsycho
1
Dies funktioniert nicht bei Preisen über 1000. Das number_format fügt Tausendertrennzeichen hinzu, was bei europäischen Systemen, bei denen ein Punkt ein Tausendertrennzeichen ist, zu Problemen führt. Zum Beispiel ein Preis von EUR 12000 ergibt € 12,00, was falsch ist. Dann müssen Sie die entfernen number_format()und einfach den Betrag übergeben:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
Jacques
Dies ist sicherlich nicht die beste Antwort, obwohl sie als höchste und akzeptierte Antwort eingestuft wird. Besser geeignet ist die Antwort von dchayka
Akif
Für diejenigen, die sich fragen, ist die Signaturcurrency($value, $format = true, $includeContainer = true)
Collin Anderson
16

Führen Sie zunächst keine Währungsformatierungen in Ihren Ansichtsdateien (.phtml) durch, verwenden Sie Helfer oder Blöcke oder eine Kombination aus beiden.

Die akzeptierte Antwort verwendet eine number_formatFunktion, die überhaupt nicht verwendet werden sollte, zumindest würde ich nicht mit diesem Ansatz gehen.

Sie können versuchen, ein Modell zu verwenden:

Modell des Typs Magento\Directory\Model\Currency. Funktioniert so, format()wie es für die Nachkommastellen und die Formatierung verantwortlich ist.

Beispiel unter der Annahme von Variablen $modelund $productwurden instanziiert:

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

2 Nachkommastellen für die Formatierung ohne $Dollar neben dem Betrag. Übergeben Sie leer, array()wenn Sie möchten, dass die Ladenwährung an Ihren Betrag angehängt wird.

dchayka
quelle
Ein weiterer Vorteil dieser Methode ist die Arbeit mit Werten über 1000 US-Dollar. Bei den anderen Antworten wird dieses Zahlenformat nicht berücksichtigt, und am Frontend werden die falschen Preise angezeigt. Ich wünschte, ich könnte Ihnen 1.000 Stimmen geben
circlesix
1
@ Circlesix vielen Dank, sehr geschätzt.
dchayka
Also, was macht Magento\Directory\Model\Currencyund warum sollte es verwendet werden? Betrachtet es die aktuelle Konfiguration der Storeview-Währung oder die vom Kunden ausgewählte Währung?
Erfan
1
@Erfan, so wie ich es Currencyim Directory-Modul sehe, ist wie ein Helfer, um den endgültigen Preiswert zu manipulieren. Im Beispiel des Helfers aus dem Framework können Sie den Preis in die richtige Währung des Geschäfts umwandeln, haben jedoch keine Kontrolle über die Genauigkeit des Betrags und müssen die Klassen erweitern, um ihn anzupassen. Die Währung ist das Gegenteil, wo es den endgültigen Betrag erwartet, aber Sie können Formatierung, Dezimalgenauigkeit usw.
anpassen
13

Sie möchten das " PriceCurrencyInterface " in den Block der Vorlagendatei einfügen, in der Sie dies verwenden möchten.

template.phtml

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

Item.php (Blockklasse der obigen Vorlage ... was auch immer das sein mag)

<?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);
    }

Dies hat den zusätzlichen Vorteil, dass das richtige Format basierend auf dem aktuellen Gebietsschema des Geschäfts angezeigt wird. Es bietet auch andere Methoden, die hilfreich sein könnten, überprüfen Sie sie aus ...

Stellen Sie sicher, dass Sie die Methodensignatur überprüfen, da Sie das anzuzeigende Ergebnis konfigurieren können, z. B. den Container und die Genauigkeit .

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

Prost!

drew7721
quelle
10

Sie können dies auf folgende Weise in der Ansichtsdatei (.phtml) abrufen.

$ Preis = 5,5;
$ this-> helper ('Magento \ Framework \ Pricing \ Helper \ Data') -> currency ($ price, true, false);
Nilesh Gosai
quelle
Für diejenigen, die sich fragen, ist die Signaturcurrency($value, $format = true, $includeContainer = true)
Collin Anderson
Überprüfen Sie den Link bit.ly/2MKg1L4
Rakesh Jesadiya
Dies ist der schnellste Weg, wenn Sie kein separates Modul erstellen möchten, nur um das currencyInterface in die Template-Klasse von Magento zu implementieren.
Daan van den Bergh
Da ich den gleichen Formatierer an mehreren Stellen im HTML-Code verwenden muss, was kann ich anstelle dessen verwenden, $this->wenn ich Ihren Vorschlag innerhalb einer Funktion
aufrufe
1

Verwendung des Pricing Helper

<?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);
    }
}

Dies gibt ein Preis- und Währungssymbol für ein bestimmtes Produkt aus.

Joel Davey
quelle