Як конвертувати число у формат валюти в 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 немає "ядрового" модуля. Ви можете отримати це наступним чином всередині файлу перегляду (.phtml)

$ this-> helper ('Magento \ Framework \ Pricing \ Helper \ Data') -> валюта (number_format (50,2), true, false);

Що робити, якщо ви просто хочете символ валюти до ціни? currency()метод для перетворення використовує поточну валюту діапазону.
MagePsycho

1
Це не працює для цін понад 1000. Кількість_формату додає тисячі роздільників, що спричиняє проблеми в європейських системах, де точка - це тисяча роздільника. Наприклад, ціна 12000 євро повертає 12,00 євро, що неправильно. Тоді вам потрібно зняти number_format()та просто передати суму:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
Жак

Це, безумовно, не найкраща відповідь, оскільки він вважається найвищим і прийнятим. Краще ознайомтеся з відповіддю дчайки
Акіф

Для тих, хто цікавиться, підписcurrency($value, $format = true, $includeContainer = true)
Collin Anderson

16

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

У прийнятій відповіді використовується number_formatфункція, яку взагалі не слід використовувати, принаймні, я б не пішов з таким підходом.

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

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

Приклад, припускаючи змінні $modelта $productотримані інстанцією:

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

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


Ще одна перевага використання цього методу - робота зі значеннями понад 1000 доларів. Інші відповіді не беруть до уваги цей формат чисел, і ви виявляєте неправильні ціни, що відображаються на передній частині. Я хотів би, щоб я міг вам дати 1000 голосів
кола

1
@circlesix дякую велике, дуже вдячний.
дчайка

Отже, що Magento\Directory\Model\Currencyробити, і навіщо це використовувати? Чи розглядає він поточну конфігурацію валюти перегляду магазину чи валюту, обрану замовником?
Ерфан

1
@Erfan те, як я бачу його Currencyмодель у модулі Каталог - це як помічник для маніпулювання кінцевою ціновою вартістю. На прикладі помічника від 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)

Ура!


10

Ви можете отримати це за допомогою наступного способу всередині файлу перегляду (.phtml).

$ ціна = 5,5;
$ this-> helper ('Magento \ Framework \ Ціноутворення \ Helper \ Data') -> валюта ($ ціна, правда, помилка);

Для тих, хто цікавиться, підписcurrency($value, $format = true, $includeContainer = true)
Collin Anderson

Перевірте посилання bit.ly/2MKg1L4
Ракеш Єсадія

Це найшвидший спосіб, якщо ви не хочете створити окремий модуль, просто впровадити валютний інтерфейс у клас шаблонів 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);
    }
}

Це виводить символ ціни та валюти для даного товару.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.