Magento 2 Dapatkan Total Penawaran Keranjang di minicart.phtml


10

Saya mencoba mendapatkan total kutipan keranjang di minicart.phtml, tetapi saya tidak beruntung. Saya menyuntikkan Magento \ Checkout \ Model \ Cart.

Ini kode saya:

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

Setelah saya menjalankan kode itu, minicart rusak dan hilang sama sekali dari frontend.

Terima kasih!


Bisakah Anda berbagi informasi lebih lanjut?
Sohel Rana

Hai Tampaknya tidak berfungsi setelah pemutakhiran ke 2.1 hanya mengembalikan data ketika di halaman cart / checkout, halaman lain mengembalikan 0 nilai.
Frii Zuurikas

Jawaban:


17

Anda harus tetap di bawah baris dalam file minicart.phtml Anda untuk mendapatkan subtotal yang diperbarui,

Baris di bawah ini adalah workig untuk semua kasus jika cache diaktifkan berfungsi dengan baik,

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

Untuk mendapatkan nilai grandtotal, tarif pengiriman,

Anda bisa mendapatkan GrandTotal, subtotal dan tarif pengiriman untuk penawaran saat ini menggunakan kode di bawah ini dalam file minicart.phtml, Tetapi ketika cache diaktifkan pada saat itu tidak memperbarui harga ketika Anda menambahkan produk baru menggunakan metode di bawah ini.

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

Ia bekerja dengan sempurna di localhost xamp saya di ubuntu, tetapi $ quote = $ block-> getTotalsCache (); tidak bekerja pada server uji linux fedora
Kumar A.

Sudah bekerja di server linux, saya pikir Anda memiliki beberapa konflik atau kesalahan lainnya.
Rakesh Jesadiya

Saya menjadi lebih terlibat dan menemukan $ block-> getTotalsCache (); hanya berfungsi ketika cache dinonaktifkan. Sudahkah Anda memeriksanya dengan Cache Diaktifkan? Milik saya adalah Magento2.1.0
Kumar A.

1
Bagaimana cara mendapatkan jumlah diskon seperti ini?
Deeban Babu

@KumarAbhinav, harap tetap <span data-bind = "html: getCartParam ('subtotal')"> </span> untuk mendapatkan harga dinamis setelah cache diaktifkan.
Rakesh Jesadiya

8

Kami memiliki pertanyaan serupa dari seorang klien. di mana ia ingin menunjukkan "[kuantitas] item [subtotal]" di blok kereta gaya daripada ikon kereta bawaan di minicart.

Kami menemukan pertanyaan ini di sini tetapi tidak menyukai jawaban di mana kami perlu memperluas \Magento\Checkout\CustomerData\Cartkelas hanya untuk membuat html dengan benar

ini adalah kode cara kami memperbaikinya dalam templat:

<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>

Sepertinya Anda juga dapat menggunakan pengikatan data knockout.js standar dan tidak perlu menggunakan metode komentar KO gila 2. ini memecahkan masalah di mana rendering getCartParam('subtotal')dengan metode html di mana biasanya akan mencetak subtotal salah karena <span ="price"></span>tag


5

Kode di atas ini akan berfungsi pada pemuatan halaman, tetapi tidak akan berfungsi dengan magento2 ajax add to cart karena menggunakan Knockout JS sekarang.

Untuk itu Anda harus menggunakan -

  1. Timpa kelas magento " \ Magento \ Checkout \ CustomerData \ Cart " di modul Anda dan perluas metode " getSectionData "
    fungsi publik getSectionData ()
    {
        $ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); // Instance of Object Manager
        $ priceHelper = $ objectManager-> create ('Magento \ Framework \ Pricing \ Helper \ Data'); // Contoh Penolong Harga

        $ total = $ this-> getQuote () -> getTotals ();
        kembali [
            'summary_count' => $ this-> getSummaryCount (),
            'subtotal' => isset ($ total ['subtotal'])
                ? $ this-> checkoutHelper-> formatPrice ($ total ['subtotal'] -> getValue ())
                : 0,
            'subtotal_value' => isset ($ total ['subtotal'])
                ? $ priceHelper-> currency ($ total ['subtotal'] -> getValue (), true, false)
                : '',
            'possible_onepage_checkout' => $ this-> isPossibleOnepageCheckout (),
            'items' => $ this-> getRecentItems (),
            'extra_actions' => $ this-> layout-> createBlock ('Magento \ Catalogue \ Block \ ShortcutButtons') -> toHtml (),
            'isGuestCheckoutAllowed' => $ this-> isGuestCheckoutAllowed (),
        ];
    }

Di sini saya telah menambahkan parameter keranjang baru " subtotal_value " sebagai " subtotal " akan mengembalikan rentang harga kontainer dan akan ditampilkan sebagai TEXT menggunakan KO. Di sini Anda harus menggunakan " Instance Manager Instance " secara langsung, karena Anda tidak dapat menyuntikkan dependensi ke " __construct ".

CATATAN, ada beberapa pengecualian di mana kita mungkin perlu menggunakan " Instance Object Manager " secara langsung. Dalam kasus kami ini adalah kompatibilitas mundur konstruktor.
Pengecualian ObjectManager

  1. Selanjutnya, salin tema default magento " /art/minicart.phtml " ke tema Anda dan tambahkan kode KO.

    ko teks: getCartParam ('subtotal_value')


0

Tentukan blok di tata letak Anda di mana kelas ditandai sebagai "Magento \ Checkout \ Block \ Cart \ Total"

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

Kemudian dalam .phtml Anda dapat memiliki kode di bawah ini

<?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>

Output yang Diharapkan

masukkan deskripsi gambar di sini

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.