Wenn mein benutzerdefiniertes Attribut im Angebot festgelegt ist, möchte ich nicht, dass ein Produkt in den Warenkorb gelegt wird. Mein benutzerdefiniertes Attribut wird korrekt festgelegt.
Um zu verhindern, dass das Produkt in den Warenkorb gelegt wird, habe ich einen Beobachter geschrieben, der dieses Ereignis beobachtet controller_action_predispatch_checkout_cart_add
Mein Beobachter-Dateicode:
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');
}
}
}
Mit diesem Code kann ich den Vorgang zum Hinzufügen zum Warenkorb nicht stoppen.
Also gemäß dieser Antwort von Magento1 - /programming/14190358/stop-add-to-cart-and-supply-message-to-user-in-magento . Ich habe versucht zu ersetzen
$this->_actionFlag->set('', \Magento\Framework\App\Action\Action::FLAG_NO_DISPATCH, true);
$this->redirect->redirect($controller->getResponse(), 'checkout/cart/index');
mit (Dies ist nicht der beste Weg, dies zu tun. Wenn es einen besseren Weg gibt, schlagen Sie bitte vor)
header("Location: " . $product->getProductUrl());
die();
Dies stoppt letztendlich den Vorgang zum Hinzufügen zum Warenkorb, aber die Schaltfläche zum Hinzufügen zum Warenkorb zeigt weiterhin "Hinzufügen" an . Wie kann ich dies korrekt ausführen, damit die Schaltfläche "In den Warenkorb" in den vorherigen Zustand zurückkehrt und auch das Produkt nicht in den Warenkorb gelegt wird?