Magento 2 Ottieni il preventivo del carrello totale in minicart.phtml


10

Sto cercando di ottenere il totale del preventivo del carrello in minicart.phtml, ma non ho fortuna. Sto iniettando Magento \ Checkout \ Model \ Cart.

Ecco il mio codice:

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

Dopo aver eseguito quel codice, la minicart si rompe e scompare totalmente dal frontend.

Grazie!


Puoi condividere maggiori informazioni?
Sohel Rana,

Lui io. Sembra non funzionare dopo l'aggiornamento alla 2.1 restituisce i dati solo nella pagina carrello / checkout, altre pagine restituiscono 0 valori.
Frii Zuurikas,

Risposte:


17

Devi solo mantenere la riga sotto nel tuo file minicart.phtml per ottenere il totale parziale aggiornato,

Questa riga di seguito è valida per tutti i casi se la cache funziona correttamente,

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

Per ottenere valore di grandtotal, tariffa di spedizione,

Puoi ottenere GrandTotal, subtotali e tariffe di spedizione per il preventivo corrente utilizzando il codice seguente nel file minicart.phtml, ma quando la cache è abilitata in quel momento non aggiorna il prezzo quando aggiungi un nuovo prodotto usando il metodo seguente.

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

Ha funzionato perfettamente sul mio localamp xamp su Ubuntu, ma $ quote = $ block-> getTotalsCache (); non funziona sul server di prova Linux Fedora
Kumar A.

Funziona già su server Linux, penso che tu abbia qualche conflitto o qualche altro errore.
Rakesh Jesadiya,

Sono stato più coinvolto e ho trovato $ block-> getTotalsCache (); funziona solo quando la cache è disabilitata. Hai controllato questo con la cache abilitata? Il mio è Magento2.1.0
Kumar A.

1
Come ottenere un importo di sconto come questo?
Deeban Babu,

@KumarAbhinav, ti preghiamo di mantenere <span data-bind = "html: getCartParam ('subtotal')"> </span> per ottenere il prezzo dinamico dopo l'abilitazione della cache.
Rakesh Jesadiya,

8

Abbiamo avuto una domanda simile da un cliente. dove voleva mostrare "[quantità] articolo [totale parziale]" in un blocco del carrello con stile invece dell'icona del carrello predefinita nella minicart.

Abbiamo trovato questa domanda qui ma non ci è piaciuta la risposta in cui dovevamo estendere la \Magento\Checkout\CustomerData\Cartclasse solo per rendere correttamente un po 'di HTML

questo è il codice come l'abbiamo risolto nel modello:

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

Sembra che tu possa anche usare il binding di dati knockout.js standard e non perse bisogno di usare il metodo del commento knockout pazzo di magento 2. questo ha risolto il problema di rendering getCartParam('subtotal')con il metodo html in cui normalmente il subtotale veniva stampato in modo errato a causa del <span ="price"></span>tag


5

Questo codice sopra funzionerà al caricamento della pagina, ma non funzionerà con magento2 ajax aggiungi al carrello in quanto utilizza Knockout JS ora.

Per questo dovresti usare -

  1. Sostituisci la classe magento " \ Magento \ Checkout \ CustomerData \ Cart " nel tuo modulo ed estendi il metodo " getSectionData "
    funzione pubblica getSectionData ()
    {
        $ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); // Istanza di Object Manager
        $ priceHelper = $ objectManager-> create ('Magento \ Framework \ Pricing \ Helper \ Data'); // Istanza dell'assistente ai prezzi

        $ totals = $ this-> getQuote () -> getTotals ();
        ritorno [
            'summary_count' => $ this-> getSummaryCount (),
            'subtotal' => isset ($ totali ['subtotale'])
                ? $ This-> checkoutHelper-> formatprice ($ totali [ 'subtotale'] -> getValue ())
                : 0,
            'subtotal_value' => isset ($ totali ['subtotale'])
                ? $ PriceHelper-> valute ($ totali [ 'subtotale'] -> getValue (), vero, falso)
                : '',
            'possible_onepage_checkout' => $ this-> isPossibleOnepageCheckout (),
            'items' => $ this-> getRecentItems (),
            'extra_actions' => $ this-> layout-> createBlock ('Magento \ Catalog \ Block \ ShortcutButtons') -> toHtml (),
            'isGuestCheckoutAllowed' => $ this-> isGuestCheckoutAllowed (),
        ];
    }

Qui ho aggiunto un nuovo parametro del carrello " subtotal_value " poiché il " subtotale " restituirà lo span del contenitore dei prezzi e verrà visualizzato come TESTO utilizzando KO. Qui devi usare direttamente " Istanza gestore oggetti ", poiché non sarai in grado di iniettare dipendenze in " __construct ".

NOTA, ci sono alcune eccezioni in cui potrebbe essere necessario utilizzare direttamente " Istanza di gestione oggetti ". Nel nostro caso si tratta di compatibilità con le versioni precedenti del costruttore.
Eccezione ObjectManager

  1. Quindi, copia il tema predefinito magento " /cart/minicart.phtml " sul tuo tema e aggiungi i codici KO.

    ko text: getCartParam ('subtotal_value')


0

Definisci un blocco nel layout in cui la classe contrassegnata come "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"/>

Quindi in .phtml puoi avere il codice seguente

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

Uscita prevista

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.