উত্তর:
আমি দুটি অংশে প্রশ্নের উত্তর দেব:
গন্তব্য 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;
}
এখন আপনি কার্টটিতে অ্যাক্সেস পেয়েছেন, আপনি বিভিন্ন উপায়ে আইটেমগুলি পুনরুদ্ধার করতে পারেন, যা মূলত ম্যাজেন্টো 1 এর মতো :
$this->cart->getQuote()->getItemsCollection()
বর্তমান উক্তির সাথে সম্পর্কিত সমস্ত আইটেমের সাথে একটি উদ্ধৃতি আইটেম সংগ্রহ প্রদান করে।
$this->cart->getItems()
এটি উপরের পদ্ধতির জন্য একটি শর্টকাট, তবে কোনও উদ্ধৃতি না থাকলে এটি একটি খালি অ্যারে প্রদান করে, সুতরাং আপনি সংগ্রহের উদাহরণ পাওয়ার উপর নির্ভর করতে পারবেন না।
$this->cart->getQuote()->getAllItems()
আইটেম সংগ্রহটি লোড করে, তারপরে মুছে ফেলা হিসাবে চিহ্নিত না হওয়া (যেমন বর্তমান অনুরোধে মুছে ফেলা হয়েছে) এমন সমস্ত আইটেমের একটি অ্যারে প্রদান করে ।
$this->cart->getQuote()->getAllVisibleItems()
আইটেম সংগ্রহটি লোড করে, তারপরে এমন সমস্ত আইটেমের একটি অ্যারে ফিরিয়ে দেয় যা মুছে ফেলা হিসাবে চিহ্নিত করা হয়নি এবং যার পিতা-মাতা নেই (যেমন আপনি বান্ডেলযুক্ত এবং কনফিগারযোগ্য পণ্যগুলির জন্য আইটেমগুলি পান তবে তাদের সাথে সম্পর্কিত শিশুদের নয়)। প্রতিটি অ্যারে আইটেম কার্ট পৃষ্ঠায় প্রদর্শিত একটি সারির সাথে সামঞ্জস্য করে।
আপনার চাহিদা সবচেয়ে উপযুক্ত কি চয়ন করুন। বেশিরভাগ ক্ষেত্রে শেষ পদ্ধতিটি আপনার প্রয়োজন।
ম্যাজেন্টো \ চেকআউট \ মডেল \ কার্টের ব্যবহার হ্রাস করা হয়েছে।
উদ্ধৃতি এবং আপনার কার্ট আইটেমগুলি পেতে আপনার সেশনটি ব্যবহার করা উচিত।
use Magento\Checkout\Model\Session;
public function __construct(
...
Session $session
...
) {
...
$this->_session = $session;
...
}
public function yourFunction()
{
$items = $this->_session->getQuote()->getAllVisibleItems();
}
আমি নিশ্চিত যে ম্যাজেন্টো শীঘ্রই অধিবেশনটির জন্য এক ধরণের ভান্ডার যুক্ত করবে।
যতদূর আমি বলতে পারি আপনি কেবলমাত্র ম্যাজেন্টো \ কোট \ এপি \ কার্টরপোসিটরিআইন্টারফেস বা ম্যাজেন্টো ote উক্তি \ এপি \ কার্ট ম্যানেজমেন্টআইনটারফেস ব্যবহার করে কেবলমাত্র বর্তমান উদ্ধৃতিটি পেতে পারবেন না, তবে গ্রাহকের আইডি থাকলে আপনি এই দুটি ব্যবহার করতে পারেন উদ্ধৃতিটি লোড করুন (যা আমি কল্পনা করি যে উপায়টি ম্যাগেন্টো আপনাকে এটি করতে চায়) এবং সেখান থেকে উদ্ধৃতি / কার্ট আইটেম পান।
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 />";
}
নতুন সংস্করণগুলিতে আপনি এপিআই ব্যবহার করতে পারেন:
public function __construct(\Magento\Checkout\Model\Cart\CartInterface $cart)
{
$this->cart = $cart;
}
AllItems()
বাgetAllVisibleItems()
ফিরে আসবে? অথবা আমার কার্ট থেকে কেবল একটি (আমি এটির জন্য বাজি রেখেছি বরং আমি চেকআউট সেশন অবজেক্টটি ব্যবহার করব এবং এটি থেকে কুতোয় অবজেক্টটি পাব)? পার্থক্যটি গুরুত্বপূর্ণ, কারণ আমি ব্লক ক্লাসে চেকআউট সেশনটি ব্যবহার করতে চেয়েছিলাম, তবে প্রকৃতপক্ষে ব্লুটের ভিতরে গেলে কুতোয় খালি থাকে।