Magento 2在minicart.phtml中获取购物车报价总计


10

我试图在minicart.phtml中获得购物车报价总额,但我没有运气。我正在注入Magento \ Checkout \ Model \ Cart。

这是我的代码:

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

在我运行了该代码之后,微型购物车会破裂,并且完全从前端消失。

谢谢!


您可以分享更多信息吗?
Sohel Rana

喂 升级到2.1后似乎无法使用,它仅在购物车/结帐页面中返回数据,其他页面返回0值。
2016年

Answers:


17

您只需要保持在minicart.phtml文件中的行下方即可获取更新的小计,

如果启用了高速缓存,则以下行适用于所有情况,

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

为了获得总计,发货率的价值,

您可以使用minicart.phtml文件中的以下代码获取当前报价的GrandTotal,小计和运费,但是当启用缓存时,使用以下方法添加新产品时不会更新价格。

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

它在ubuntu上的localhost xamp上运行良好,但是$ quote = $ block-> getTotalsCache(); 在测试服务器linux fedora上无法正常工作
Kumar A.

它已经在Linux服务器上工作了,我认为您有一些冲突或其他错误。
Rakesh Jesadiya

我更多地参与其中,并找到$ block-> getTotalsCache();。仅在禁用缓存时有效。您是否已选中“启用缓存”?我的是Magento2.1.0
Kumar A.

1
如何获得这样的折扣金额?
Deeban Babu

@KumarAbhinav,请保留<span data-bind =“ html:getCartParam('subtotal')”> </ span>以在启用缓存后获得动态价格。
Rakesh Jesadiya

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>

似乎您也可以使用标准的kickout.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 \ Pricing \ Helper \ Data'); //定价助手的实例

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

在这里,我添加了一个新的购物车参数“ subtotal_value ”为“ 分类汇总 ”将返回的价格跨度容器,它会使用KO显示为文本。在这里,您必须直接使用“ 对象管理器实例 ”,因为您将无法将依赖项注入到“ __construct ”中。

注意,很少有例外,我们可能需要直接使用“ 对象管理器实例 ”。在我们的情况下,它是构造函数的向后兼容性。
ObjectManager异常

  1. 接下来,将magento默认主题“ /cart/minicart.phtml ” 复制到您的主题并添加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>

预期产量

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.