Yang ingin saya lakukan adalah jika atribut khusus saya diatur dalam tanda kutip maka saya tidak ingin produk apa pun ditambahkan ke keranjang. Atribut khusus saya sedang diatur dengan benar.
Untuk menghentikan produk agar tidak ditambahkan ke troli, saya telah menulis Pengamat yang mengamati acara ini controller_action_predispatch_checkout_cart_add
Kode file pengamat saya:
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');
}
}
}
Dengan kode ini, saya tidak dapat menghentikan proses penambahan ke keranjang.
Jadi sesuai jawaban Magento1 ini - /programming/14190358/stop-add-to-cart-and-supply-message-to-user-in-magento . Saya mencoba mengganti
$this->_actionFlag->set('', \Magento\Framework\App\Action\Action::FLAG_NO_DISPATCH, true);
$this->redirect->redirect($controller->getResponse(), 'checkout/cart/index');
with (Ini bukan cara terbaik untuk melakukannya. Jika ada cara yang lebih baik, silakan sarankan)
header("Location: " . $product->getProductUrl());
die();
Ini pada akhirnya menghentikan proses tambahkan ke keranjang tetapi tombol tambahkan ke keranjang masih terus menampilkan "Menambahkan" . Bagaimana saya bisa melakukan ini dengan benar sehingga tombol tambah ke keranjang kembali ke keadaan sebelumnya dan produk juga tidak ditambahkan ke keranjang?