Cara mengonversi angka ke dalam format mata uang di magento2


21

Saya ingin mengonversi angka menjadi format mata uang dalam magento2 seperti yang kami lakukan di Magento 1.x dengan ini

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

Bagaimana melakukan hal yang sama di Magento2?


bit.ly/2MKg1L4 berfungsi dengan baik menggunakan tautan
Rakesh Jesadiya

Jawaban:


38

Di Magento 2, tidak ada modul 'inti'. Anda bisa mendapatkan ini dengan mengikuti cara di dalam file tampilan (.phtml)

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

Bagaimana jika Anda hanya ingin simbol mata uang sesuai dengan harganya? currency()Metode akan menggunakan mata uang lingkup saat ini untuk mengkonversi.
MagePsycho

1
Ini tidak bekerja untuk harga di atas 1000. Number_format menambahkan ribuan pemisah, yang menyebabkan masalah pada sistem Eropa di mana suatu titik adalah pemisah ribuan. Misalnya harga pengembalian EUR 12.000 € 12,00 yang salah. Maka Anda perlu menghapus number_format()dan hanya melewati jumlah:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
Jacques

Ini tentu bukan jawaban terbaik meskipun dipilih tertinggi dan diterima. Persetujuan yang lebih baik adalah jawaban dchayka
Akif

Bagi mereka yang bertanya-tanya, tanda tangannya adalahcurrency($value, $format = true, $includeContainer = true)
Collin Anderson

16

Pertama-tama jangan lakukan pemformatan mata uang di dalam file view (.phtml) Anda, gunakan bantuan atau blok atau kombinasi keduanya.

Jawaban yang diterima menggunakan number_formatfungsi yang tidak boleh digunakan sama sekali, setidaknya saya tidak akan pergi dengan pendekatan itu.

Anda dapat mencoba menggunakan model:

Model jenis Magento\Directory\Model\Currency. Berfungsi format()sebagai orang yang bertanggung jawab atas tempat desimal dan pemformatan.

Contoh dengan asumsi variabel $modeldan $producttelah dipakai:

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

2 tempat desimal untuk pemformatan tanpa $dolar di sebelah jumlahnya. Lewati kosong array()jika Anda ingin menyimpan mata uang yang ditambahkan ke jumlah Anda.


Manfaat lain dari menggunakan metode ini adalah bekerja dengan nilai lebih dari $ 1000. Jawaban lain tidak mempertimbangkan format angka ini, dan Anda berakhir dengan harga yang salah muncul di ujung depan. Saya berharap saya bisa memberi Anda 1.000 suara
circleix

1
@circlesix terima kasih banyak, sangat saya hargai.
dchayka

Jadi apa yang Magento\Directory\Model\Currencydilakukan, dan mengapa itu harus digunakan? Apakah ini terlihat pada konfigurasi mata uang storeview saat ini, atau mata uang yang dipilih oleh pelanggan?
Erfan

1
@ Erfan cara saya melihatnya Currencymodel dalam modul Direktori seperti pembantu untuk memanipulasi nilai harga akhir. Dalam contoh helper dari Framework Anda akan dapat mengkonversi harga ke mata uang yang benar dari toko tetapi Anda tidak memiliki kontrol atas ketepatan jumlah dan harus memperluas kelas untuk mendapatkannya disesuaikan. Mata uang adalah kebalikannya di mana ia mengharapkan jumlah akhir tetapi memungkinkan Anda untuk menyesuaikan pemformatan, presisi desimal, dll.
dchayka

13

Yang ingin Anda lakukan adalah menyuntikkan " PriceCurrencyInterface " di Blok file templat tempat Anda ingin menggunakannya.

template.phtml

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

Item.php (Blokir Kelas dari template di atas ... apa pun itu)

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

Ini memiliki manfaat tambahan untuk menampilkan format yang benar berdasarkan lokasi toko saat ini. Ini juga menawarkan metode lain yang mungkin bisa membantu, periksa ...

Pastikan untuk memeriksa tanda tangan metode karena Anda dapat mengonfigurasi hasil yang ingin Anda tampilkan seperti wadah dan presisi .

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

Tepuk tangan!


10

Anda bisa mendapatkannya dengan mengikuti cara di dalam file tampilan (.phtml).

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

Bagi mereka yang bertanya-tanya, tanda tangannya adalahcurrency($value, $format = true, $includeContainer = true)
Collin Anderson


Ini adalah cara tercepat, jika Anda tidak ingin membangun modul terpisah, hanya untuk mengimplementasikan currencyInterface ke dalam kelas Template Magento.
Daan van den Bergh

Karena saya perlu menggunakan format yang sama di banyak tempat di phtml, apa yang bisa saya gunakan alih-alih $this->ketika saya memanggil saran Anda di dalam suatu fungsi
BraDev

1

Menggunakan bantuan harga

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

Ini menghasilkan simbol harga dan mata uang dari produk yang diberikan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.