Magento 2 minicart.phtml में कार्ट कोट कुल प्राप्त करें


10

मैं minicart.phtml में गाड़ी की बोली कुल प्राप्त करने की कोशिश कर रहा हूं, लेकिन मुझे कोई फायदा नहीं हो रहा है। मैं Magento \ Checkout \ Model \ Cart इंजेक्षन कर रहा हूँ।

यहाँ मेरा कोड है:

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

जब मैं उस कोड को चलाता हूं, तो मिनीकार्ट टूट जाता है और सीमांत से पूरी तरह से गायब हो जाता है।

धन्यवाद!


क्या आप अधिक जानकारी साझा कर सकते हैं?
सोहेल राणा

हेई। 2.1 के अपडेट के बाद काम नहीं करने पर लगता है कि यह केवल कार्ट / चेकआउट पेज में डेटा लौटाता है, अन्य पेज 0 मान लौटा रहे हैं।
फ्रि ज़्यूरिकस

जवाबों:


17

आपको अपडेटेड सबटोटल प्राप्त करने के लिए बस अपनी minicart.phtml फ़ाइल में नीचे लाइन में रखना होगा,

यह नीचे की पंक्ति सभी मामलों के लिए कार्यशील है यदि कैश अपने काम करने में सक्षम है,

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

ग्रैंडोटल, शिपिंग रेट का मूल्य प्राप्त करने के लिए,

आप नीचे दिए गए कोड का उपयोग करके 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 पर मेरी लोकलहोस्ट xamp पर पूरी तरह से काम करता है, लेकिन $ बोली = $ ब्लॉक-> getTotalsCache (); टेस्ट सर्वर लाइनक्स फेडोरा पर काम नहीं कर रहा है
कुमार ए।

यह पहले से ही लिनक्स सर्वर पर काम कर रहा है, मुझे लगता है कि आपके पास कुछ संघर्ष या कुछ अन्य त्रुटि है।
राकेश जेसादिया

मैं अधिक शामिल हो गया और $ ब्लॉक ढूंढता हूं-> getTotalsCache (); कैश अक्षम होने पर ही काम करता है। क्या आपने इसे Cache Enabled से चेक किया है? मेरा है Magento2.1.0
कुमार ए।

1
इस तरह छूट राशि कैसे प्राप्त करें?
देबन बाबू

@KumarAbhinav, कैश सक्षम होने के बाद गतिशील मूल्य प्राप्त करने के लिए कृपया <span data-bind = "html: getCartParam ('सबटोटल')"> </ span> रखें।
राकेश जेसादिया

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>

ऐसा लगता है कि आप मानक नॉकआउट.जेएस डेटा बाइंडिंग का भी उपयोग कर सकते हैं और पागल मैगनेटो 2 नॉकआउट टिप्पणी पद्धति का उपयोग करने की आवश्यकता नहीं है। इसने इस समस्या को हल किया जहां getCartParam('subtotal')html विधि के साथ रेंडर करना जहां यह <span ="price"></span>टैग के कारण सामान्य रूप से सबटोटल को गलत तरीके से प्रिंट करेगा


5

यह उपर्युक्त कोड पेज लोड पर काम करेगा, लेकिन Magento2 ajax कार्ट में काम नहीं करेगा क्योंकि यह नॉकआउट JS का उपयोग करता है।

उसके लिए आपको उपयोग करना चाहिए -

  1. अपने मॉड्यूल में Magento वर्ग " \ Magento \ Checkout \ CustomerData \ Cart " को ओवरराइड करें और " getSDDD " विधि का विस्तार करें
    सार्वजनिक समारोह getSectionData ()
    {
        $ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); // वस्तु प्रबंधक का उदाहरण
        $ priceHelper = $ objectManager-> create ('Magento \ Framework \ Pricing \ Helper \ Data'); // मूल्य निर्धारण सहायक का उदाहरण

        $ योग = $ यह-> getQuote () -> getTotals ();
        वापसी [
            'सारांश_काउंट' => $ यह-> getSummaryCount (),
            'सबटोटल' => इस्सेट ($ योग ['सबटोटल'])
                ? $ This-> checkoutHelper-> formatPrice ($ योग [ 'उप-योग'] -> getValue ())
                : 0,
            'सबटोटल_वेल्यू' => इस्सेट ($ योग ['सबटोटल'])
                ? $ PriceHelper-> मुद्रा ($ योग [ 'उप-योग'] -> getValue (), सच है, गलत)
                : '',
            'possible_onepage_checkout' => $ यह-> isPossibleOnepageCheckout (),
            'आइटम' => $ यह-> getRecentItems (),
            'extra_actions' => $ यह-> लेआउट-> createBlock ('Magento \ कैटलॉग \ ब्लॉक \ शॉर्टकटबटन') -> tottml (),
            '.GuestCheckoutAllowed' => इस $ -> isGuestCheckoutAllowed (),
        ];
    }

यहाँ मैंने एक नया कार्ट परम " सबटोटल_वेल्यू " जोड़ा है क्योंकि " सबटोटल " प्राइस कंटेनर स्पान को लौटा देगा और यह कोए का उपयोग करके TEXT के रूप में प्रदर्शित होगा। यहां आपको सीधे " ऑब्जेक्ट मैनेजर इंस्टेंस " का उपयोग करना होगा , क्योंकि आप " __construct " पर निर्भरता को इंजेक्ट करने में सक्षम नहीं होंगे ।

ध्यान दें, कुछ अपवाद हैं जहां हमें सीधे " ऑब्जेक्ट मैनेजर इंस्टेंस " का उपयोग करने की आवश्यकता हो सकती है । हमारे मामले में यह कंस्ट्रक्टर की पिछड़ी संगतता है।
ObjectManager अपवाद

  1. इसके बाद, Magento के डिफ़ॉल्ट थीम "/ cart/minicart.phtml " को अपने विषय में कॉपी करें और KO कोड जोड़ें।

    को पाठ: getCartParam ('सबटोटल_वल्यू')


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>

अपेक्षित उत्पादन

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.