Fonction ajax pour ajouter des produits au panier sous PrestaShop
J’ai eu dernièrement à implémenter une fonction d’ajout au panier en ajax sur une page custom dans PrestaShop.
Je vais donc partager avec vous ce petit bout de code très utile.
<script type="text/javascript"> ajaxCart.add(ID_PRODUCT , ID_ATTRIBUTE , AJOUTAPARTIRDELAFICHEPRODUIT , ELEMENT , QUANTITY , WISHLIST); ajaxCart.refresh(); </script> |
Les paramètres utilisés par la fonction ajaxCart.add()
- ID_PRODUCT = identifiant du produit à ajouter au panier (requis)
- ID_ATTRIBUTE = attribut du produit ( si aucun passez null )
- AJOUTAPARTIRDELAFICHEPRODUIT = Ajouté ou non à partir de la fiche produit ( true ou false )
- ELEMENT = élement html du bouton utilisé pour ajouter le produit au panier ( permet de disabled l’élément si la quantité est à 0 suite à l’ajout par exemple )
- QUANTITY = Quantité de produits à ajouter ( null pour 1 produit ou alors passer un entier )
- WISHLIST = Ajout ou non à la wishlist (passer null pour ajout au panier)
ajaxCart.refresh(); va permettre de rafraichir le bloc panier suite à l’ajout.
La déclaration de ces fonctions se trouve dans le fichier /modules/blockcart/ajax-cart.js
Merci Emilien pour le partage
salut merci pour le code, moi j’ai un probleme quand j’ajoute un produit ou je veux vider mon panier y a une erreur (une fenetre javascript ) qui s’affiche avec l’erreur suivant :
technical error : unable to add the product
details : error thrown: [object XMLHttpRequest]
text status : parsererror
quand je click apres sur ok le produit n’est pas ajouter au panier mais quand j’actualise la page là le produit il est ajouter
on m’a dit que l’erreur vien de fichier /modules/blockcart/ajax-cart.js
mais je sais pas comment procéder
Tu as activé le bloc panier et activer le mode ajax ?
ou ça ?
BO->modules->bloc panier
oui il est activé et le ajax aussi
Bonjour,
j’ai ajouté le code, j’ai un problème quand j’active ajax les articles s’ajoutent bien au panier mais que lorsque j’ai au moins rafraîchi la page une fois.
Auriez-vous une idée ?
cordialement
Le bloc panier est actif et le mode Ajax également ?
bonjour,
Cela fonctionne, j’avais oublié de vider compile smarty
Merci encore pour ce script.
cordialement
Bonjour,
J’ai un petit soucis, j’aimerai ajouter un produit avec un champs personnalisé (qui sera déjà complété) mais je ne trouve pas comment faire.
Est-il possible de l’ajouter avec Ajax ?
Merci d’avance
Salut, je sais que ça date comme sujet, mais c’est exactement ce que j’essaie de faire. As-tu trouvé une solution a ce problème ?
Merci
merci pour cette explication, que je viens d’implémenter sans probléme. En complément pour le produit ajouté au pannier je souhaite également renseigner des champs (1 image et 1 texte) pour personnaliser le produit. Je ne trouve pas la fonction a utiliser pour faire ca.
Si ce n’est pas abuser, merci d’avance.
Alain
j’ai utilisé cette fonction avec l’option déclinaisons et j’ai le message d’erreur : “vous avez atteint la quantité maximum pour ce produit” au moment de l’ajout de certain produits au panier
pour info mon bouton ajouter est sur la home page, j’ai fait comme ceci :
var id_att = $(this).attr(‘id’).replace(‘id_attribut_’, ”);
ajaxCart.add(idProduct, id_att, false, this);
quelqu’un a une idée ou est l’erreur ?
Merci d’avance
Un peu plus haut, ‘mido’ a présenté un PB qui arrive apparemment à beaucoup d’utilisateur de PS mais dont personne a su donner une réponse. Le PB est l’affichage d’une alerte provenant du script ajax-cart.js que je rappelle:
technical error : unable to add the product
details : error thrown: [object XMLHttpRequest]
text status : parsererror
Dans ce cas, les défauts suivants apparaissent:
1/ l’animation de l’image produit vers le block panier ne se fait pas:
2/ La rafraichissement du block panier ne se fait pas
Le panier est tout de même correctement mis à jour.
De plus, si la quantité maximum de commande du produit est atteinte, le fonctionnement redevient normal: anim + alert(“vous avez atteint la quantité max de commande de ce produit”).
En traçant le PB, ajax-cart.js envoi un POST à “cart.php” qui fournit une réponse incomplète (apparemment interromppu à cause d’un erreur interne non tracée) ce qui déroute le script ajax-cart.js sur sa fonction d’erreur.
C’est donc du côté ‘cart.php’ qu’il faudrait regarder, ou plutôt des “données” utilisées par cart.php.
Mais là, aucune info n’apparait sur le Net si ce n’est que de “filer” ses codes d’accès au back-office à un “développeur PS” qui farait lui-même la correction des erreurs apparues.
Je trouve cela un peu fort de café !
Alors je me pose plusieurs questions:
=> Pour quelle raison il n’est jamais dit ce qu’il faut “réaligner” pour supprimer le PB (puisqu’apparemment un dév PS le fait en 2 temps 3 mouvements) ?
=> Pourquoi aucune cause d’apparition du PB n’est donnée ? Même si la correction existe, je ne vais pas quand même pas filer toutes mes clés à un dev PS à chaque fois que cela apparait !
Alors si une personne de bonne volonté pouvait répondre à ces questions simplement cela serait plus cool.
C’est vrai que dans le cas contraire, je ne serais pas trop encouragé pour continuer avec ce système (PS), car il donne l’impression de ne pas être stable (PB appraissant sans aucune cause identifiée) et de plus totalement non sécurisé puisqu’il faut donner les code d’accès à un développeur lambda PS pour corriger le PB !
Dans ce cas, PS apparaitrait comme une solution pour le moins harsardeuse.
Merci pour des réponses faisant avancer le smilblik !
Bonjour à tous,
J’ai exactement le même problème qu’lvdl. Le problème est que la réponse reçue est la page d’index en entier et pas seulement un array des produits avec le lien, l’id, la quantité des produits…
Comme tout semble très bien fonctionner en local, je m’interroge…
Est-ce que vous avez réussi à résoudre le problème de votre côté ?
Bonjour,
Vérifiez le fichier config.inc.php, l’affichage des erreurs m’a déjà posé le même genre de problème…
Les valeurs doivent être :
/* Debug only */
@ini_set(‘display_errors’, ‘off’);
define(‘_PS_DEBUG_SQL_’, false);
Bonjour à tous
après de multiples recherches concernant le problème : message d’erreur suivant : “vous avez atteint la quantité maximum pour ce produit”.
la solution que j’ai trouvé : mettre “non” au mode catalogue, dans le back office de prestashop , dans la catégorie Panneau d’administration > Préférences > Produits
ceci a résolu mon problème.
bonjour,
j’ai créer un module qui gère les produits, autrement dit il ressemble au panier. Donc le problème que j’ai c’est que à la fin du traitement de ce module la totalité des produits doit passer au panier mais un message s’affiche que le produit n’existe plus.
bonjour, sos je ne trouve pas la solution pour supprimer le problème : “Vous avez déjà la quantité maximale disponible pour ce produit.”
si qqu un connait la solution ce serait sympa de me la communiqué merci pour votre aide.
Bonjour
Merci de préciser ou je dois mettre le code et dans quel dossier
car j ‘ai ce problème Et en plus je de peux plus changer le statut de mes clients et impossible de modifier une déclinaison
voir mon site
Merci d’avance
Après une étude minutieuse du problème de Mido dans mon site. les chemins d’images de personnalisation étaient retournées avec un caractère de retour chariot qui invalide le format Json.
comme j’ai pas besoin des images de personnalisation, je les ai simplement virée.
bonjour
je rencontre le même problème que “bjm” 2 posts plus h aut.
impossibilité d’ajouter un article au panier car message
” vous avez déjà la quantité maximale disponible our ce produit”
le mode catalogue est désactivé, les stocks sont en quantité à 1000, il n’y a aucune raison pour que cela arrive.
pourriez vous m’aider ?
merci d’avance !
Hello,
Merci pour ton blog car il n’y a pas beaucoup de tuto sur Prestashop (si on compare avec d’autres CMS généralistes comme Joomla ou wordPress.
Au sujet de la méthode ajaxCart.add, serait-il possible de donner plus d’infos sur le paramètre ELEMENT (ou callerElement) ? Je ne vois pas comment le récupérer.
Bonjour a tous est ce que cette fonction marche sur un site drupal commerce ?2