我试图在minicart.phtml中获得购物车报价总额,但我没有运气。我正在注入Magento \ Checkout \ Model \ Cart。
这是我的代码:
$this->cart = $cart;
$cartQuote= $this->cart->getQuote()->getData();
echo $cartQuote['base_grand_total'];
在我运行了该代码之后,微型购物车会破裂,并且完全从前端消失。
谢谢!
我试图在minicart.phtml中获得购物车报价总额,但我没有运气。我正在注入Magento \ Checkout \ Model \ Cart。
这是我的代码:
$this->cart = $cart;
$cartQuote= $this->cart->getQuote()->getData();
echo $cartQuote['base_grand_total'];
在我运行了该代码之后,微型购物车会破裂,并且完全从前端消失。
谢谢!
Answers:
您只需要保持在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);
?>
客户也有类似的问题。他想在样式化的购物车栏中显示“ [数量]项目[小计]”,而不是微型购物车中的默认购物车图标。
我们在这里找到了这个问题,但不喜欢我们需要扩展\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>
标签通常会错误地打印小计的问题
上面的代码适用于页面加载,但不适用于magento2 ajax添加到购物车,因为它现在使用Knockout JS。
为此,您应该使用-
公共函数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异常
接下来,将magento默认主题“ /cart/minicart.phtml ” 复制到您的主题并添加KO代码。
文字:getCartParam('subtotal_value')
在布局中定义一个标记为“ 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>
预期产量