Nous avons une exigence, dans laquelle un client ne sera autorisé à ajouter qu'un seul produit au panier à la fois. Cependant, il / elle peut ajouter n'importe quelle quantité de ce produit.
Comment puis-je empêcher un produit de s'ajouter au panier s'il y a déjà un produit dans le panier?
Quelqu'un peut-il m'aider à ce sujet?
product
cart
magento-1.8
Shathish
la source
la source
checkout_cart_product_add_before
, par exemple markshust.com/2012/Réponses:
Les événements
catalog_product_type_prepare_full_options
etcatalog_product_type_prepare_lite_options
sont vos amisPuis dans votre classe Observer
la source
catalog_product_type_prepare_lite_options
est une première pour moi! Bien fait.Au lieu de réécrire un contrôleur (s'il vous plaît oh s'il vous plaît ne faites pas cela), réécrivez plutôt la
addProduct
méthode pour tenir compte de la limite:Si vous voulez faire preuve de fantaisie, remplacez ce qui
1
précède parMage::getStoreConfig('checkout/options/max_cart_qty)
et définissez le config.xml suivant de votre module:Cette valeur est désormais contrôlée via la valeur XML. Si vous voulez devenir vraiment, vraiment fantaisiste , ajoutez ceci au system.xml de votre nouveau module:
N'oubliez pas que vous devez définir un
<depends>Mage_Checkout</depends>
pour votre module afin de vous greffer sur sa configuration système prédéfinie.la source
Une façon possible consiste à réécrire l'addAction de Mage_Checkout_CartController.
Vérifiez donc s'il y a déjà un produit dans le panier et si oui, affichez un message d'erreur approprié. Sinon, vous pouvez appeler la méthode parent qui effectue le processus d'ajout complet:
la source
$this->_goBack();
ça ne marche pas! J'entre dans la condition if mais le produit est toujours ajouté.Je pense que vous pouvez utiliser un observateur et les événements suivants seront utiles pour vérifier les conditions que vous souhaitez. (Peut-être que certains des événements peuvent ne pas être dans la version de Magento que vous utilisez).
la source
checkout_cart_product_add_after
événement, la question est de savoir comment puis-je empêcher le produit d'être ajouté au panier?Peut-être un peu une idée de champ gauche, mais que diriez-vous d'utiliser l'
catalog_product_is_salable_after
événement?Ce que vous pouvez faire ici est de vérifier si le produit est dans le panier ou s'il y a un autre produit dans le panier. Quand il y a un autre produit dans la mise à jour du panier, l'attribut 'is_salable' de l'objet 'vendable' est passé à faux à l'observateur.
NOTEZ que cela n'a pas été testé et n'est qu'une idée. Il échouera si votre modèle ne vérifie pas
$product->isSaleable()
avant d'afficher le bouton. Cela supprimerait également le bouton et n'arrêterait pas réellement le processus d'ajout si l'utilisateur était capable de deviner l'URL.la source
Je sais que ce sujet est ancien, mais j'ai eu un problème similaire. Je veux un seul article dans le panier et si le client en ajoute un nouveau, je veux remplacer l'ancien par le nouveau. Je remplace donc l'addAction (décrit ici comme ceci:
}
la source