¿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:
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)
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 .
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
Respuestas:
En magento 2, no hay un módulo 'núcleo'. Puede obtener esto siguiendo el archivo de vista interior (.phtml)
fuente
currency()
El método utilizará la moneda de alcance actual para convertir.number_format()
y simplemente pasar la cantidad:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
currency($value, $format = true, $includeContainer = true)
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_format
funció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
. Funcionaformat()
ya que es el responsable de los decimales y el formato.Ejemplo asumiendo variables
$model
y$product
se 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íoarray()
si desea agregar la moneda de la tienda a su cantidad.fuente
Magento\Directory\Model\Currency
y 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?Currency
modelo 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.Lo que desea hacer es inyectar el " PriceCurrencyInterface " en el Bloque del archivo de plantilla en el que desea usar esto.
template.phtml
Item.php (Clase de bloque de la plantilla anterior ... sea lo que sea)
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!
fuente
Puede obtener esto siguiendo el archivo de vista interior (.phtml).
fuente
currency($value, $format = true, $includeContainer = true)
$this->
cuando llamo a su sugerencia dentro de una funciónUsando el asistente de fijación de precios
Esto genera un símbolo de precio y moneda de un producto determinado.
fuente