Jak przekonwertować liczbę na format walutowy w magento2

21

Chcę przekonwertować liczbę na format walutowy w Magento2, tak jak robimy to w Magento 1.x

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

Jak zrobić to samo w Magento2?

Gaurav Jain
źródło
bit.ly/2MKg1L4 działa dobrze przy użyciu linku
Rakesh Jesadiya

Odpowiedzi:

38

W Magento 2 nie ma modułu „core”. Możesz to zrobić, postępując w następujący sposób w pliku widoku (.phtml)

$ this-> helper ('Magento \ Framework \ Price \ Helper \ Data') -> currency (format_liczb (50,2), prawda, fałsz);
Sohel Rana
źródło
Co jeśli chcesz tylko symbol waluty do ceny? currency()metoda użyje bieżącej waluty zakresu do przeliczenia.
MagePsycho
1
Nie działa to w przypadku cen powyżej 1000. Format_ liczbowy dodaje tysiące separatorów, co powoduje problemy w systemach europejskich, w których punkt jest separatorem tysiąca. Na przykład cena 12000 EUR zwraca 12,00 EUR, co jest błędne. Następnie musisz usunąć number_format()i po prostu podać kwotę:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
Jacques
Z pewnością nie jest to najlepsza odpowiedź, mimo że jest uznana za najwyższą i zaakceptowaną. Lepsze podejście to odpowiedź dchayki
Akif
Dla tych, którzy zastanawiają się, podpis jestcurrency($value, $format = true, $includeContainer = true)
Collin Anderson
16

Przede wszystkim nie rób formatowania walut w plikach widoku (.phtml), używaj pomocników lub bloków lub kombinacji obu tych elementów.

Przyjęta odpowiedź korzysta z number_formatfunkcji, której w ogóle nie należy używać, przynajmniej ja nie wybrałbym takiego podejścia.

Możesz spróbować użyć modelu:

Model typu Magento\Directory\Model\Currency. Działa, format()ponieważ odpowiada za miejsca dziesiętne i formatowanie.

Przykład przy założeniu zmiennych $modeli $productich wystąpienia:

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

2 miejsca po przecinku do formatowania bez $dolara obok kwoty. Podaj puste, array()jeśli chcesz, aby waluta sklepu była dołączana do kwoty.

dchayka
źródło
Kolejną zaletą korzystania z tej metody jest praca z wartościami przekraczającymi 1000 USD. Inne odpowiedzi nie biorą pod uwagę tego formatu liczb, a na końcu pojawiają się nieprawidłowe ceny. Żałuję, że nie mogę oddać Ci 1000 głosów
kręgi
1
@circlesix dziękuję bardzo, bardzo ceniony.
dchayka
Co więc robi Magento\Directory\Model\Currencyi dlaczego warto z niej korzystać? Czy analizuje bieżącą konfigurację waluty w sklepie lub walutę wybraną przez klienta?
Erfan
1
@Erfan w moim odczuciu Currencymodel w module Directory jest jak pomocnik w manipulowaniu ostateczną wartością ceny. W przykładzie pomocnika z frameworka będziesz w stanie przekonwertować cenę na prawidłową walutę sklepu, ale nie masz kontroli nad dokładnością kwoty i będziesz musiał rozszerzyć klasy, aby ją dostosować. Waluta jest odwrotna, gdy oczekuje ostatecznej kwoty, ale pozwala dostosować formatowanie, precyzję dziesiętną itp.
dchayka
13

To, co chcesz zrobić, to wstawić „ PriceCurrencyInterface ” do bloku pliku szablonu, w którym chcesz go użyć.

template.phtml

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

Item.php (klasa bloku powyższego szablonu ... cokolwiek to może być)

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

Ma to dodatkową zaletę wyświetlania poprawnego formatu w oparciu o bieżące ustawienia regionalne sklepu. Oferuje również inne metody, które mogą być pomocne, sprawdź je ...

Sprawdź podpis metody, ponieważ możesz skonfigurować wynik, który chcesz wyświetlić, taki jak kontener i dokładność .

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

Twoje zdrowie!

drew7721
źródło
10

Możesz to zrobić, postępując w następujący sposób w pliku widoku (.phtml).

cena $ = 5,5;
$ this-> pomocnik („Magento \ Framework \ Cennik \ Pomocnik \ Dane”) -> waluta ($ cena, prawda, fałsz);
Nilesh Gosai
źródło
Dla tych, którzy zastanawiają się, podpis jestcurrency($value, $format = true, $includeContainer = true)
Collin Anderson
Sprawdź link bit.ly/2MKg1L4
Rakesh Jesadiya
Jest to najszybszy sposób, jeśli nie chcesz budować osobnego modułu, wystarczy zaimplementować interfejs currencyInterface w klasie szablonów Magento.
Daan van den Bergh
Ponieważ muszę używać tego samego formatera w wielu miejscach w phtml, czego mogę użyć zamiast $this->wywoływać twoją sugestię wewnątrz funkcji
BraDev
1

Korzystanie z pomocnika cenowego

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

To generuje symbol ceny i waluty z danego produktu.

Joel Davey
źródło