我想做的是,如果在引号中设置了我的自定义属性,那么我不想在购物车中添加任何产品。我的自定义属性已正确设置。
为了阻止产品添加到购物车,我编写了一个观察该事件的观察者 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();
最终,这将停止添加到购物车过程,但是“添加到购物车”按钮仍保持显示“正在添加”。如何正确执行此操作,以便“添加到购物车”按钮返回到其先前的状态,并且产品也不会添加到购物车?