Comment convertir un nombre en format monétaire dans magento2


21

Je veux convertir le nombre au format monétaire dans magento2 comme nous le faisons dans Magento 1.x avec ceci

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

Comment faire de même dans Magento2?


bit.ly/2MKg1L4 fonctionne très bien en utilisant le lien
Rakesh Jesadiya

Réponses:


38

Dans magento 2, il n'y a pas de module 'core'. Vous pouvez l'obtenir en suivant le chemin dans le fichier de vue (.phtml)

$ this-> helper ('Magento \ Framework \ Pricing \ Helper \ Data') -> currency (number_format (50,2), true, false);

Et si vous voulez juste un symbole de devise sur le prix? currency()La méthode utilisera la devise du périmètre actuel pour la conversion.
MagePsycho

1
Cela ne fonctionne pas pour les prix supérieurs à 1000. Le format_numère ajoute des milliers de séparateurs, ce qui cause des problèmes sur les systèmes européens où un point vaut mille séparateurs. Par exemple, un prix de 12000 EUR renvoie 12,00 €, ce qui est faux. Ensuite, vous devez supprimer le number_format()et juste passer le montant:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
Jacques

Ce n'est certainement pas la meilleure réponse, même si elle est votée la plus élevée et acceptée. Mieux approuver est la réponse de dchayka
Akif

Pour ceux qui se demandent, la signature estcurrency($value, $format = true, $includeContainer = true)
Collin Anderson

16

Tout d'abord, n'effectuez pas le formatage des devises dans vos fichiers d'affichage (.phtml), utilisez des aides ou des blocs ou une combinaison des deux.

La réponse acceptée utilise une number_formatfonction qui ne devrait pas du tout être utilisée, du moins je n'irais pas avec cette approche.

Vous pouvez essayer d'utiliser un modèle:

Modèle de type Magento\Directory\Model\Currency. Fonctionne format()car c'est celui qui est responsable des décimales et du formatage.

Exemple supposant des variables $modelet $productayant été instanciées:

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

2 décimales pour le formatage sans $dollar à côté du montant. Passez vide array()si vous voulez que la devise du magasin soit ajoutée à votre montant.


Un autre avantage de l'utilisation de cette méthode est de travailler avec des valeurs supérieures à 1 000 $. Les autres réponses ne tiennent pas compte de ce format de nombre, et vous vous retrouvez avec des prix incorrects qui s'affichent au début. J'aimerais pouvoir vous donner 1000 votes
positifs

1
@circlesix merci beaucoup, très apprécié.
dchayka

Alors qu'est-ce que cela Magento\Directory\Model\Currencyfait et pourquoi devrait-il être utilisé? Examine-t-il la configuration actuelle de la devise de la vue de magasin ou la devise sélectionnée par le client?
Erfan

1
@Erfan la façon dont je le vois Currencydans le module Annuaire est comme une aide pour manipuler la valeur finale du prix. Dans l'exemple de l'assistant du Framework, vous pourrez convertir le prix dans la bonne devise du magasin, mais vous n'avez aucun contrôle sur la précision du montant et devrez étendre les classes pour le personnaliser. La devise est l'opposé où elle attend le montant final mais vous permet de personnaliser le formatage, la précision décimale, etc.
dchayka

13

Ce que vous voulez faire est d'injecter le " PriceCurrencyInterface " dans le bloc du fichier modèle dans lequel vous souhaitez l'utiliser.

template.phtml

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

Item.php (Classe de bloc du modèle ci-dessus ... quel qu'il soit)

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

Cela a l'avantage supplémentaire d'afficher le format correct en fonction des paramètres régionaux actuels du magasin. Il propose également d'autres méthodes qui pourraient être utiles, consultez-les ...

Assurez-vous de vérifier la signature de la méthode car vous pouvez configurer le résultat que vous souhaitez afficher, comme le conteneur et la précision .

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

À votre santé!


10

Vous pouvez l'obtenir en suivant le chemin dans le fichier de vue (.phtml).

prix $ = 5,5;
$ this-> helper ('Magento \ Framework \ Pricing \ Helper \ Data') -> currency ($ price, true, false);

Pour ceux qui se demandent, la signature estcurrency($value, $format = true, $includeContainer = true)
Collin Anderson

Vérifiez le lien bit.ly/2MKg1L4
Rakesh Jesadiya

C'est le moyen le plus rapide, si vous ne voulez pas construire un module séparé, juste pour implémenter currencyInterface dans la classe Template de Magento.
Daan van den Bergh

Comme j'ai besoin d'utiliser le même formateur à plusieurs endroits sur le phtml, que puis-je utiliser au lieu de $this->quand j'appelle votre suggestion à l'intérieur d'une fonction
BraDev

1

Utilisation de l'aide à la tarification

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

Cela génère un prix et un symbole monétaire d'un produit donné.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.