Что делать, если вы просто хотите, чтобы символ валюты к цене? 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был создан:
2 знака после запятой для форматирования без $доллара рядом с суммой. Пустой пропуск, array()если вы хотите, чтобы валюта магазина добавлялась к вашей сумме.
Еще одним преимуществом использования этого метода является работа со значениями свыше 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 (блочный класс вышеупомянутого шаблона ... что бы это ни было)
Это дает дополнительное преимущество отображения правильного формата в зависимости от текущей локали магазина. Он также предлагает другие методы, которые могут быть полезны, проверьте их ...
Обязательно проверьте сигнатуру метода, поскольку вы можете настроить результат, который вы хотите отобразить, например, контейнер и точность .
Это самый быстрый способ, если вы не хотите создавать отдельный модуль, просто внедрить currencyInterface в шаблон-класс Magento.
Даан ван ден Берг
Поскольку мне нужно использовать один и тот же форматер в нескольких местах в phtml, что я могу использовать вместо $this->вызова вашего предложения внутри функции
Ответы:
В magento 2 нет модуля «core». Вы можете получить это следующим образом в файле представления (.phtml)
источник
currency()
Метод будет использовать текущую область видимости для конвертации.number_format()
и просто передать сумму:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
currency($value, $format = true, $includeContainer = true)
Прежде всего, не делайте форматирование валюты внутри ваших файлов представления (.phtml), используйте помощники или блоки или комбинацию обоих.
В принятом ответе используется
number_format
функция, которая вообще не должна использоваться, по крайней мере, я бы не стал использовать этот подход.Вы можете попробовать использовать модель:
Модель типа
Magento\Directory\Model\Currency
. Функцияformat()
отвечает за десятичные разряды и форматирование.Пример, предполагающий переменные
$model
и$product
был создан:$model->format($product->getPrice(), array('symbol' => ''), false, false)
2 знака после запятой для форматирования без
$
доллара рядом с суммой. Пустой пропуск,array()
если вы хотите, чтобы валюта магазина добавлялась к вашей сумме.источник
Magento\Directory\Model\Currency
делать и зачем его использовать? Это смотрит на текущую конфигурацию валюты просмотра магазина или валюту, выбранную клиентом?Currency
модель в модуле Directory - это помощник для манипулирования окончательным значением цены. В примере с помощником из Framework вы сможете конвертировать цену в правильную валюту магазина, но у вас нет контроля над точностью суммы, и вам придется расширять классы, чтобы настроить ее. Валюта противоположна, где она ожидает окончательную сумму, но позволяет настраивать форматирование, десятичную точность и т. Д.То, что вы хотите сделать, это вставить « PriceCurrencyInterface » в блок файла шаблона, в котором вы хотите использовать это.
template.phtml
Item.php (блочный класс вышеупомянутого шаблона ... что бы это ни было)
Это дает дополнительное преимущество отображения правильного формата в зависимости от текущей локали магазина. Он также предлагает другие методы, которые могут быть полезны, проверьте их ...
Обязательно проверьте сигнатуру метода, поскольку вы можете настроить результат, который вы хотите отобразить, например, контейнер и точность .
priceCurrency->convertAndFormat($amount, $includeContainer, $precision)
Ура!
источник
Вы можете получить это следующим образом в файле представления (.phtml).
источник
currency($value, $format = true, $includeContainer = true)
$this->
вызова вашего предложения внутри функцииИспользование помощника по ценообразованию
Это выводит цену и символ валюты из данного продукта.
источник