Cách chuyển đổi số thành định dạng tiền tệ trong magento2


21

Tôi muốn chuyển đổi số thành định dạng tiền tệ trong magento2 như chúng tôi làm trong Magento 1.x với điều này

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

Làm thế nào để làm điều tương tự trong Magento2?


bit.ly/2MKg1L4 hoạt động tốt khi sử dụng liên kết
Rakesh Jesadiya

Câu trả lời:


38

Trong magento 2, không có mô-đun 'lõi'. Bạn có thể có được điều này bằng cách làm theo cách bên trong tệp xem (.phtml)

$ this-> người trợ giúp ('Magento \ Framework \ Vật giá \ Người trợ giúp \ Dữ liệu') -> tiền tệ (number_format (50,2), đúng, sai);

Điều gì nếu bạn chỉ muốn biểu tượng tiền tệ với giá? currency()phương pháp sẽ sử dụng tiền tệ phạm vi hiện tại để chuyển đổi.
MagePologistso

1
Điều này không hoạt động với giá trên 1000. Number_format thêm hàng ngàn dấu phân cách, điều này gây rắc rối cho các hệ thống châu Âu trong đó một điểm là một dấu phân cách. Ví dụ, giá 12000 EUR trả lại € 12,00 là sai. Sau đó, bạn cần xóa number_format()và chỉ cần chuyển số tiền:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
Jacques

Đây chắc chắn không phải là câu trả lời hay nhất cho dù nó được bình chọn cao nhất và được chấp nhận. Approuch tốt hơn là câu trả lời của dchayka: magento.stackexchange.com/a/148082/5827
Akif

Đối với những người thắc mắc, chữ ký làcurrency($value, $format = true, $includeContainer = true)
Collin Anderson

16

Trước hết, không thực hiện định dạng tiền tệ trong các tệp xem (.phtml) của bạn, hãy sử dụng các trình trợ giúp hoặc các khối hoặc kết hợp cả hai.

Câu trả lời được chấp nhận sử dụng number_formatchức năng hoàn toàn không nên sử dụng, ít nhất là tôi sẽ không sử dụng phương pháp đó.

Bạn có thể thử sử dụng một mô hình:

Mô hình loại Magento\Directory\Model\Currency. Chức năng format()như là một trong những chịu trách nhiệm cho vị trí thập phân và định dạng.

Ví dụ giả sử các biến $model$productđã được khởi tạo:

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

2 vị trí thập phân để định dạng mà không có $đô la bên cạnh số tiền. Vượt qua trống array()nếu bạn muốn tiền tệ lưu trữ được thêm vào số tiền của bạn.


Một lợi ích khác của việc sử dụng phương pháp này là làm việc với các giá trị trên 1000 đô la. Các câu trả lời khác không có định dạng số này trong tâm trí và bạn kết thúc với giá không chính xác hiển thị ở mặt trước. Tôi ước tôi có thể cho bạn 1.000 phiếu bầu
circleix

1
@circlesix cảm ơn rất nhiều, đánh giá cao.
dchayka

Vì vậy, những gì Magento\Directory\Model\Currencylàm, và tại sao nó nên được sử dụng? Nó nhìn vào cấu hình tiền tệ của lượt xem hiện tại, hoặc loại tiền được khách hàng lựa chọn?
Erfan

1
@Erfan theo cách tôi thấy Currencymô hình trong mô-đun Thư mục giống như một người trợ giúp để thao túng giá trị giá cuối cùng. Trong ví dụ về người trợ giúp từ Khung, bạn sẽ có thể chuyển đổi giá thành loại tiền chính xác của cửa hàng nhưng bạn không kiểm soát được độ chính xác của số tiền và sẽ phải mở rộng các lớp để được tùy chỉnh. Tiền tệ ngược lại nơi nó mong đợi số tiền cuối cùng nhưng cho phép bạn tùy chỉnh định dạng, độ chính xác thập phân, v.v.
dchayka

13

Những gì bạn muốn làm là đưa " PriceCurrencyInterface " vào Khối tệp mẫu mà bạn muốn sử dụng.

mẫu.phtml

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

Item.php (Block Class của mẫu trên ... bất cứ điều gì có thể)

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

Điều này có thêm lợi ích của việc hiển thị định dạng chính xác dựa trên ngôn ngữ cửa hàng hiện tại. Nó cũng cung cấp các phương pháp khác có thể hữu ích, hãy kiểm tra chúng ...

Đảm bảo kiểm tra chữ ký phương thức vì bạn có thể định cấu hình kết quả bạn muốn hiển thị, chẳng hạn như vùng chứađộ chính xác .

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

Chúc mừng!


10

Bạn có thể có được điều này bằng cách làm theo cách bên trong tập tin xem (.phtml).

$ giá = 5,5;
$ this-> người trợ giúp ('Magento \ Framework \ Vật giá \ Người trợ giúp \ Dữ liệu') -> tiền tệ ($ price, true, false);

Đối với những người thắc mắc, chữ ký làcurrency($value, $format = true, $includeContainer = true)
Collin Anderson

Kiểm tra liên kết bit.ly/2MKg1L4
Rakesh Jesadiya

Đây là cách nhanh nhất, nếu bạn không muốn xây dựng một mô-đun riêng biệt, chỉ để triển khai loại tiền mặt trong lớp Mẫu của Magento.
Daan van den Bergh

Vì tôi cần sử dụng cùng một định dạng ở nhiều vị trí trên phtml, tôi có thể sử dụng cái gì thay vì $this->khi tôi gọi đề xuất của bạn bên trong một hàm
BraDev

1

Sử dụng trình trợ giúp giá

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

Điều này tạo ra một biểu tượng giá và tiền tệ từ một sản phẩm nhất định.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.