Temos um requisito, no qual um cliente poderá adicionar apenas um produto ao carrinho de cada vez. No entanto, ele / ela pode adicionar qualquer quantidade desse produto.
Como impedir que um produto seja adicionado ao carrinho se já houver um produto no carrinho?
Alguém pode ajudar nisso?
product
cart
magento-1.8
Shathish
fonte
fonte
checkout_cart_product_add_before
lá, por exemplo markshust.com/2012/Respostas:
Os eventos
catalog_product_type_prepare_full_options
ecatalog_product_type_prepare_lite_options
são seus amigosEntão na sua classe Observer
fonte
catalog_product_type_prepare_lite_options
é a primeira vez para mim! bem feito.Em vez de reescrever um controlador (por favor, oh, não faça isso), reescreva o
addProduct
método para considerar o limite:Se você quiser se divertir, substitua o item
1
acima porMage::getStoreConfig('checkout/options/max_cart_qty)
e defina o seguinte config.xml do seu módulo:Agora esse valor é controlado pelo valor XML. Se você deseja ser realmente, realmente sofisticado , adicione isso ao system.xml do seu novo módulo:
Lembre-se de que você precisa definir um
<depends>Mage_Checkout</depends>
para o seu módulo, a fim de pegar carona na sua configuração de sistema predefinida.fonte
Uma maneira possível é reescrever a addAction do Mage_Checkout_CartController.
Portanto, verifique se já existe um produto no carrinho e se sim, mostre uma mensagem de erro apropriada. Caso contrário, você pode chamar o método pai que está executando o processo de adição completo:
fonte
$this->_goBack();
não funciona! Entro na condição se, mas o produto ainda está sendo adicionado.Eu acho que você pode usar um observador e os seguintes eventos serão úteis para verificar as condições que você deseja. (Talvez alguns dos eventos não estejam na versão do Magento que você está usando).
fonte
checkout_cart_product_add_after
evento, a questão é como posso impedir que o produto seja adicionado ao carrinho?Talvez um pouco de uma idéia de campo esquerdo, mas que tal usar o
catalog_product_is_salable_after
evento?O que você pode fazer aqui é verificar se o produto está no carrinho ou se há outro produto no carrinho. Quando houver outro produto no carrinho, atualize o atributo 'is_salable' do objeto 'vendável' passado para o observador como false.
Observe que isso não foi testado e é apenas uma ideia. Ele falhará se o seu modelo não verificar
$product->isSaleable()
antes de exibir o botão. Também removeria apenas o botão e, na verdade, não interromperia o processo de adição se o usuário pudesse adivinhar o URL.fonte
Eu sei que este tópico é algo antigo, mas eu tive um problema semelhante. Quero apenas um item no carrinho e, se o cliente adicionar um novo, quero substituir o antigo pelo novo. Então, eu substituo o addAction (descrito aqui assim:
}
fonte