Jump to content

[RESOLU]Ajouter liste de produits au panier


Recommended Posts

Bonjour,

 

Dans une boutique, je sur un module ajouter une liste de produit dans le panier.

 

Je récupère bien tous ce dont j'ai besoin pour l'ajout au panier mais j'ai un petit problème :

 

Lorsque l'on se connect au site pour la première fois et que l'on ajoute cette liste de produit cela n'ajoute que le dernier produit de la liste.

 

Après, les fois suivante, cela fonctionne corectement toute la liste de produit est ajouté correctement.

 

Je me suis apperçu que cela vennais des cookies car si je vide le cache (avec les cookies) le problème revien.

 

je vous met le code javascript que j'utilise pour l'ajout au panier

//On ajoute le produit au panier
for(var i=0;i<prodTab.length;i++){
			
	ajaxCart.add(prodTab[i]['idProd'], prodTab[i]['attrProd'], true, null, prodTab[i]['quantiteProd'], null);
			
}

l'appel à ajaxCart.add se fait dans product.tpl.

 

Si vous avez une idée (ou une solution)

 

Merci d'avance

 

Cordialement

 

Bobjo

Edited by goujon (see edit history)
Link to comment
Share on other sites

J'ai remarqué un truc :

la boucle que j'utilise, fais une succession de requêtes.

On dirrait que le produit ajouté au panier lorsqu'il y a le bug ne soit pas le dernier de la liste mais celui qui met le plus de temps à terminer la requête.

 

exemple :

produit 1 = 457ms

produit 2 = 477ms

produit 3 = 499ms

produit 4 = 483ms

 

c'est le produit 3 qui est ajouté au panier.

 

J'ai testé l'ajout des autres produits au panier et cela fonctionne.

 

C'est comme si la requête la plus longue à s'executer écrasé les autres.

 

Une petite remarque qui pourrait donner une idée à quelqu'un, la globale $cart_qties qui sert à afficher le nombre de produit dans le panier n'est pas mise à jour.

 

Cordialement

 

Bobjo

Link to comment
Share on other sites

Alors semble bien qu'il y est un problème dans les temps d'execution des requête.

J'ai mis une alerte dans la boucle qui fais l'ajout au panier ce qui permet à chaque requête de se terminer tranquilement.

Et là tous le produits ont été ajouté....

 

Comment je pourrait temporriser les requêtes ?

 

Cordialement

 

Bobjo

Link to comment
Share on other sites

Je continu à me répondre...

 

Je viens de remarquer que lorsqu'il y a le problème d'ajout au panier dans la liste des panier créé du back office, cela crée 4 paniers.

Un panier par produit.

 

Si je supprime le produit du panier et que je relance mon script pour ajouter ma liste de produit, prestashop utilise le panier qui contenait le produit supprimé.

Link to comment
Share on other sites

Bon j'ai fini par trouvé.

J'ai temporisé ma boucle en la coupant en 2 et ajoutant dans le fichier ajax-cart.js le callbabak complete et un paramaètre à la foinction add.

Quand le le premier appel est complet il appel la suite.

 

Pour info le problème venait de la création du panier.

fichier ajax-cart.js

ajout du paramètre first

add : function(idProduct, idCombination, addedFromProductPage, callerElement, quantity, whishlist,first){

ajout du callback complete :

complete : function(resultat, statut){
	if(first == 1){
		addtocart();
	}
}

dans product .tpl :

ajout du premier produit :

ajaxCart.add(prodTab[0]['idProd'], prodTab[0]['attrProd'], true, null, prodTab[0]['quantiteProd'], null,1);

fonction pour le reste de la liste appelé dans le callback complete

var addtocart = function(){
		for(var i=1;i<4;i++){
			//setTimeout(temp(prodTab[i]['idProd'], prodTab[i]['attrProd'],prodTab[i]['quantiteProd']),execut);
			ajaxCart.add(prodTab[i]['idProd'], prodTab[i]['attrProd'], true, null, prodTab[i]['quantiteProd'], null,0);
			
		}
	}

C'est pas super mais bon ça marche.

Link to comment
Share on other sites

  • 2 months later...

Bonjour,

 

Je me permets de répondre à ton message car je pense avoir un pb similaire au tien sauf que je n'utilise pas de .tpl ici

 

[Version : PS 1.6.0.14]

 

J'ai modifié le contenu de mon fichier ajax-cart.js afin que lorsque l'utilisateur clique sur le bouton "ajouter au panier" 2 produits soient ajoutés au panier :

 

ajaxCart.add(idProduct1, $('#idCombination').val(), true, null, $('#quantity_wanted').val(),null) ;
ajaxCart.add(idProduct2, null, true, null, $('#quantity_wanted').val(),null) ;

 

J'ai les résultats suivants :

 

- Parfois cela fonctionne (les 2 produits sont bien ajoutés au panier)

- Parfois un seul des 2 produits est ajouté au panier (le 1er ou le 2è aléatoirement)

- Parfois j'ai une erreur de type "Impossible to add the product to the cart. textStatus: 'error' errorThrown: 'Internal Server Error' responseText:" généralement accompné d'une erreur 500 :"NetworkError: 500 Internal Server Error - http://localhost/pre...d=1430404364908"

 

Je suppose que cela est du à l'enchainement de l'appel de 2 instructions Ajax , mais je ne sais pas comment faire pour que ça fonctionne coup sur coup, sachant que je souhaite que mes produits soient ajoutés systématiquement dans l'ordre suivant : produit1 puis produit2

 

Pourrais-tu m'aider stp ?

 

Merci

Edited by boulio971 (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...