Jump to content

[Résolu]Comprendre le fonctionnement du id_product_attribute


Recommended Posts

Bonjour à tous,

Voilà j'ai un petit soucis, je n'arrive pas à comprendre comment marchent les attributs de produits ?
J'essaye de "simuler" le fonctionnement du bouton "acheter / ajouter au panier"... En gros j'ai compris qu'il suffit de rentrer une url du style : cart.php?add&id_product=XXX&id_product_attribute=YYY
Ou tout simplement positionner correctement les input dans la page ayant pour name "id_product" et "id_product_attribute" et les passer en POST à la page cart !
Pour le "id_product" c'est assez évident mais pour le "id_product_attribute" la logique m'échappe. Si quelqu'un à ne serait-ce qu'un début de piste ce serait réellement super !!

Merci d'avance pour votre aide,

Link to comment
Share on other sites

Bonjour,

Bien que novice en prestashop, je vais tenter de te donner une explication :

Comme tu l'as compris la table ps_product permet de stocker les produits ( avec comme identifiant unique id_product ).

Associé à cette table tu as la table product_lang qui permet le stockage des textes associés à un produit dans chacune des langues.

Si tu gères des attributs pour ton produits, et donc des déclinaisons, la table product_attribut entre en jeu.

Chaque enregistrement de la table product_attribute, correspond à une déclinaison ( taille 1 - couleur noir ; taille 2 ; couleur noir ; taille 1 - couleur rouge ... ) , id_product_attribute correspondant à l'identifiant unique de la déclinaison ( dans cette table tu retrouves les infos de la déclinaison, prix, stock .. etc.. ).

En complément se trouve les tables product_attribute_combination, qui va définir quelles valeurs d'attributs sont utilisées par ta déclinaison. ( les attributs étant eux stockés dans la table ps_attribute ).

Si tu veux je peux détailler l'organisation des tables attributes, attribute_group etc...

J'espère avoir pu t'aider...

Je vais mettre les mains dans le code, dans le but d'ajouter une double gestion des stocks à Prestashop ( stock interne et stock fournisseur ) donc la première étape aura été de comprendre "grossièrement" le modèle de données ..

@+

--
Christophe
http://www.interagilite.fr

Link to comment
Share on other sites

Merci pour ta réponse, tes infos sont en effet super utiles !!!
Après vérification en effet le id_product_attribute correspond bien à celui qui est en base ;) Par contre il me reste toujours à comprendre la pièce manquante du puzzle c'est à dire comment depuis la page le système trouve quelle combinaison d'attributs produit correspond à quel id produit ?
Je t'avoue bloquer (comme un nul ? lol) sur l'algo de détermination de l'id_attribute en fonction des déclinaisons choisies par l'utilisateur.

En gros pour donner un détail purement théorique mettons que je veuille acheter un t-shirt (id_product 8) et je le souhaite en rouge, taille L (id_product_attribute 24) comment le système sait-il que la couleur rouge et la taille L correspondent à l'id 24 ? Dans le même exemple si je change la couleur à blanc par exemple l'id_product_attribute passe à 23... J'ai bien l'impression qu'il y a une sorte de gestion d'incrément mais la logique pour reproduire l'algo derrière m'échappe !

Merci d'avance pour toute aide je suis réellement bloqué :(

Link to comment
Share on other sites

A mon avis ta réponse se trouve dans la table :

ps_product_combination...

Dans ton exemple la combinaison Taille / Couleur que tu définis correspond à un certain nombre de product_attribute ... dans le lot, il suffit de prendre ceux qui correspondent au produit "parent" ...

Hmm .. je sais pas si je suis clair ?

En gros tu as une table des attributs ( classé par groupe )..

Groupe :
Taille
Couleur

Attributs
1 -> Taille 1 ( Groupe Taille )
2 -> Taille 2 ( Groupe Taille )
3 -> Rouge ( Groupe Couleur )
4 -> Noir ( Groupe Couleur )

Ensuite pour chaque produit, tu défini tes déclinaisons.

Le produit "Article 1 " ( id_product = 1 ) a par exemple comme déclinaison
Article 1 - Taille 1 - Noir ( id_product_attribute = 1 )
Article 2 - Taille 2 - Noir ( id_product_attribute = 2 )

La table product_attribute_combination va te dire :

id_product_attribute / Attribute
1 - 1 ( déclinaison 1 a l'attribut taille 1 )
1 - 4 ( déclinaison 1 a l'attribut Noir )

et

2 - 2 ( déclinaison 1 a l'attribut taille 2 )
2 - 4 ( déclinaison 1 a l'attribut Noir )

C'est donc comme cela que tu remonteras sur tes product_attribute_id ...

Cela en recherchant les déclinaisons ( product_attribute_id ) associé au produit en cours, qui ont la combinaison d'attribut en cours....

Ca te semble ok ?

Link to comment
Share on other sites

J'ai bien étudié la question et grâce à tes indications je viens en effet de comprendre le fonctionnement merci beaucoup !!!
Par contre je remarque qu'avec ce mode de fonctionnement si on veut par exemple gérer des produits "custom" avec de nombreuses options de personnalisation on obtient rapidement un nombre exponentiel de déclinaisons et donc en base ça explose très rapidement (par exemple 8 options de personnalisation par champs avec 5 champs personnalisables ça fait déjà plus de 32.000 combinaisons !!!!) donc niveau perf ça devient vite ingérable.

Du coup je vais dériver un peu mais dans ce genre de cas l'idéal ne serait-il pas de carrément "zapper" la gestion des déclinaisons de presta pour inclure une gestion simple du produit avec des options custom gérées indépendamment en base ?

Encore merci pour ton aide précieuse,

Link to comment
Share on other sites

J'ai pas encore trop creusé la customisation, de mon coté mes clients gère surtout 2 attributs taille couleurs.

On peut vite arriver à pas mal de combinaisons c'est sur ( pour un de mes clients qui n'est pas sur PrestaShop mais Virtuemart, je dois avoir 5 ou 6000 références produits, et plus de 150 000 déclinaisons en effet ... ). Le site est hébergé sur un serveur dédié et ça tient la route ( mais tous les sites n'ont pas ces besoins là )

Mais c'est sur que 5 champs avec 8 valeurs possibles .. ça fait un max de combinaisons pour un seul produit ! et c'est donc impossible à gérer comme cela.

Je pense en effet qu'il vaut mieux te pencher sur la customisation offerte par Prestashop .. ( que je n'ai pas pour le moment vraiment utilisé ).

La gestion des déclinaisons selon moi est surtout intéressante pour la gestion des stocks ( dans le cadre de vraies déclinaisons, qui sont au final autant d'articles différents dans ton stock ).

Dans ton cas, je pense bien qu'il s'agit d'un même article que tu customise ( et pas de 2 articles différents dans ton stock ).

Bon courage en tout cas !


@+

Link to comment
Share on other sites

  • 11 months later...
  • 9 years later...

Hello,
I'm bringing this topic up again, because my request is related.

I am looking to change the value of the product_attribute_id so that :
 the value id_product_attribute = id_product- id_attribute


Example:
If my product has as id_product: 250
If the declination in Catalogue > Attributes & characteristics > Size (ID "1") > XL (ID "6") 
I want my product_attribute to be 250-6

Does anyone know how to make this change?

Thanks in advance and have a nice day 

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