내가하고 싶은 것은 내 사용자 정의 속성이 따옴표로 설정되어 있으면 카트에 제품을 추가하고 싶지 않다는 것입니다. 내 맞춤 속성이 올바르게 설정되었습니다.
제품이 장바구니에 추가되는 것을 막기 위해이 이벤트를 관찰하는 관찰자를 작성했습니다. 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();
이렇게하면 장바구니에 추가 프로세스가 중지되지만 장바구니에 추가 단추는 계속 "추가 중" 으로 표시 됩니다. 장바구니에 추가 버튼이 이전 상태로 돌아가고 제품도 장바구니에 추가되지 않도록 올바르게 수행하려면 어떻게해야합니까?