मैं क्या करना चाहता हूं अगर मेरे कस्टम विशेषता को उद्धरण में सेट किया गया है, तो मैं नहीं चाहता कि कोई भी उत्पाद कार्ट में जोड़ा जाए। मेरे कस्टम विशेषता को सही तरीके से सेट किया जा रहा है।
उत्पाद को कार्ट में शामिल होने से रोकने के लिए, मैंने एक ऑब्जर्वर लिखा है जो इस घटना को देखता है 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');
के साथ (यह करने का सबसे अच्छा तरीका नहीं है। अगर कोई बेहतर तरीका है, तो कृपया सुझाव दें)
header("Location: " . $product->getProductUrl());
die();
यह अंततः ऐड टू कार्ट प्रक्रिया को रोकता है लेकिन कार्ट बटन में ऐड अभी भी " ऐड " को दिखाता रहता है । मैं इसे कैसे सही ढंग से निष्पादित कर सकता हूं ताकि कार्ट बटन को जोड़कर अपनी पिछली स्थिति में वापस चला जाए और उत्पाद भी कार्ट में नहीं जोड़ा जाए?