Jump to content

AJAX, ajout de produit et choix de l'attribut


Recommended Posts

Bonjour,

J'aurai besoin de modifier le comportement du bouton ajouter au panier dans la liste des produits, en particulier le choix du produit par défaut qui est automatiquement ajouté au panier.

Pour comprendre où je veux en venir :
Imaginons que le produit "T-shirt" a 2 attributs, le texte "I'm a boy" et le texte "I'm a gril"
"Im a boy" coute 10€
"I'm a girl" coute 15€ (ben oui, il y a des strass ;-P )

J'arrive à définir un attribut par défaut en fonction de la catégorie où je me trouve.
Depuis la catégorie vêtements enfants, si je clique sur voir le produit,
1)l'attribut "I'm a girl" est présélectionné sur la page product.php.
2) Je peux choisir un autre attribut.

Depuis la catégorie vêtements filles,
1) l'attribut "I'm a girl" est pré-selectionné sur la page product.php
2) c'est le seul, "I'm a boy" n'est pas affiché

Inversement, depuis ans vêtements garçon, c'est l'attribut "I'm a boy".


Au départ, le prix affiché dans la liste des produits (category.php et product-list.tpl) restait invariablement celui de "I'm a girl".
Non sans mal, j'ai réussi à afficher le bon prix de l'attribut en fonction de la catégorie dans la liste des produits.

Mais maintenant je bute sur le bouton "ajouter au panier" qui prend invariablement "I'm a girl par défaut" lorsque je suis dans le liste des produits (mais pas quand je suis sur le produit lui-même)

J'aimerais modifier le comportement du bouton AJAX d'ajout au panier, mais ne ne trouve pas où dans le code est définit l'ajout du produit par défaut.

Quelqu'un saurait où je dois modifier cela ?
merci par avance.

Link to comment
Share on other sites

Hello,
celà se passe dans ajax-cart.js

ajaxRequest='add&ajax=true&qty;=' + ( (quantity && quantity != null) ? quantity : '1') + '&id;_product=' + idProduct + '&token;=' + static_token + ( (parseInt(idCombination) && idCombination != null) ? '&ipa;=' + parseInt(idCombination): '');



où le paremètre 'ipa' est la 'combination' (déclinaison).

J'espère que çà t'aidera un peu.

A bientot,
PierrE.

Link to comment
Share on other sites

Merci Pierre,

Après avoir regardé le fichier dont tu parles et les lignes où ipa ou combination sont cités, je n'arrive malheureusement pas à voir e que je dois modifier.

En effet, ipa fait référence à IdCombination, que l'on ne retrouve que dans les fichiers classes/Product.php et product.php

pas de traces de "combination" dans classes/Category.php et category.php

d'où ma question : si IdCombination n'est pas définit (par exemple dans la page category.php, où est le code qui permet à ajax d'ajouter la déclinaison du produit où default_on =1 ?

Merci par avance.
Tibo

Link to comment
Share on other sites

Bon, j'ai trouvé, je vous fais partager la solution

Il fallait en fait changer la fonction getDefaultAttribute dans classes/Product.php

L'original :

static public function getDefaultAttribute($id_product, $minimumQuantity = 0)
   {
       $sql = 'SELECT `id_product_attribute`
       FROM `'._DB_PREFIX_.'product_attribute`
       WHERE `default_on` = 1 '.(intval($minimumQuantity) > 0 ? 'AND `quantity` >= '.intval($minimumQuantity).' ' : '').'AND `id_product` = '.intval($id_product);
       $result = Db::getInstance()->getRow($sql);
       if (!$result)
               // blablabla



Et la version modifiée :

static public function getDefaultAttribute($id_product, $minimumQuantity = 0)
   {
       /////////////MODIFS ////////////////
       $sql = 'SELECT `id_product_attribute`
       FROM `'._DB_PREFIX_.'product_attribute`
       WHERE `id_category` = '.intval($id_category).' AND `default_on` = 1 '.(intval($minimumQuantity) > 0 ? 'AND `quantity` >= '.intval($minimumQuantity).' ' : '').'AND `id_product` = '.intval($id_product);
       $result = Db::getInstance()->getRow($sql);
       if (!$result)
               // blablabla



C'est pas 100% fonctionnel pour une administration via le back-office (je passe en direct sur la base via mon ERP)
Pour y arriver, j'ai ajouté un champ 'id_category' dans la table ps_product_attribute.
1) Le back-office ne permet pas de renseigner la catégorie pour la déclinaison
2) J'ai parfois 2 fois le même nom de déclinaison pour un même produit (ex : taille XL, id_category= 9 et taille XL, id_category = 12) et là le back office créer une allerte si je tente de modifier l'une des déclinaisons.

Il y a aussi le fait que taille XL,id_category = 9 et taille XL_id_category = 12 sont considérés comme des déclinaisons différentes, le stock de t-shirts XL n'est pas partagé : si j'ai 25 dans chaque et que j'ai fait 25 ventes depuis la catégorie 12, lorsque je commande un 26e tshirt depuis la même catégorie, il me dit que le stock est à zéro.

Pour moi, c'est ce que je cherchai dons pas de problème, mais pour d'autres qui seraient tentés c'est à savoir.

Tibo

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...