Magento 2 Nhận giỏ hàng Trích dẫn trong minicart.phtml


10

Tôi đang cố gắng để có được tổng số báo giá giỏ hàng trong minicart.phtml, nhưng tôi không gặp may. Tôi đang tiêm Magento \ Checkout \ Model \ Cart.

Đây là mã của tôi:

$this->cart = $cart;
$cartQuote= $this->cart->getQuote()->getData();
echo $cartQuote['base_grand_total'];

Sau khi tôi chạy mã đó, minicart bị vỡ và biến mất hoàn toàn khỏi frontend.

Cảm ơn!


Bạn có thể chia sẻ thêm thông tin?
Sohel Rana

Hei Có vẻ như không hoạt động sau khi cập nhật lên 2.1, nó chỉ trả về dữ liệu khi trong trang giỏ hàng / thanh toán, các trang khác đang trả về 0 giá trị.
Frii Zuurikas

Câu trả lời:


16

Bạn chỉ cần giữ dòng dưới đây trong tệp minicart.phtml của mình để được cập nhật tổng phụ,

Dòng bên dưới này là công việc cho tất cả các trường hợp nếu bộ đệm được kích hoạt tốt,

<span data-bind="html: getCartParam('subtotal')"></span> 

Để nhận giá trị của grandtotal, giá vận chuyển,

Bạn có thể nhận GrandTotal, tổng phụ và tỷ lệ vận chuyển cho báo giá hiện tại bằng cách sử dụng mã dưới đây trong tệp minicart.phtml, nhưng khi bộ đệm được bật tại thời điểm đó không cập nhật giá khi bạn thêm sản phẩm mới bằng phương pháp bên dưới.

<?php
    $quote = $block->getTotalsCache();
    $getSubTotal = $quote['subtotal']->getData('value');
    $getGrandTotal = $quote['grand_total']->getData('value');
    $getShippingRate = $quote['shipping']->getData('value');

        $finalSubTotal = $this->helper('Magento\Framework\Pricing\Helper\Data')->currency(number_format($getSubTotal,2),true,false);
        $finalShippingTotal = $this->helper('Magento\Framework\Pricing\Helper\Data')->currency(number_format($getShippingRate,2),true,false);
        $finalGrandTotal = $this->helper('Magento\Framework\Pricing\Helper\Data')->currency(number_format($getGrandTotal,2),true,false);
?>

Nó hoạt động hoàn hảo trên localhost xamp của tôi trên Ubuntu, nhưng $ quote = $ block-> getTotalsCache (); không hoạt động trên máy chủ thử nghiệm linux fedora
Kumar A.

Nó đã hoạt động trên máy chủ linux, tôi nghĩ rằng bạn có một số xung đột hoặc một số lỗi khác.
Rakesh Jesadiya

Tôi đã tham gia nhiều hơn và tìm thấy $ block-> getTotalsCache (); chỉ hoạt động khi bộ nhớ cache bị vô hiệu hóa. Bạn đã kiểm tra điều này với Cache được kích hoạt chưa? Của tôi là Magento2.1.0
Kumar A.

1
Làm thế nào để có được số tiền giảm giá như thế này?
Deeban Babu

@KumarAbhinav, vui lòng giữ <span data-bind = "html: getCartParam ('Subotal')"> </ span> để có được giá động sau khi bật bộ đệm.
Rakesh Jesadiya

8

Chúng tôi đã có một câu hỏi tương tự từ một khách hàng. trong đó anh ấy muốn hiển thị "[số lượng] mục [tổng phụ]" trong khối giỏ hàng được tạo kiểu thay vì biểu tượng giỏ hàng mặc định trong minicart.

Chúng tôi đã tìm thấy câu hỏi này ở đây nhưng không thích câu trả lời mà chúng tôi cần mở rộng \Magento\Checkout\CustomerData\Cartlớp chỉ để hiển thị một số html chính xác

đây là mã cách chúng tôi sửa nó trong mẫu:

<span class="counter-label">
    <!-- ko if: getCartParam('summary_count') == 1 -->
        <!-- ko text: getCartParam('summary_count') --><!-- /ko -->
        <!-- ko i18n: 'item' --><!-- /ko -->
        <span data-bind="html: getCartParam('subtotal')"></span>
    <!-- /ko -->
    <!-- ko if: getCartParam('summary_count') != 1 -->
        <!-- ko text: getCartParam('summary_count') --><!-- /ko -->
        <!-- ko i18n: 'items' --><!-- /ko -->
        <span data-bind="html: getCartParam('subtotal')"></span>
    <!-- /ko -->
</span>

Có vẻ như bạn cũng có thể sử dụng liên kết dữ liệu knout.js tiêu chuẩn và không cần phải sử dụng phương pháp nhận xét loại trực tiếp điên magento 2. điều này đã giải quyết vấn đề trong đó hiển thị getCartParam('subtotal')phương thức html trong đó nó thường in không đúng tổng phụ do <span ="price"></span>thẻ


5

Đoạn mã trên sẽ hoạt động khi tải trang, nhưng sẽ không hoạt động với magento2 ajax add vào giỏ hàng vì nó sử dụng Knockout JS ngay bây giờ.

Cho rằng bạn nên sử dụng -

  1. Ghi đè lớp magento " \ Magento \ Checkout \ CustomerData \ Cart " trong mô-đun của bạn và mở rộng phương thức " getSectionData "
    Hàm công khai getSectionData ()
    {
        $ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); // Sơ thẩm của Trình quản lý đối tượng
        $ priceHelper = $ objectManager-> tạo ('Magento \ Framework \ Vật giá \ Người trợ giúp \ Dữ liệu'); // Trường hợp trợ giúp về giá

        $ totals = $ this-> getQuote () -> getTotals ();
        trở về [
            'Tóm tắt_count' => $ this-> getSummaryCount (),
            'Tổng phụ' => isset ($ tổng ['tổng phụ'])
                ? $ this-> checkoutHelper-> formatprice ($ totals ['tổng phụ'] -> getValue ())
                : 0,
            'subtotal_value' => isset ($ tổng số ['tổng phụ'])
                ? $ priceHelper-> tệ ($ tổng số ['tổng phụ'] -> getValue (), đúng, sai)
                : '',
            'ossible_onepage_checkout '=> $ this-> isPossibleOnepageCheckout (),
            'mục' => $ this-> getRecentItems (),
            'Extra_ilities' => $ this-> layout-> createBlock ('Magento \ Catalog \ Block \ ShortcutButtons') -> toHtml (),
            'isGuestCheckout ALLowed' => $ this-> isGuestCheckout ALLowed (),
        ];
    }

Ở đây tôi đã thêm một tham số giỏ hàng mới " subtotal_value " vì " tổng phụ " sẽ trả về khoảng thời gian chứa giá và nó sẽ hiển thị dưới dạng văn bản bằng cách sử dụng KO. Tại đây, bạn phải trực tiếp sử dụng " Đối tượng quản lý đối tượng ", vì bạn sẽ không thể đưa các phụ thuộc vào " __construct ".

LƯU Ý, có một vài ngoại lệ khi chúng tôi có thể cần sử dụng " Sơ đồ quản lý đối tượng " trực tiếp. Trong trường hợp của chúng tôi, nó là khả năng tương thích ngược của nhà xây dựng.
Đối tượng ngoại lệ

  1. Tiếp theo, sao chép chủ đề mặc định magento " /cart/minicart.phtml " vào chủ đề của bạn và thêm mã KO.

    ko văn bản: getCartParam ('subtotal_value')


0

Xác định một khối trong bố cục của bạn trong đó lớp được đánh dấu là "Magento \ Checkout \ Block \ Cart \ Totals"

<block class="Magento\Checkout\Block\Cart\Totals" name="quote.print.totals" as="quote.print.totals" after="checkout.cart" 
            template="MyNamespace_PrintCart::totals.phtml"/>

Sau đó, trong .phtml bạn có thể có mã bên dưới

<?php 
$totals = $block->getTotals() ;
?>
<table class="data table totals">
    <tbody>
        <?php foreach($totals as $key => $total) :?>
            <?php if(!empty($total->getValue())) :?>
                <tr>
                    <td><?= $total->getTitle()->getText() ?></th>
                    <td>
                        <span class="price"><?= $this->helper('Magento\Framework\Pricing\Helper\Data')->currency(number_format($total->getValue(),2),true,false) ?></span>                    
                    </td>
                </tr>
            <?php endif ?>
        <?php endforeach ?>
    </tbody>
    </table>

Sản lượng dự kiến

nhập mô tả hình ảnh ở đây

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.