วิธีแปลงตัวเลขเป็นรูปแบบสกุลเงินใน magento2


21

ฉันต้องการแปลงตัวเลขเป็นรูปแบบสกุลเงินใน magento2 เหมือนที่เราทำใน Magento 1.x ด้วยสิ่งนี้

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

ทำอย่างไรใน Magento2


bit.ly/2MKg1L4ทำงานได้ดีโดยใช้ลิงก์
Rakesh Jesadiya

คำตอบ:


38

ใน magento 2 ไม่มีโมดูล 'core' คุณสามารถรับสิ่งนี้ได้ด้วยวิธีต่อไปนี้ภายในไฟล์มุมมอง (.phtml)

$ this-> ผู้ช่วย (วีโอไอพี \ Framework \ ราคา \ Helper \ Data) -> สกุลเงิน (number_format (50,2) จริงเท็จ);

ถ้าคุณต้องการให้สัญลักษณ์สกุลเงินเป็นราคา currency()วิธีการจะใช้สกุลเงินขอบเขตปัจจุบันในการแปลง
MagePsycho

1
สิ่งนี้ไม่สามารถใช้ได้กับราคาที่สูงกว่า 1,000 ตัวเลข number_format เพิ่มตัวคั่นหลักพันซึ่งทำให้เกิดปัญหากับระบบในยุโรปที่มีจุดเป็นตัวคั่นหลักพัน ตัวอย่างเช่นราคา EUR 12000 ส่งคืน€ 12,00 ซึ่งผิด แล้วคุณจะต้องลบnumber_format()และเพียงแค่ผ่านจำนวนเงินที่:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
ฌาคส์

นี่ไม่ใช่คำตอบที่ดีที่สุดแน่นอนว่ามันเป็นคะแนนสูงสุดและเป็นที่ยอมรับ approuch ที่ดีกว่าคือคำตอบของ dchayka: magento.stackexchange.com/a/148082/5827
Akif

สำหรับผู้ที่สงสัยว่าเป็นลายเซ็น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()ถ้าคุณต้องการให้สกุลเงินของร้านค้าผนวกกับจำนวนเงินของคุณ


ประโยชน์อีกประการของการใช้วิธีนี้คือการทำงานกับค่าที่มากกว่า $ 1,000 คำตอบอื่น ๆ ไม่คำนึงถึงรูปแบบตัวเลขนี้และคุณจะได้ราคาที่ไม่ถูกต้องปรากฏขึ้นที่ส่วนหน้า ฉันหวังว่าฉันจะให้ 1,000 คะแนนขึ้นไป
circleix

1
@ วงกลมขอบคุณมากชื่นชมมาก
dchayka

แล้วจะMagento\Directory\Model\Currencyทำอย่างไรและทำไมจึงควรใช้? มันดูที่การกำหนดค่าสกุลเงินของมุมมองร้านค้าในปัจจุบันหรือสกุลเงินที่เลือกโดยลูกค้า?
Erfan

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)

ไชโย!


10

คุณสามารถรับสิ่งนี้ได้ด้วยวิธีดังต่อไปนี้ในไฟล์มุมมอง (.phtml)

$ price = 5.5;
$ this-> ผู้ช่วย (วีโอไอพี \ Framework \ ราคา \ Helper \ Data) -> สกุลเงิน ($ ราคาจริงเท็จ);

สำหรับผู้ที่สงสัยว่าลายเซ็นคือcurrency($value, $format = true, $includeContainer = true)
Collin Anderson

ตรวจสอบลิงค์bit.ly/2MKg1L4
Rakesh Jesadiya

นี่เป็นวิธีที่รวดเร็วที่สุดหากคุณไม่ต้องการสร้างโมดูลแยกต่างหากเพียงใช้สกุลเงินอินเทอร์เฟซเป็นเทมเพลตคลาสของวีโอไอพี
Daan van den Bergh

เนื่องจากฉันต้องการใช้ formater เดียวกันในหลาย ๆ ที่บน 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);
    }
}

สิ่งนี้จะแสดงราคาและสัญลักษณ์สกุลเงินจากผลิตภัณฑ์ที่กำหนด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.