Как конвертировать число в формат валюты в magento2

21

Я хочу конвертировать число в формат валюты в magento2, как мы делаем в Magento 1.x с этим

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

Как сделать то же самое в Magento2?

Гаурав Джайн
источник
bit.ly/2MKg1L4 отлично работает, используя ссылку
Ракеш Джезадия

Ответы:

38

В magento 2 нет модуля «core». Вы можете получить это следующим образом в файле представления (.phtml)

$ This-> помощник ( 'Magento \ Framework \ Цены \ Helper \ Data') -> валюта (number_format (50,2), правда, ложь);
Сохель Рана
источник
Что делать, если вы просто хотите, чтобы символ валюты к цене? currency()Метод будет использовать текущую область видимости для конвертации.
MagePsycho
1
Это не работает для цен выше 1000. Формат number_format добавляет тысячи разделителей, что создает проблемы в европейских системах, где точка - это разделитель тысяч. Например, цена в 12000 евро возвращает € 12,00, что неверно. Тогда нужно снять number_format()и просто передать сумму:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
Жак
Это, конечно, не самый лучший ответ, хотя за него проголосовали за самый высокий и принятый ответ. Лучше подойдет ответ дчайки
Акиф,
Для тех, кто интересуется, подписьcurrency($value, $format = true, $includeContainer = true)
Коллин Андерсон
16

Прежде всего, не делайте форматирование валюты внутри ваших файлов представления (.phtml), используйте помощники или блоки или комбинацию обоих.

В принятом ответе используется number_formatфункция, которая вообще не должна использоваться, по крайней мере, я бы не стал использовать этот подход.

Вы можете попробовать использовать модель:

Модель типа Magento\Directory\Model\Currency. Функция format()отвечает за десятичные разряды и форматирование.

Пример, предполагающий переменные $modelи $productбыл создан:

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

2 знака после запятой для форматирования без $доллара рядом с суммой. Пустой пропуск, array()если вы хотите, чтобы валюта магазина добавлялась к вашей сумме.

dchayka
источник
Еще одним преимуществом использования этого метода является работа со значениями свыше 1000 долларов. Другие ответы не учитывают этот числовой формат, и в итоге вы получите неправильные цены, которые будут отображаться в начале. Я хотел бы дать вам 1000 голосов до
круговой
1
@circlesix большое спасибо, высоко ценится.
Дчайка
Так что же Magento\Directory\Model\Currencyделать и зачем его использовать? Это смотрит на текущую конфигурацию валюты просмотра магазина или валюту, выбранную клиентом?
Эрфан
1
@ Erfan, как я вижу, Currencyмодель в модуле Directory - это помощник для манипулирования окончательным значением цены. В примере с помощником из Framework вы сможете конвертировать цену в правильную валюту магазина, но у вас нет контроля над точностью суммы, и вам придется расширять классы, чтобы настроить ее. Валюта противоположна, где она ожидает окончательную сумму, но позволяет настраивать форматирование, десятичную точность и т. Д.
dchayka
13

То, что вы хотите сделать, это вставить « PriceCurrencyInterface » в блок файла шаблона, в котором вы хотите использовать это.

template.phtml

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

Item.php (блочный класс вышеупомянутого шаблона ... что бы это ни было)

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

Это дает дополнительное преимущество отображения правильного формата в зависимости от текущей локали магазина. Он также предлагает другие методы, которые могут быть полезны, проверьте их ...

Обязательно проверьте сигнатуру метода, поскольку вы можете настроить результат, который вы хотите отобразить, например, контейнер и точность .

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

Ура!

drew7721
источник
10

Вы можете получить это следующим образом в файле представления (.phtml).

цена $ = 5,5;
$ This-> помощник ( 'Magento \ Framework \ Цены \ Helper \ Data') -> валюта ($ цена, правда, ложь);
Нилеш Госай
источник
Для тех, кто интересуется, подписьcurrency($value, $format = true, $includeContainer = true)
Коллин Андерсон
Проверьте ссылку bit.ly/2MKg1L4
Ракеш Джесадия
Это самый быстрый способ, если вы не хотите создавать отдельный модуль, просто внедрить currencyInterface в шаблон-класс Magento.
Даан ван ден Берг
Поскольку мне нужно использовать один и тот же форматер в нескольких местах в phtml, что я могу использовать вместо $this->вызова вашего предложения внутри функции
BraDev
1

Использование помощника по ценообразованию

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

Это выводит цену и символ валюты из данного продукта.

Джоэл Дейви
источник