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の値を返します。
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);
?>

ubuntuの私のlocalhost xampで完全に動作しましたが、$ quote = $ block-> getTotalsCache(); テストサーバーlinux fedoraで動作しない
Kumar A.

すでにLinuxサーバーで動作しています。競合やその他のエラーがあると思います。
Rakesh Jesadiya 2016

私はもっ​​と複雑になり、$ block-> getTotalsCache();を見つけました。キャッシュが無効になっている場合にのみ機能します。キャッシュを有効にしてこれを確認しましたか?鉱山はMagento2.1.0
Kumar A.

1
このような割引額を取得するにはどうすればよいですか?
ディーバンバブ2016

@KumarAbhinav、キャッシュを有効にした後で動的価格を取得するには、<span data-bind = "html:getCartParam( 'subtotal')"> </ span>を保持してください。
Rakesh Jesadiya 2016

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')により、通常は<span ="price"></span>タグが原因で小計が正しく印刷されないhtmlメソッドでをレンダリングする問題が解決されました


5

この上記のコードはページの読み込みで機能しますが、Knockout JSを使用しているため、カートに追加されたmagento2 ajaxでは機能しません。

そのために使用する必要があります-

  1. モジュールのmagentoクラス「\ Magento \ Checkout \ CustomerData \ Cart」をオーバーライドし、メソッド「getSectionData」 を拡張します
    パブリック関数getSectionData()
    {
        $ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance(); // Object Managerのインスタンス
        $ priceHelper = $ objectManager-> create( 'Magento \ Framework \ Pricing \ Helper \ Data'); //料金ヘルパーのインスタンス

        $ totals = $ this-> getQuote()-> getTotals();
        戻る[
            'summary_count' => $ this-> getSummaryCount()、
            '小計' => isset($ totals ['小計'])
                ?$ 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」は価格コンテナのスパンを返し、KOを使用してTEXTとして表示されるため、ここに新しいカートパラメータ「subtotal_value」を追加しました。ここでは、「__construct」に依存関係を注入できないため、「Object Manager Instance」を直接使用する必要があります。

注、「Object Manager Instance」を直接使用する必要がある例外はほとんどありません。私たちの場合、それはコンストラクタの後方互換性です。
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>

期待される出力

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.