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.
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)
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 .
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
Respostas:
No magento 2, não há módulo 'core'. Você pode obter isso seguindo o caminho dentro do arquivo view (.phtml)
fonte
currency()
O método utilizará a moeda do escopo atual para converter.number_format()
e apenas passar a quantidade:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
currency($value, $format = true, $includeContainer = true)
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_format
funçã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
. Funcionaformat()
como responsável por casas decimais e formatação.Exemplo assumindo variáveis
$model
e$product
foi instanciado:$model->format($product->getPrice(), array('symbol' => ''), false, false)
2 casas decimais para formatação sem
$
dólar próximo ao valor. Passe vazioarray()
se desejar que a moeda da loja seja anexada ao seu valor.fonte
Magento\Directory\Model\Currency
faz e por que deveria ser usado? Ele analisa a configuração atual da moeda do storeview ou a moeda selecionada pelo cliente?Currency
modelo 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.O que você deseja fazer é injetar o " PriceCurrencyInterface " no bloco do arquivo de modelo em que você deseja usá-lo.
template.phtml
Item.php (Classe de bloco do modelo acima ... seja lá o que for)
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!
fonte
Você pode obtê-lo seguindo o arquivo view (.phtml).
fonte
currency($value, $format = true, $includeContainer = true)
$this->
chamar a sua sugestão dentro de uma funçãoUsando o ajudante de preços
Isso gera um símbolo de preço e moeda de um determinado produto.
fonte