কার্টে যদি 2 টি আইটেম গ্রাহক লগইন করে তবে উভয় আইটেমের কার্ট যুক্ত করা উচিত, উভয়ই উদ্ধৃতি (লগইনের আগে এবং লগইনের পরে) একীভূত হয়ে চূড়ান্ত উক্তি তৈরি করুন যা গ্রাহক উক্তির সমস্ত আইটেম ধারণ করে
রেফারেন্স লিঙ্কগুলি যা আমি গুগলে পেয়েছি
কার্টে যদি 2 টি আইটেম গ্রাহক লগইন করে তবে উভয় আইটেমের কার্ট যুক্ত করা উচিত, উভয়ই উদ্ধৃতি (লগইনের আগে এবং লগইনের পরে) একীভূত হয়ে চূড়ান্ত উক্তি তৈরি করুন যা গ্রাহক উক্তির সমস্ত আইটেম ধারণ করে
রেফারেন্স লিঙ্কগুলি যা আমি গুগলে পেয়েছি
উত্তর:
ডিফল্টরূপে, এপিআই সাইডের ম্যাজেন্টো 2 গ্রাহক লগইন করার সময় গ্রাহক কার্ডের সাথে অতিথি কার্টটি মার্জ করার জন্য কোনও এপিআই সরবরাহ করে না।
তবে আপনি গ্রাহক কার্ট দিয়ে গেস্ট কার্ট প্রতিস্থাপন করতে পারেন।
API : (/V1/carts/:cartId)
File : vendor/magento/module-quote/Model/QuoteManagement.php
Function : public function assignCustomer($cartId, $customerId, $storeId)
তবে আপনি যদি কার্যকারিতাটি মার্জ কার্ট লাইভ ম্যাজেন্টো ওয়েব সাইডটি বিকাশ করতে চান তবে আপনাকে কাস্টম এপিআই তৈরি করতে হবে।
আপনার কাস্টম এক্সটেনশনে আপনাকে "প্রায়" প্লাগইন তৈরি করতে হবে।
অ্যাপ্লিকেশন / কোড / MageKnight / উক্তি জন্য / etc / module.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="MageKnight_Quote">
<sequence>
<module name="Magento_Quote"/>
</sequence>
</module>
</config>
অ্যাপ্লিকেশন / কোড / MageKnight / উক্তি / registration.php
<?php
use \Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'MageKnight_Quote', __DIR__);
অ্যাপ্লিকেশন / কোড / MageKnight / উক্তি জন্য / etc / di.xml
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Quote\Api\CartManagementInterface">
<plugin name="mergeGuestCart"
type="MageKnight\Quote\Plugin\Model\CartManagement"/>
</type>
</config>
অ্যাপ্লিকেশন / কোড / MageKnight / উক্তি / প্লাগইন / মডেল / CartManagement.php
<?php
namespace MageKnight\Quote\Plugin\Model;
use Magento\Framework\Exception\StateException;
/**
* Class CartManagement
*/
class CartManagement
{
/**
* @var \Magento\Quote\Api\CartRepositoryInterface
*/
protected $quoteRepository;
/**
* @var \Magento\Customer\Api\CustomerRepositoryInterface
*/
protected $customerRepository;
/**
* @var \Magento\Customer\Model\CustomerFactory
*/
protected $customerModelFactory;
/**
* @var \Magento\Quote\Model\QuoteIdMaskFactory
*/
private $quoteIdMaskFactory;
/**
* @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
* @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository
* @param \Magento\Customer\Model\CustomerFactory $customerModelFactory
* @param \Magento\Quote\Model\QuoteIdMaskFactory $quoteIdMaskFactory
*/
public function __construct(
\Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
\Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
\Magento\Customer\Model\CustomerFactory $customerModelFactory,
\Magento\Quote\Model\QuoteIdMaskFactory $quoteIdMaskFactory
) {
$this->quoteRepository = $quoteRepository;
$this->customerRepository = $customerRepository;
$this->customerModelFactory = $customerModelFactory;
$this->quoteIdMaskFactory = $quoteIdMaskFactory;
}
/**
* Around plugin to assign customer to guest cart
*
* @param \Magento\Quote\Api\CartManagementInterface $subject
* @param callable $proceed
* @param int $cartId The cart ID.
* @param int $customerId The customer ID.
* @param int $storeId
* @return boolean
*/
public function aroundAssignCustomer(
\Magento\Quote\Api\CartManagementInterface $subject,
callable $proceed,
$cartId,
$customerId,
$storeId
) {
$quote = $this->quoteRepository->getActive($cartId);
$customer = $this->customerRepository->getById($customerId);
$customerModel = $this->customerModelFactory->create();
if (!in_array($storeId, $customerModel->load($customerId)->getSharedStoreIds())) {
throw new StateException(
__("The customer can't be assigned to the cart. The cart belongs to a different store.")
);
}
if ($quote->getCustomerId()) {
throw new StateException(
__("The customer can't be assigned to the cart because the cart isn't anonymous.")
);
}
try {
$customerActiveQuote = $this->quoteRepository->getForCustomer($customerId);
} catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
$customerActiveQuote = false;
}
if ($customerActiveQuote) {
/** Merge carts */
$quote->merge($customerActiveQuote);
$this->quoteRepository->delete($customerActiveQuote);
}
$quote->setCustomer($customer);
$quote->setCustomerIsGuest(0);
$quote->setStoreId($storeId);
$quote->setIsActive(1);
/** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
$quoteIdMask = $this->quoteIdMaskFactory->create()->load($cartId, 'quote_id');
if ($quoteIdMask->getId()) {
$quoteIdMask->delete();
}
$this->quoteRepository->save($quote);
return true;
}
}