私がしたいのは、カスタム属性が引用で設定されている場合、カートに商品を追加したくないです。カスタム属性が正しく設定されています。
製品がカートに追加されないようにするために、このイベントを監視するオブザーバーを作成しました 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のこの回答に従って-https : //stackoverflow.com/questions/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();
これにより、最終的にカートに追加プロセスが停止しますが、カートに追加ボタンは引き続き「追加中」を表示し続けます。カートに追加ボタンが以前の状態に戻り、製品もカートに追加されないようにするには、これを正しく実行するにはどうすればよいですか?