Como converter número em formato de moeda no magento2

21

Eu quero converter o número em formato de moeda no magento2, como fazemos no Magento 1.x com este

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

Como fazer o mesmo no Magento2?

Gaurav Jain
fonte
bit.ly/2MKg1L4 funciona bem usando o link
Rakesh Jesadiya

Respostas:

38

No magento 2, não há módulo 'core'. Você pode obter isso seguindo o caminho dentro do arquivo view (.phtml)

$ this-> helper ('Magento \ Framework \ Pricing \ Helper \ Data') -> moeda (number_format (50,2), verdadeiro, falso);
Sohel Rana
fonte
E se você quiser apenas o símbolo da moeda no preço? currency()O método utilizará a moeda do escopo atual para converter.
MagePsycho
11
Isso não funciona para preços acima de 1000. O number_format adiciona milhares de separadores, o que causa problemas nos sistemas europeus onde um ponto é um separador de milhar. Por exemplo, um preço de 12000 euros devolve 12,00 €, o que está errado. Então você precisa para remover o number_format()e apenas passar a quantidade:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
Jacques
Essa certamente não é a melhor resposta, apesar de ser votada mais alta e aceita. Melhor abordagem é a resposta de dchayka
Akif
Para quem se pergunta, a assinatura écurrency($value, $format = true, $includeContainer = true)
Collin Anderson
16

Antes de tudo, não faça formatação de moeda nos arquivos de exibição (.phtml), use ajudantes ou blocos ou a combinação de ambos.

A resposta aceita usa uma number_formatfunção que não deve ser usada, pelo menos eu não aceitaria essa abordagem.

Você pode tentar usar um modelo:

Modelo do tipo Magento\Directory\Model\Currency. Funciona format()como responsável por casas decimais e formatação.

Exemplo assumindo variáveis $modele $productfoi instanciado:

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

2 casas decimais para formatação sem $dólar próximo ao valor. Passe vazio array()se desejar que a moeda da loja seja anexada ao seu valor.

dchayka
fonte
Outro benefício do uso desse método é trabalhar com valores acima de US $ 1000. As outras respostas não consideram esse formato de número e você acaba com os preços incorretos aparecendo no front-end. Eu gostaria de poder lhe dar 1.000 votos
positivos
11
@circlesix muito obrigado, muito apreciado.
Dchayka
Então, o que Magento\Directory\Model\Currencyfaz e por que deveria ser usado? Ele analisa a configuração atual da moeda do storeview ou a moeda selecionada pelo cliente?
precisa saber é o seguinte
11
@ Erfan, da maneira como vejo o Currencymodelo no módulo Diretório, é como um auxiliar para manipular o valor final do preço. No exemplo do auxiliar do Framework, você poderá converter o preço na moeda correta da loja, mas não tem controle sobre a precisão do valor e precisará estender as classes para personalizá-lo. A moeda é o oposto onde se espera que o montante final, mas permite que você personalize a formatação, a precisão decimal, etc.
dchayka
13

O que você deseja fazer é injetar o " PriceCurrencyInterface " no bloco do arquivo de modelo em que você deseja usá-lo.

template.phtml

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

Item.php (Classe de bloco do modelo acima ... seja lá o que for)

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

Isso tem o benefício adicional de exibir o formato correto com base no código do idioma da loja atual. Também oferece outros métodos que podem ser úteis, confira ...

Verifique a assinatura do método, pois você pode configurar o resultado que deseja exibir, como o contêiner e a precisão .

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

Felicidades!

drew7721
fonte
10

Você pode obtê-lo seguindo o arquivo view (.phtml).

$ preço = 5,5;
$ this-> helper ('Magento \ Framework \ Pricing \ Helper \ Data') -> moeda ($ preço, verdadeiro, falso);
Nilesh Gosai
fonte
Para aqueles que se perguntam, a assinatura écurrency($value, $format = true, $includeContainer = true)
Collin Anderson
Verifique o link bit.ly/2MKg1L4
Rakesh Jesadiya
Esta é a maneira mais rápida, se você não deseja construir um módulo separado, apenas para implementar o currencyInterface na classe Template do Magento.
Daan van den Bergh
Como eu preciso usar o mesmo formatador em vários lugares no phtml, o que eu posso usar em vez de $this->chamar a sua sugestão dentro de uma função
BraDev 22/10
1

Usando o ajudante de preços

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

Isso gera um símbolo de preço e moeda de um determinado produto.

Joel Davey
fonte