Sayı magento2 para birimi biçimine dönüştürme


21

Bu şekilde Magento 1.x'te yaptığımız gibi sayıyı magento2'de para birimi biçimine dönüştürmek istiyorum

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

Magento2 de nasıl yapılır?


bit.ly/2MKg1L4 link kullanarak iyi çalışıyor
Rakesh Jesadiya

Yanıtlar:


38

Magento 2'de 'çekirdek' modül yoktur. Bunu, görüntüleme dosyasının (.phtml) içinde aşağıdaki yolu izleyerek alabilirsiniz

$ This-> yardımcısı ( 'Magento \ Framework \ Fiyatlandırma \ Yardımcısı \ Data') -> para (number_format (50,2), doğru, yanlış);

Ya sadece fiyat için para birimi simgesi istiyorsanız? currency()yöntemi dönüştürmek için geçerli kapsam para birimini kullanacaktır.
MagePsycho

1
Bu sayı 1000'in üzerindeki fiyatlar için geçerli değildir. Number_format binlerce ayırıcı ekler, bu da bir noktanın bin ayırıcı olduğu Avrupa sistemlerinde soruna neden olur. Örneğin, 12000 Euro'luk bir fiyat yanlış olan 12,00 € döndürür. Sonra çıkarmanız number_format()ve miktarı geçmeniz gerekir :$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
Jacques

Bu kesinlikle en yüksek ve kabul edilen oy olan en iyi cevap değildir. Daha iyi bir onaylama dchayka'nın cevabıdır: magento.stackexchange.com/a/148082/5827
Akif

Merak edenler için imzacurrency($value, $format = true, $includeContainer = true)
Collin Anderson

16

Her şeyden önce, görünüm (.phtml) dosyalarınızda para birimi biçimlendirmesi yapmayın, yardımcıları veya blokları veya her ikisinin kombinasyonunu kullanın.

Kabul edilen cevap number_formathiç kullanılmaması gereken fonksiyonu kullanır , en azından ben bu yaklaşımı benimsemem.

Bir model kullanmayı deneyebilirsiniz:

Tip modeli Magento\Directory\Model\Currency. format()Ondalık basamaklardan ve biçimlendirmeden sorumlu olan işlevini yerine getirin.

Değişkenleri varsaydığı $modelve $productsomutlaştırıldığı örnek:

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

$Miktarın yanında dolar olmadan biçimlendirme için 2 ondalık basamak . Tutarınıza array()mağaza para birimi eklenmesini istiyorsanız boş geçin.


Bu yöntemi kullanmanın bir diğer yararı da 1000 doların üzerindeki değerlerle çalışmaktır. Diğer cevaplar bu sayı biçimini göz önünde bulundurmaz ve ön tarafta yanlış fiyatların ortaya çıkmasıyla sonuçlanırsınız. Keşke sana 1000 oy
verebilsem

1
@circlesix çok teşekkürler, çok takdir ediyorum.
dchayka

Peki ne Magento\Directory\Model\Currencyişe yarıyor ve neden kullanılmalı? Geçerli mağaza görüntüleme para birimi yapılandırmasına mı yoksa müşteri tarafından seçilen para birimine mi bakar?
Erfan

1
@Erfan, CurrencyDizin modülünde model gördüğüm şekilde son fiyat değerini değiştirmek için bir yardımcı gibidir. Framework'ün yardımcısı örneğinde, fiyatı mağazanın doğru para birimine dönüştürebilirsiniz, ancak tutarın kesinliği üzerinde hiçbir kontrole sahip olmazsınız ve özelleştirmek için sınıfları genişletmeniz gerekir. Para Birimi, son tutarı beklediği zıttır, ancak biçimlendirme, ondalık kesinlik vb. Özelleştirmenizi sağlar.
dchayka

13

Bunu yapmak istediğiniz şablon dosyasının bloğuna " PriceCurrencyInterface " enjekte etmek istersiniz .

template.phtml

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

Item.php (Yukarıdaki şablonun Block Class ... ne olursa olsun)

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

Bu, geçerli mağaza yerel ayarına bağlı olarak doğru biçimi görüntüleme avantajına sahiptir. Ayrıca, yardımcı olabilecek başka yöntemler de sunar, kontrol edin ...

Kapsayıcı ve kesinlik gibi görüntülemek istediğiniz sonucu yapılandırabileceğiniz için yöntem imzasını kontrol ettiğinizden emin olun .

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

Şerefe!


10

Bunu, görüntüleme dosyasının (.phtml) içinde aşağıdaki yolu izleyerek alabilirsiniz.

$ fiyat = 5.5;
$ This-> yardımcısı ( 'Magento \ Framework \ Fiyatlandırma \ Yardımcısı \ Data') -> para ($ fiyat, doğru, yanlış);

Merak edenler için imzacurrency($value, $format = true, $includeContainer = true)
Collin Anderson

Bağlantıyı kontrol et bit.ly/2MKg1L4
Rakesh Jesadiya

Ayrı bir modül oluşturmak istemiyorsanız, para birimini Magento'nun Şablon sınıfına uygulamak için bu en hızlı yoldur.
Daan van den Bergh

Aynı biçimlendiriciyi phtml üzerinde birden fazla yerde kullanmam $this->gerektiğinden, öneriyi bir işlev içinde çağırdığımda yerine ne kullanabilirim
BraDev

1

Fiyatlandırma yardımcısını kullanma

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

Bu, belirli bir üründen fiyat ve para birimi simgesi çıkarır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.