Magento 2 Отримайте котирування на кошик Всього в minicart.phtml


10

Я намагаюся отримати загальну котировку кошика в minicart.phtml, але мені не пощастило. Я впорскую Magento \ Checkout \ Model \ Cart.

Ось мій код:

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

Після того, як я запускаю цей код, мінікарт розривається і повністю зникає з фронту.

Дякую!


Чи можете ви поділитися додатковою інформацією?
Сохель Рана

Хей. Здається, не працює після оновлення до 2.1, він повертає дані лише в кошику / сторінці оформлення замовлення, інші сторінки повертають 0 значень.
Frii Zuurikas

Відповіді:


17

Вам потрібно просто тримати нижче рядка у файлі minicart.phtml, щоб отримати оновлений підсумковий номер,

Цей рядок внизу є важким для всіх випадків, якщо кеш увімкнено його функціонування,

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

Щоб отримати величину грантового, тарифу доставки,

Ви можете отримати GrandTotal, підсумковий тариф та тариф на доставку за поточною котируванням, використовуючи код нижче у файлі minicart.phtml, але коли ввімкнено кеш на той час, не оновлюйте ціну, додаючи новий продукт, використовуючи метод нижче.

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

Він прекрасно працював на моєму локальному хості xamp на ubuntu, але $ quo = $ block-> getTotalsCache (); не працює на тестовому сервері Linux Linux fedora
Kumar A.

Він вже працює на сервері Linux, я думаю, у вас є конфлікт чи інша помилка.
Ракеш Єсадія

Я більше втягнувся і знайшов $ block-> getTotalsCache (); працює лише тоді, коли кеш вимкнено. Ви перевірили це за допомогою Cache Enabled? Міна - Magento2.1.0
Кумар А.

1
Як отримати суму такої знижки?
Дібан Бабу

@KumarAbhinav, будь ласка, зберігайте <span data-bind = "html: getCartParam ('subtotal')"> </span>, щоб отримати динамічну ціну після включення кешу.
Ракеш Єсадія

8

У нас було подібне запитання від клієнта. де він хотів показати "[кількість] елемента [підсумковий]" у стильовому блоці кошика замість значка кошика за замовчуванням у міні-картці.

Ми знайшли це питання тут, але нам не сподобалась відповідь, де нам потрібно розширити \Magento\Checkout\CustomerData\Cartклас, щоб правильно віддати трохи html

це код, як ми його зафіксували в шаблоні:

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

Схоже, ви також можете використовувати стандартне прив'язування даних knockout.js, і вам не потрібно використовувати метод божевільного коментаря з нокаутом Magento 2. це вирішило проблему, коли візуалізація getCartParam('subtotal')з методом html, де він зазвичай друкував підсумковий помилково через <span ="price"></span>тег


5

Цей вище код буде працювати при завантаженні сторінки, але не працюватиме з magento2 ajax додати до кошика, оскільки він зараз використовує Knockout JS.

Для цього вам слід скористатися -

  1. Замініть клас magento " \ Magento \ Checkout \ CustomerData \ Cart " у своєму модулі та розгорніть метод " getSectionData "
    публічна функція getSectionData ()
    {
        $ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); // Екземпляр диспетчера об'єктів
        $ priceHelper = $ objectManager-> create ('Magento \ Framework \ Ціноутворення \ Helper \ Data'); // Момент помічника цін

        $ totals = $ this-> getQuote () -> getTotals ();
        повернути [
            'sum_count' => $ this-> getSummaryCount (),
            'subtotal' => isset ($ totals ['subtotal'])
                ? $ this-> checkoutHelper-> formatPrice ($ totals ['subtotal'] -> getValue ())
                : 0,
            'subtotal_value' => isset ($ totals ['subtotal'])
                ? $ priceHelper-> валюта ($ totals ['subtotal'] -> getValue (), true, false)
                : '',
            'possible_onepage_checkout' => $ this-> isPossibleOnepageCheckout (),
            'items' => $ this-> getRecentItems (),
            'extra_action' => $ this-> layout-> createBlock ('Magento \ Catalog \ Block \ ShortcutButtons') -> toHtml (),
            'isGuestCheckoutAllowed' => $ this-> isGuestCheckoutAllowed (),
        ];
    }

Тут я додав новий параметр кошика " subtotal_value ", оскільки " subtotal " поверне проміжок контейнера цін і він відобразиться як TEXT за допомогою KO. Тут ви повинні використовувати " Опцію диспетчера об'єктів " безпосередньо, оскільки ви не зможете вводити залежності до " __construct ".

ПРИМІТКА. Є кілька винятків, де нам може знадобитися безпосередньо використовувати " Екземпляр диспетчера об'єктів ". У нашому випадку це зворотна сумісність конструктора.
Виняток ObjectManager

  1. Далі скопіюйте тему magento за замовчуванням " /cart/minicart.phtml " у свою тему та додайте коди KO.

    ko текст: getCartParam ('subtotal_value')


0

Визначте блок у своєму макеті, у якому клас позначений як "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"/>

Тоді в .phtml ви можете мати код нижче

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

Очікуваний вихід

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.