Cómo convertir números en formato de moneda en magento2

21

Quiero convertir el número al formato de moneda en magento2 como hacemos en Magento 1.x con esto

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

¿Cómo hacer lo mismo en Magento2?

Gaurav Jain
fuente
bit.ly/2MKg1L4 funciona bien usando el enlace
Rakesh Jesadiya

Respuestas:

38

En magento 2, no hay un módulo 'núcleo'. Puede obtener esto siguiendo el archivo de vista interior (.phtml)

$ this-> helper ('Magento \ Framework \ Pricing \ Helper \ Data') -> currency (number_format (50,2), true, false);
Sohel Rana
fuente
¿Qué pasa si solo quieres el símbolo de la moneda al precio? currency()El método utilizará la moneda de alcance actual para convertir.
MagePsycho
1
Esto no funciona para precios superiores a 1000. number_format agrega miles de separadores, lo que causa problemas en los sistemas europeos donde un punto es mil separadores. Por ejemplo, un precio de EUR 12000 devuelve € 12,00, lo cual está mal. Luego debe eliminar el number_format()y simplemente pasar la cantidad:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
Jacques
Ciertamente, esta no es la mejor respuesta, aunque es votada como la más alta y aceptada. Mejor respuesta es la respuesta de dchayka
Akif
Para aquellos que se preguntan, la firma escurrency($value, $format = true, $includeContainer = true)
Collin Anderson
16

En primer lugar, no realice el formato de moneda dentro de sus archivos de vista (.phtml), use ayudantes o bloques o una combinación de ambos.

La respuesta aceptada usa una number_formatfunción que no debería usarse en absoluto, al menos no seguiría ese enfoque.

Puedes intentar usar un modelo:

Modelo de tipo Magento\Directory\Model\Currency. Funciona format()ya que es el responsable de los decimales y el formato.

Ejemplo asumiendo variables $modely $productse han instanciado:

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

2 lugares decimales para formatear sin $dólar al lado de la cantidad. Pase vacío array()si desea agregar la moneda de la tienda a su cantidad.

dchayka
fuente
Otro beneficio de usar este método es trabajar con valores superiores a $ 1000. Las otras respuestas no tienen en cuenta este formato de número, y terminas con los precios incorrectos que aparecen en el front-end. Desearía poder darte 1,000 votos
Circulosix
1
@circlesix muchas gracias, muy apreciado.
dchayka
Entonces, ¿qué hace Magento\Directory\Model\Currencyy por qué debería usarse? ¿Mira la configuración actual de la moneda de la vista de la tienda o la moneda seleccionada por el cliente?
Erfan
1
@Erfan, tal como lo veo Currencymodelo en el módulo Directorio, es como un ayudante para manipular el valor del precio final. En el ejemplo del asistente del Framework, podrá convertir el precio a la moneda correcta de la tienda, pero no tiene control sobre la precisión de la cantidad y tendrá que extender las clases para personalizarlo. La moneda es lo contrario donde espera la cantidad final, pero le permite personalizar el formato, la precisión decimal, etc.
dchayka
13

Lo que desea hacer es inyectar el " PriceCurrencyInterface " en el Bloque del archivo de plantilla en el que desea usar esto.

template.phtml

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

Item.php (Clase de bloque de la plantilla anterior ... sea lo que sea)

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

Esto tiene el beneficio adicional de mostrar el formato correcto según la ubicación actual de la tienda. También ofrece otros métodos que pueden ser útiles, échales un vistazo ...

Asegúrese de verificar la firma del método, ya que puede configurar el resultado que desea mostrar, como el contenedor y la precisión .

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

¡Aclamaciones!

drew7721
fuente
10

Puede obtener esto siguiendo el archivo de vista interior (.phtml).

$ precio = 5.5;
$ this-> helper ('Magento \ Framework \ Pricing \ Helper \ Data') -> moneda ($ precio, verdadero, falso);
Nilesh Gosai
fuente
Para aquellos que se preguntan, la firma escurrency($value, $format = true, $includeContainer = true)
Collin Anderson
Compruebe el enlace bit.ly/2MKg1L4
Rakesh Jesadiya el
Esta es la forma más rápida, si no desea construir un módulo separado, solo para implementar el CurrencyInterface en la clase de plantilla de Magento.
Daan van den Bergh el
Como necesito usar el mismo formateador en múltiples lugares en el phtml, ¿qué puedo usar en lugar de $this->cuando llamo a su sugerencia dentro de una función
BraDev
1

Usando el asistente de fijación de precios

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

Esto genera un símbolo de precio y moneda de un producto determinado.

Joel Davey
fuente