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?


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

¿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.


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!


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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.