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?


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

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.


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!


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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.