Magento 2 Uzyskaj wycenę koszyka Razem w minicart.phtml


10

Próbuję uzyskać całkowitą wycenę koszyka w minicart.phtml, ale nie mam szczęścia. Wstrzykuję Magento \ Kasa \ Model \ Koszyk.

Oto mój kod:

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

Po uruchomieniu tego kodu minikart łamie się i całkowicie znika z interfejsu.

Dzięki!


Czy możesz udostępnić więcej informacji?
Sohel Rana

On ja. Wygląda na to, że nie działa po aktualizacji do 2.1, zwraca tylko dane, gdy znajduje się na stronie koszyka / kasy, inne strony zwracają 0 wartości.
Frii Zuurikas

Odpowiedzi:


17

Musisz tylko zachować poniżej linii w pliku minicart.phtml, aby zaktualizować sumę częściową,

Ta linia poniżej działa we wszystkich przypadkach, jeśli pamięć podręczna jest włączona,

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

Aby uzyskać wartość grandtotal, stawkę za wysyłkę,

Możesz uzyskać GrandTotal, sumę częściową i stawkę za bieżącą wycenę, używając poniższego kodu w pliku minicart.phtml, ale gdy pamięć podręczna jest włączona w tym czasie, nie aktualizuj ceny po dodaniu nowego produktu za pomocą poniższej metody.

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

Działa idealnie na moim Xhost localhost na Ubuntu, ale $ quote = $ block-> getTotalsCache (); nie działa na serwerze testowym linux fedora
Kumar A.

Działa już na serwerze Linux, myślę, że masz jakiś konflikt lub inny błąd.
Rakesh Jesadiya

Zaangażowałem się bardziej i znajduję $ block-> getTotalsCache (); działa tylko przy wyłączonej pamięci podręcznej. Czy sprawdziłeś to z włączoną pamięcią podręczną? Mój to Magento 2.1.0
Kumar A.

1
Jak uzyskać taką zniżkę?
Deeban Babu,

@KumarAbhinav, proszę zachować <span data-bind = "html: getCartParam ('subtotal')"> </span>, aby uzyskać dynamiczną cenę po włączeniu pamięci podręcznej.
Rakesh Jesadiya

8

Otrzymaliśmy podobne pytanie od klienta. gdzie chciał pokazać „[ilość] element [suma częściowa]” w stylu bloku wózka zamiast domyślnej ikony wózka w minicart.

Znaleźliśmy to pytanie tutaj, ale nie podobała nam się odpowiedź, w której musieliśmy rozszerzyć \Magento\Checkout\CustomerData\Cartklasę tylko po to, aby poprawnie renderować część HTML

to jest kod, w jaki sposób naprawiliśmy to w szablonie:

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

Wygląda na to, że możesz także użyć standardowego wiązania danych knockout.js i nie musisz używać szalonej metody komentowania knockout w magento 2. rozwiązało to problem polegający na renderowaniu za getCartParam('subtotal')pomocą metody html, w której normalnie wydrukowałby niepoprawnie sumę częściową ze względu na <span ="price"></span>znacznik


5

Powyższy kod będzie działał przy ładowaniu strony, ale nie będzie działał z magento2 ajax add do koszyka, ponieważ teraz używa Knockout JS.

Do tego należy użyć -

  1. Zastąp klasę magento „ \ Magento \ Checkout \ CustomerData \ Cart ” w swoim module i rozszerz metodę „ getSectionData
    funkcja publiczna getSectionData ()
    {
        $ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); // Instancja menedżera obiektów
        $ priceHelper = $ objectManager-> create ('Magento \ Framework \ Price \ Helper \ Data'); // Instancja cennika pomocnika

        $ totals = $ this-> getQuote () -> getTotals ();
        powrót [
            'summary_count' => $ this-> getSummaryCount (),
            'subtotal' => isset ($ totals ['subtotal'])
                ? $ this-> checkoutHelper-> formatPrice ($ totals ['suma częściowa] -> getValue ())
                : 0,
            'subtotal_value' => isset ($ totals ['subtotal'])
                ? $ priceHelper-> waluta ($ sumy ['suma częściowa] -> getValue (), prawda, fałsz)
                : '',
            'ossible_onepage_checkout '=> $ this-> isPossibleOnepageCheckout (),
            „items” => $ this-> getRecentItems (),
            'extra_actions' => $ this-> layout-> createBlock ('Magento \ Catalog \ Block \ ShortcutButtons') -> toHtml (),
            'isGuestCheckoutAllowed' => $ this-> isGuestCheckoutAllowed (),
        ];
    }

Tutaj dodałem nowy parametr koszyka „ subtotal_value ”, ponieważ „ subtotal ” zwróci rozpiętość kontenera cen i wyświetli się jako TEKST za pomocą KO. Tutaj musisz użyć bezpośrednio „ Object Manager Instance ”, ponieważ nie będziesz w stanie wstrzyknąć zależności do „ __construct ”.

UWAGA, istnieje kilka wyjątków, w których może być konieczne bezpośrednie użycie „ wystąpienia menedżera obiektów ”. W naszym przypadku jest to wsteczna kompatybilność konstruktora.
Wyjątek ObjectManager

  1. Następnie skopiuj domyślny motyw magento „ /cart/minicart.phtml ” do swojego motywu i dodaj kody KO.

    ko text: getCartParam („wartość sumy częściowej”)


0

Zdefiniuj blok w swoim układzie, w którym klasa oznaczona jako „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"/>

Następnie w .phtml możesz mieć poniżej kodu

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

Oczekiwany wynik

wprowadź opis zdjęcia tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.