আমি যা করতে চাই তা যদি আমার কাস্টম বৈশিষ্ট্যটি উদ্ধৃতিতে সেট করা থাকে তবে আমি চাই না যে কোনও পণ্য কার্টে যুক্ত করা হোক। আমার কাস্টম বৈশিষ্ট্যটি সঠিকভাবে সেট করা হচ্ছে।
কার্টে পণ্য যুক্ত হওয়া বন্ধ করতে, আমি একটি পর্যবেক্ষক লিখেছি যা এই ইভেন্টটি পর্যবেক্ষণ করে controller_action_predispatch_checkout_cart_add
আমার পর্যবেক্ষক ফাইল কোড:
public function execute(\Magento\Framework\Event\Observer $observer) {
$addedItemId = $observer->getRequest()->getParam('product');
$quote = $this->_cart->getQuote();
if(!empty($quote)) {
$customAttribute = $quote->getData('custom_attribute');
if(!empty($customAttribute)) {
$controller = $observer->getControllerAction();
$storeId = $this->_objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId();
$product = $this->_productRepository->getById($addedItemId, false, $storeId);
$observer->getRequest()->setParam('product', null);
$this->_messageManager->addError(__('This product cannot be added to your cart.'));
echo false;
$this->_actionFlag->set('', \Magento\Framework\App\Action\Action::FLAG_NO_DISPATCH, true);
$this->redirect->redirect($controller->getResponse(), 'checkout/cart/index');
}
}
}
এই কোডের সাহায্যে, আমি কার্ট প্রক্রিয়াতে অ্যাডটি আটকাতে পারছি না।
সুতরাং Magento1 এই উত্তর অনুযায়ী - /programming/14190358/stop-add-to-cart-and-supply-message-to-user-in-magento । আমি প্রতিস্থাপন করার চেষ্টা করেছি
$this->_actionFlag->set('', \Magento\Framework\App\Action\Action::FLAG_NO_DISPATCH, true);
$this->redirect->redirect($controller->getResponse(), 'checkout/cart/index');
সহ (এটি করার সর্বোত্তম উপায় নয় If যদি এর থেকে আরও ভাল উপায় থাকে তবে দয়া করে পরামর্শ দিন)
header("Location: " . $product->getProductUrl());
die();
এটি শেষ পর্যন্ত কার্ট প্রক্রিয়াতে অ্যাড থামায় তবে কার্ট বোতামে যুক্ত হওয়া এখনও "যুক্ত করা" দেখায় । আমি কীভাবে এটি সঠিকভাবে সম্পাদন করতে পারি যাতে কার্টের বোতামে যুক্ত হওয়া তার আগের অবস্থায় ফিরে যায় এবং পণ্যটিও কার্টে যুক্ত না হয়?