जवाबों:
मैं प्रश्न का उत्तर दो भागों में दूंगा:
में गंतव्य link.phtml
है $block->getCheckoutUrl()
। आपको कार्यक्षमता बदलने के लिए टेम्पलेट नहीं बदलना चाहिए, लेकिन Magento\Checkout\Block\Onepage\Link
इसके बजाय ब्लॉक को बदलना चाहिए। ऐसा करने के लिए वापसी मान को बदलने के लिए एक विधि के साथ एक प्लगइन बनाएं afterGetCheckoutUrl()
।
Magento-2.0 के रूप में 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()
आइटम संग्रह को लोड करता है, फिर सभी आइटमों की एक सरणी लौटाता है जो हटाए गए के रूप में चिह्नित नहीं हैं और जिनके पास माता-पिता नहीं हैं (यानी आपको बंडल किए गए और कॉन्फ़िगर किए गए उत्पादों के लिए आइटम मिलते हैं लेकिन उनके संबद्ध बच्चे नहीं हैं)। प्रत्येक सरणी आइटम कार्ट पेज में प्रदर्शित पंक्ति से मेल खाती है।
चुनें कि आपकी आवश्यकताओं में सबसे उपयुक्त क्या है। ज्यादातर मामलों में आखिरी तरीका वही है जो आपको चाहिए।
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)
Magento\Checkout\Model\Session::getQuote()
।
$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 />";
}
नए संस्करणों में आप API का उपयोग कर सकते हैं:
public function __construct(\Magento\Checkout\Model\Cart\CartInterface $cart)
{
$this->cart = $cart;
}
AllItems()
याgetAllVisibleItems()
सभी सक्रिय कोट्स मॉडल से स्टोर पर जाने वाले सभी कार्ट में सभी आइटम वापस कर देंगे? या मेरी गाड़ी से सिर्फ एक (मैं इसके लिए शर्त लगाता हूं कि मैं चेकआउट सत्र वस्तु का उपयोग करूंगा और इससे कुटू वस्तु प्राप्त करूंगा)? अंतर महत्वपूर्ण है, क्योंकि मैं ब्लॉक वर्ग में चेकआउट सत्र का उपयोग करना चाहता था, लेकिन वास्तव में क्यूटो खाली है जब ब्लॉक के अंदर मिलता है।