Come convertire il numero in formato valuta in magento2


21

Voglio convertire il numero in formato valuta in magento2 come facciamo in Magento 1.x con questo

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

Come fare lo stesso in Magento2?


bit.ly/2MKg1L4 funziona bene usando il link
Rakesh Jesadiya il

Risposte:


38

In magento 2, non ci sono moduli 'core'. È possibile ottenere questo seguendo il modo all'interno del file di visualizzazione (.phtml)

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

Cosa succede se si desidera solo il simbolo della valuta per il prezzo? currency()il metodo utilizzerà la valuta dell'ambito corrente per la conversione.
MagePsycho,

1
Questo non funziona per prezzi superiori a 1000. Il number_format aggiunge migliaia di separatori, il che causa problemi ai sistemi europei in cui un punto è un migliaio di separatori. Ad esempio un prezzo di EUR 12000 restituisce € 12,00 che è errato. Quindi è necessario rimuovere il number_format()e basta passare l'importo:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
Jacques

Questa non è certamente la migliore risposta, anche se è votata più alta e accettata. L'approvazione migliore è la risposta di dchayka
Akif

Per quelli che si chiedono, la firma ècurrency($value, $format = true, $includeContainer = true)
Collin Anderson,

16

Prima di tutto non eseguire la formattazione della valuta all'interno dei file di visualizzazione (.phtml), utilizzare helper o blocchi o una combinazione di entrambi.

La risposta accettata utilizza una number_formatfunzione che non dovrebbe essere utilizzata affatto, almeno non seguirei questo approccio.

Puoi provare a usare un modello:

Modello di tipo Magento\Directory\Model\Currency. Funziona format()in quanto responsabile di posizioni decimali e formattazione.

Esempio assumendo variabili $modele $productsono state istanziate:

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

2 cifre decimali per la formattazione senza $dollaro accanto all'importo. Passa vuoto array()se desideri aggiungere la valuta del negozio al tuo importo.


Un altro vantaggio dell'utilizzo di questo metodo è l'utilizzo di valori superiori a $ 1000. Le altre risposte non tengono conto di questo formato numerico e si ottengono i prezzi errati visualizzati nel front-end. Vorrei
poterti

1
@circlesix grazie mille, molto apprezzato.
Dchayka,

Quindi cosa fa Magento\Directory\Model\Currencye perché dovrebbe essere usato? Analizza l'attuale configurazione della valuta di visualizzazione dello store o la valuta selezionata dal cliente?
Erfan,

1
@Erfan il modo in cui lo vedo Currencymodello nel modulo Directory è come un aiuto per manipolare il valore del prezzo finale. Nell'esempio dell'assistente del Framework sarai in grado di convertire il prezzo nella valuta corretta del negozio, ma non avrai alcun controllo sulla precisione dell'importo e dovrai estendere le classi per personalizzarlo. La valuta è l'opposto di quanto prevede l'importo finale ma ti consente di personalizzare la formattazione, la precisione decimale, ecc.
dchayka,

13

Quello che vuoi fare è iniettare " PriceCurrencyInterface " nel blocco del file modello in cui desideri utilizzarlo.

template.phtml

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

Item.php (Block Class del modello sopra ... qualunque esso sia)

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

Ciò ha l'ulteriore vantaggio di visualizzare il formato corretto in base alle impostazioni internazionali correnti del negozio. Offre anche altri metodi che potrebbero essere utili, dai un'occhiata a ...

Assicurati di controllare la firma del metodo poiché puoi configurare il risultato che desideri visualizzare come il contenitore e la precisione .

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

Saluti!


10

È possibile ottenere questo seguendo il modo all'interno del file di visualizzazione (.phtml).

$ prezzo = 5,5;
$ This-> helper ( 'Magento \ Framework \ Pricing \ Helper \ Data') -> valuta ($ prezzo, vero, falso);

Per quelli che si chiedono, la firma ècurrency($value, $format = true, $includeContainer = true)
Collin Anderson,

Controlla il link bit.ly/2MKg1L4
Rakesh Jesadiya il

Questo è il modo più veloce, se non vuoi costruire un modulo separato, solo per implementare currencyInterface nella classe Template di Magento.
Daan van den Bergh,

Dato che devo usare lo stesso formattatore in più punti del phtml, cosa posso usare invece di $this->quando chiamo il tuo suggerimento all'interno di una funzione
BraDev

1

Utilizzando l'helper dei prezzi

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

Ciò genera un simbolo di prezzo e valuta da un determinato prodotto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.