Magento 2 Holen Sie sich Cart Quote Total in minicart.phtml

10

Ich versuche, die Gesamtzahl der Warenkörbe in minicart.phtml zu ermitteln, habe aber kein Glück. Ich injiziere Magento \ Checkout \ Model \ Cart.

Hier ist mein Code:

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

Nachdem ich diesen Code ausgeführt habe, bricht der Minicart und verschwindet vollständig aus dem Frontend.

Vielen Dank!

Paul
quelle
Können Sie weitere Informationen teilen?
Sohel Rana
Hei. Scheint nach dem Update auf 2.1 nicht zu funktionieren. Es werden nur Daten zurückgegeben, wenn sich auf der Warenkorb- / Checkout-Seite andere Seiten 0 Werte zurückgeben.
Frii Zuurikas

Antworten:

16

Sie müssen nur in Ihrer minicart.phtml-Datei unter der Zeile bleiben, um die Zwischensumme zu aktualisieren.

Diese folgende Zeile funktioniert in allen Fällen, wenn der Cache aktiviert ist.

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

Für den Wert der Gesamtsumme, Versandkosten,

Sie können die Gesamt-, Zwischensummen- und Versandkosten für das aktuelle Angebot mit dem folgenden Code in der Datei minicart.phtml abrufen. Wenn der Cache zu diesem Zeitpunkt aktiviert ist, aktualisieren Sie den Preis nicht, wenn Sie ein neues Produkt mit der folgenden Methode hinzufügen.

<?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);
?>
Rakesh Jesadiya
quelle
Es funktionierte perfekt auf meinem localhost xamp unter Ubuntu, aber $ quote = $ block-> getTotalsCache (); funktioniert nicht auf Testserver Linux Fedora
Kumar A.
Es funktioniert bereits auf einem Linux-Server. Ich denke, Sie haben einen Konflikt oder einen anderen Fehler.
Rakesh Jesadiya
Ich habe mich mehr engagiert und finde $ block-> getTotalsCache (); funktioniert nur, wenn der Cache deaktiviert ist. Haben Sie dies mit aktiviertem Cache überprüft? Meins ist Magento2.1.0
Kumar A.
1
Wie bekomme ich einen solchen Rabattbetrag?
Deeban Babu
@KumarAbhinav, bitte behalten Sie <span data-bind = "html: getCartParam ('Zwischensumme')"> </ span> bei, um nach der Cache-Aktivierung einen dynamischen Preis zu erhalten.
Rakesh Jesadiya
8

Wir hatten eine ähnliche Frage von einem Kunden. wo er "[Menge] Artikel [Zwischensumme]" in einem gestalteten Warenkorbblock anstelle des Standard-Warenkorbsymbols im Minicart anzeigen wollte.

Wir haben diese Frage hier gefunden, aber die Antwort, bei der wir die \Magento\Checkout\CustomerData\CartKlasse erweitern mussten, um etwas HTML korrekt zu rendern, hat uns nicht gefallen

Dies ist der Code, wie wir ihn in der Vorlage behoben haben:

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

Es scheint, als könnten Sie auch die Standard-Datenbindung von knockout.js verwenden und müssen nicht die verrückte Magento 2-Knockout-Kommentarmethode verwenden. Dies löste das Problem beim Rendern getCartParam('subtotal')mit der HTML-Methode, bei der normalerweise die Zwischensumme aufgrund des <span ="price"></span>Tags falsch gedruckt wurde

Pascal Wientjes
quelle
5

Dieser obige Code funktioniert beim Laden der Seite, funktioniert jedoch nicht mit magento2 ajax add to cart, da jetzt Knockout JS verwendet wird.

Dafür sollten Sie verwenden -

  1. Überschreiben Sie die Magento-Klasse " \ Magento \ Checkout \ CustomerData \ Cart " in Ihrem Modul und erweitern Sie die Methode " getSectionData ".
    öffentliche Funktion getSectionData ()
    {
        $ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); // Instanz des Objektmanagers
        $ priceHelper = $ objectManager-> create ('Magento \ Framework \ Pricing \ Helper \ Data'); // Instanz von Pricing Helper

        $ totals = $ this-> getQuote () -> getTotals ();
        Rückkehr [
            'summary_count' => $ this-> getSummaryCount (),
            'Zwischensumme' => isset ($ totals ['Zwischensumme'])
                ? $ this-> checkoutHelper-> formatPrice ($ totals ['Zwischensumme'] -> getValue ())
                : 0,
            'subtotal_value' => isset ($ totals ['subtotal'])
                ? $ priceHelper-> Währung ($ totals ['Zwischensumme'] -> getValue (), true, false)
                : '',
            'simply_onepage_checkout' => $ this-> isPossibleOnepageCheckout (),
            'items' => $ this-> getRecentItems (),
            'extra_actions' => $ this-> layout-> createBlock ('Magento \ Catalog \ Block \ ShortcutButtons') -> toHtml (),
            'isGuestCheckoutAllowed' => $ this-> isGuestCheckoutAllowed (),
        ];
    }}

Hier habe ich einen neuen Wagen param „hinzugefügt subtotal_value “ als „ Zwischensumme “ kehrt der Preisspanne Behälter und es wird als TEXT mit KO angezeigt werden soll . Hier müssen Sie " Object Manager Instance " direkt verwenden, da Sie keine Abhängigkeiten in das " __construct " einfügen können .

HINWEIS: Es gibt nur wenige Ausnahmen, in denen wir möglicherweise " Object Manager-Instanz " direkt verwenden müssen. In unserem Fall ist es die Abwärtskompatibilität des Konstruktors.
ObjectManager-Ausnahme

  1. Kopieren Sie als Nächstes das Magento-Standarddesign " /cart/minicart.phtml " in Ihr Design und fügen Sie die KO-Codes hinzu.

    ko text: getCartParam ('subtotal_value')

Sandipan S.
quelle
0

Definieren Sie in Ihrem Layout einen Block, in dessen Klasse "Magento \ Checkout \ Block \ Cart \ Totals" markiert ist.

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

Dann können Sie in .phtml den folgenden Code haben

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

Erwartete Ausgabe

Geben Sie hier die Bildbeschreibung ein

Suman-PHP4U
quelle