Magento 2 รับใบเสนอราคาตะกร้าสินค้าทั้งหมดใน minicart.phtml


10

ฉันกำลังพยายามที่จะรับใบเสนอราคาทั้งหมดใน minicart.phtml แต่ฉันไม่มีโชค ฉันกำลังฉีด Magento \ Checkout \ Model \ Cart

นี่คือรหัสของฉัน:

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

หลังจากที่ฉันเรียกใช้รหัสนั้น minicart จะแตกและหายไปจากส่วนหน้าโดยสิ้นเชิง

ขอบคุณ!


คุณสามารถแบ่งปันข้อมูลเพิ่มเติมได้หรือไม่
Sohel Rana

Hei ดูเหมือนว่าจะไม่ทำงานหลังจากอัปเดตเป็น 2.1 แต่จะส่งคืนข้อมูลเมื่ออยู่ในหน้ารถเข็น / เช็คเอาต์เท่านั้นหน้าอื่น ๆ จะคืนค่า 0
Frii Zuurikas

คำตอบ:


17

คุณต้องเก็บบรรทัดด้านล่างไว้ในไฟล์ minicart.phtml เพื่อรับผลรวมย่อยที่ได้รับการอัพเดท

บรรทัดด้านล่างนี้คือ workig สำหรับทุกกรณีหากแคชเปิดใช้งานได้ดี

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

มันทำงานได้อย่างสมบูรณ์แบบบน localhost xamp ของฉันบน Ubuntu แต่ $ quote = $ block-> getTotalsCache (); ไม่ทำงานบนเซิร์ฟเวอร์ทดสอบ linux fedora
Kumar A.

มันทำงานแล้วบนเซิร์ฟเวอร์ linux ฉันคิดว่าคุณมีข้อขัดแย้งหรือข้อผิดพลาดอื่น ๆ
Rakesh Jesadiya

ฉันมีส่วนร่วมมากขึ้นและค้นหา $ block-> getTotalsCache (); ทำงานเฉพาะเมื่อปิดการใช้งานแคช คุณตรวจสอบสิ่งนี้ด้วยการเปิดใช้งานแคชหรือไม่ Mine is Magento2.1.0
Kumar A.

1
วิธีรับจำนวนส่วนลดเช่นนี้
Deeban Babu

@KumarAbhinav โปรดเก็บ <span data-bind = "html: getCartParam ('ผลรวมย่อย')"> </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>

ดูเหมือนว่าคุณยังสามารถใช้การเชื่อมโยงข้อมูล knockout.js มาตรฐานและไม่จำเป็นต้องใช้วิธีการแสดงความคิดเห็นแบบ knockout วีโอไอพีที่บ้าคลั่ง วิธีนี้จะช่วยแก้ปัญหาการแสดงผล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 (); // อินสแตนซ์ของ Object Manager
        $ priceHelper = $ objectManager-> create ('Magento \ Framework \ Pricing \ Helper \ Data'); // อินสแตนซ์ของตัวช่วยกำหนดราคา

        $ totals = $ this-> getQuote () -> getTotals ();
        คืน [
            'summary_count' => $ this-> getSummaryCount (),
            'subtotal' => isset ($ ผลรวม ['ผลรวมย่อย'])
                ? $ this-> checkoutHelper-> formatPrice ($ ผลรวม [ 'ผลรวมย่อย'] -> getValue ())
                : 0
            'subtotal_value' => isset ($ ผลรวม ['ผลรวมย่อย'])
                ? $ priceHelper-> สกุลเงิน ($ ผลรวม [ 'ผลรวมย่อย'] -> getValue () จริงเท็จ)
                : '',
            'possible_onepage_checkout' => $ this-> isPossibleOnepageCheckout ()
            'items' => $ this-> getRecentItems ()
            'extra_actions' => $ this-> layout-> createBlock ('Magento \ Catalog \ Block \ ShortcutButtons') -> toHtml ()
            'isGuestCheckoutAllowed' '> $ this-> isGuestCheckoutAllowed ()
        ];
    }

ที่นี่ฉันได้เพิ่มพารามิเตอร์รถเข็นใหม่ " subtotal_value " เนื่องจาก "ผลรวมย่อย " จะส่งคืนช่วงราคาคอนเทนเนอร์และจะแสดงเป็น TEXT โดยใช้ KO ที่นี่คุณต้องใช้ " Object Manager Instance " โดยตรงเนื่องจากคุณจะไม่สามารถฉีดการพึ่งพา " __ โครงสร้าง "

หมายเหตุมีข้อยกเว้นเล็กน้อยที่เราอาจต้องใช้ " Object Manager Instance " โดยตรง ในกรณีของเรามันเป็นความเข้ากันได้ย้อนหลังของตัวสร้าง
ข้อยกเว้น ObjectManager

  1. ถัดไปคัดลอกชุดรูปแบบเริ่มต้นคุณภาพเยี่ยม " /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.