Magento 2 - कार्ट में सभी आइटम कैसे प्राप्त करें?


23

चेकआउट पृष्ठ पर ( chekout/cart) मैं कार्ट आइटम के आधार पर चेकआउट बटन यूआरएल गंतव्य को संपादित करना चाहता हूं ( link.phtml)।

मुझे कार्ट में सभी आइटम कैसे मिल सकते हैं? मैं एपीआई का उपयोग किए बिना ऐसा करना चाहता हूं। धन्यवाद।

जवाबों:


26

मैं प्रश्न का उत्तर दो भागों में दूंगा:

I. आपको चेकआउट URL कहां बदलना चाहिए?

में गंतव्य link.phtmlहै $block->getCheckoutUrl()। आपको कार्यक्षमता बदलने के लिए टेम्पलेट नहीं बदलना चाहिए, लेकिन Magento\Checkout\Block\Onepage\Linkइसके बजाय ब्लॉक को बदलना चाहिए। ऐसा करने के लिए वापसी मान को बदलने के लिए एक विधि के साथ एक प्लगइन बनाएं afterGetCheckoutUrl()

द्वितीय। कार्ट में सभी आइटम कैसे प्राप्त करें?

के रूप में Magento_Checkout और Magento_Quote में सेवा अनुबंध अभी तक आवश्यक तरीके प्रदान नहीं करते हैं, इसलिए हम कार्ट मॉडल का उपयोग करते हैं। अपने प्लगइन में इसे इस तरह इंजेक्ट करें:

public function __construct(\Magento\Checkout\Model\Cart $cart)
{
    $this->cart = $cart;
}

अब जब आपके पास गाड़ी तक पहुंच है, तो आप आइटम को कई तरीकों से पुनः प्राप्त कर सकते हैं, जो मूल रूप से Magento 1 के समान है :

  • $this->cart->getQuote()->getItemsCollection()

    वर्तमान उद्धरण से संबंधित सभी वस्तुओं के साथ एक उद्धरण आइटम संग्रह लौटाता है ।

  • $this->cart->getItems()

    यह ऊपर दी गई विधि के लिए एक शॉर्टकट है, लेकिन यदि कोई उद्धरण नहीं है तो यह खाली सरणी देता है, इसलिए आप संग्रह उदाहरण प्राप्त करने पर भरोसा नहीं कर सकते।

  • $this->cart->getQuote()->getAllItems()

    आइटम संग्रह को लोड करता है, फिर सभी आइटमों की एक सरणी लौटाता है जिन्हें हटाए जाने के रूप में चिह्नित नहीं किया गया है (अर्थात वर्तमान अनुरोध में हटा दिया गया है)।

  • $this->cart->getQuote()->getAllVisibleItems()

    आइटम संग्रह को लोड करता है, फिर सभी आइटमों की एक सरणी लौटाता है जो हटाए गए के रूप में चिह्नित नहीं हैं और जिनके पास माता-पिता नहीं हैं (यानी आपको बंडल किए गए और कॉन्फ़िगर किए गए उत्पादों के लिए आइटम मिलते हैं लेकिन उनके संबद्ध बच्चे नहीं हैं)। प्रत्येक सरणी आइटम कार्ट पेज में प्रदर्शित पंक्ति से मेल खाती है।

चुनें कि आपकी आवश्यकताओं में सबसे उपयुक्त क्या है। ज्यादातर मामलों में आखिरी तरीका वही है जो आपको चाहिए।


कार्ट मॉडल और मेथड का उपयोग करना AllItems()या getAllVisibleItems()सभी सक्रिय कोट्स मॉडल से स्टोर पर जाने वाले सभी कार्ट में सभी आइटम वापस कर देंगे? या मेरी गाड़ी से सिर्फ एक (मैं इसके लिए शर्त लगाता हूं कि मैं चेकआउट सत्र वस्तु का उपयोग करूंगा और इससे कुटू वस्तु प्राप्त करूंगा)? अंतर महत्वपूर्ण है, क्योंकि मैं ब्लॉक वर्ग में चेकआउट सत्र का उपयोग करना चाहता था, लेकिन वास्तव में क्यूटो खाली है जब ब्लॉक के अंदर मिलता है।
बार्टोज़ कुबिकी 20

यह हमेशा केवल वर्तमान सत्र की गाड़ी है।
फैबियन शेंगलर

और माल की श्रेणी कैसे प्राप्त करें?
Рома Лытарь

21

Magento \ Checkout \ Model \ Cart का उपयोग पदावनत किया जाता है।

आपको कोट और अपने कार्ट आइटम प्राप्त करने के लिए सत्र का उपयोग करना चाहिए।

use Magento\Checkout\Model\Session;

public function __construct(
        ...
        Session $session
        ...
    ) {
        ...
        $this->_session = $session;
        ...
    }

public function yourFunction()
{
    $items = $this->_session->getQuote()->getAllVisibleItems();
}

मुझे यकीन है कि Magento जल्द ही सत्र के लिए किसी प्रकार का भंडार जोड़ देगा।

जहाँ तक मैं बता सकता हूँ कि आप वास्तव में सिर्फ Magento \ Quote \ Api \ CartRepositoryInterface या Magento \ Quote \ Api \ CartiagementInterface का उपयोग करके वर्तमान उद्धरण प्राप्त नहीं कर सकते हैं, यदि आपके पास ग्राहक आईडी है तो आप उन दोनों में से किसी एक का उपयोग कर सकते हैं उद्धरण लोड करें (जो मुझे लगता है कि जिस तरह से Magento चाहते हैं कि आप इसे करना चाहते हैं) और वहां से बोली / कार्ट आइटम प्राप्त करें।

CartManagementInterface getCartForCustomer($customerId)
CartRepositoryInterface getForCustomer($customerId)

4
मेरा मानना ​​है कि उचित तरीका अब चेकआउट सत्र का उपयोग करना है Magento\Checkout\Model\Session::getQuote()
गिएल बर्कर्स

10
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
 $cart = $objectManager->get('\Magento\Checkout\Model\Cart'); 

// retrieve quote items collection
$itemsCollection = $cart->getQuote()->getItemsCollection();

// get array of all items what can be display directly
$itemsVisible = $cart->getQuote()->getAllVisibleItems();

// retrieve quote items array
 $items = $cart->getQuote()->getAllItems();

foreach($items as $item) {
     echo 'ID: '.$item->getProductId().'<br />';
      echo 'Name: '.$item->getName().'<br />';
       echo 'Sku: '.$item->getSku().'<br />';
       echo 'Quantity: '.$item->getQty().'<br />';
      echo 'Price: '.$item->getPrice().'<br />';
    echo "<br />";            
  }

और माल की श्रेणी कैसे प्राप्त करें?
Рома Лытарь

0

नए संस्करणों में आप API का उपयोग कर सकते हैं:

public function __construct(\Magento\Checkout\Model\Cart\CartInterface $cart)
{
    $this->cart = $cart;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.