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

subtotal을 업데이트하려면 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);
?>

우분투의 로컬 호스트 xamp에서 완벽하게 작동했지만 $ quote = $ block-> getTotalsCache (); 테스트 서버에서 작동하지 않음 Linux fedora
Kumar A.

이미 리눅스 서버에서 작동하고 있습니다. 충돌이나 다른 오류가 있다고 생각합니다.
Rakesh Jesadiya

더 관여하여 $ block-> getTotalsCache (); 캐시가 비활성화 된 경우에만 작동합니다. 캐시 사용으로이를 확인 했습니까? 내 Magento2.1.0입니다
Kumar A.

1
이 같은 할인 금액을 얻는 방법?
Deeban Babu

@KumarAbhinav, 캐시 사용 후 동적 가격을 얻으려면 <span data-bind = "html : getCartParam ( 'subtotal')"> </ span>을 유지하십시오.
Rakesh Jesadiya

8

우리는 클라이언트로부터 비슷한 질문을 받았습니다. 여기서 미니 카트의 기본 장바구니 아이콘 대신 스타일이있는 장바구니 블록에 "[quantity] item [subtotal]"을 표시하려고했습니다.

우리는 여기서이 질문을 찾았지만 \Magento\Checkout\CustomerData\CartHTML을 올바르게 렌더링 하기 위해 클래스 를 확장 해야하는 대답을 좋아하지 않았습니다.

이것은 템플릿에서 수정 한 코드입니다.

<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 데이터 바인딩을 사용할 수도 있고 미친 마 젠토 2 녹아웃 주석 방법을 사용하지 않아도됩니다. 이것은 태그 getCartParam('subtotal')로 인해 부분 합계를 잘못 인쇄하는 html 메소드 로 렌더링하는 문제를 해결했습니다.<span ="price"></span>


5

위의 코드는 페이지로드에서 작동하지만 지금은 Knockout JS를 사용하므로 magento2 ajax add to cart에서는 작동하지 않습니다.

이를 위해 당신은 사용해야합니다-

  1. 모듈에서 " \ Magento \ Checkout \ CustomerData \ Cart " magento 클래스를 대체하고 " getSectionData " 메소드를 확장하십시오.
    공용 함수 getSectionData ()
    {
        $ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); // 객체 관리자 인스턴스
        $ priceHelper = $ objectManager-> 만들기 ( 'Magento \ Framework \ Pricing \ Helper \ Data'); // 가격 도우미 인스턴스

        $ totals = $ this-> getQuote ()-> getTotals ();
        반환 [
            'summary_count'=> $ this-> getSummaryCount (),
            '소계'=> 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_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.