Produits configurables et ensemble d'attributs


18

TL; DR : Y a-t-il une raison pour laquelle les produits simples associés à un produit configurable doivent être dans le même ensemble d'attributs que le produit configurable lui-même? Je veux dire, y a-t-il une raison technique ? Je connais la raison du "bon sens". Si vous vendez une paire de chaussures, toutes les versions en fonction de la couleur et de la taille doivent également être des chaussures .
Version longue : j'ai eu la tâche de "fusionner" certains produits configurables. Je veux dire de 2 ou plus pour n'en faire qu'un. Je ne voulais pas les faire manuellement à cause de la quantité de produits et je ne voulais pas passer par$product->load(..)->set...()->save()en raison du temps qu'il a fallu pour exécuter le script. J'ai donc court-circuité le processus car j'étais sûr qu'aucun des produits simples ne se chevauchait. Il y avait une combinaison unique de taille et de couleur. J'ai fait ça:

Mage::getResourceSingleton('catalog/product_type_configurable')
    ->saveProducts($mainConfigrableProduct, $simpleProductIds);

$simpleProductIdsest un tableau de tous les identifiants de produit simples associés tous aux produits configurables qui doivent être fusionnés.
Cela fonctionnait parfaitement pour la plupart des produits, mais il y en avait quelques-uns qui avaient des problèmes.
Si j'ai appelé

$productIds = $product->getTypeInstance()->getUsedProductIds() 

J'obtiendrais tous les identifiants de produit simples, mais dans le backend, seuls quelques-uns d'entre eux sont apparus. Après avoir creusé pendant un certain temps, j'ai découvert que les seuls qui étaient affichés étaient ceux du même ensemble d'attributs que le produit configurable. L'autre jeu d'attributs est très similaire au premier, juste quelques différences mineures mais il contient les attributs configurables (taille et couleur).
Et maintenant la chose étrange. Dans le frontend, je m'attendais à voir tous les produits ($ productIds dans le code ci-dessus) ou uniquement les produits du même ensemble d'attributs. Eh bien, il y avait quelque chose entre les deux.

  • 20 identifiants de produits associés - 5 tailles, 4 couleurs
  • 10 produits associés dans le backend - 5 tailles, 2 couleurs - les 2 autres couleurs (10 produits) étaient dans un ensemble d'attributs différent
  • 15 combinaisons dans le frontend - 5 tailles 3 couleurs (???)

J'ai pu résoudre le problème en modifiant l'ensemble d'attributs pour les produits qui n'apparaissaient pas, mais je suis toujours perplexe.

Remarque : N'essayez pas cela à la maison. Ou vous pouvez l'essayer à la maison mais pas sur un serveur en direct.

Réponses:


13

Après avoir demandé ceci, voici les raisons que j'ai. J'espère que c'est satisfaisant pour vous, même si c'est probablement ce à quoi vous vous attendiez.

  1. L'interface adminhtml a été conçue dans le but de compliquer complètement le commerce pour les commerçants.

Pour cette raison, de nombreuses fonctionnalités fournies par Magento en tant que Framework ne sont pas possibles via l'interface utilisateur.
La raison pour laquelle seuls les produits du même ensemble d'attributs peuvent être sélectionnés en tant que produits simples associés pour les configurables est parce que c'est ce qui était dans les spécifications.
Comme vous l'avez dit, cela a un certain sens de cette façon.

  1. Une autre raison est de penser à l'objectif des ensembles d'attributs. L'une des raisons pour lesquelles ils existent est de réduire le nombre d'attributs et d'options qui doivent être chargés et traités lors d'une demande. L'application de cette réflexion aux éléments configurables est logique, car il s'agit d'un type de produit relativement coûteux en ressources.

Étant donné que le backend a été construit de cette manière, la logique du frontend pour configurable n'a jamais été censée traiter des produits simples provenant de différents jeux d'attributs.
C'est pourquoi les restrictions ne sont pas complètement mises en œuvre là-bas.

Il serait probablement facile de faire fonctionner les configurables avec des simples provenant de différents jeux d'attributs. Ce n'était pas prévu comme ça.

Je n'ai pas demandé plus loin et ne me suis pas regardé pour voir quelle interaction de code a exactement produit le résultat étrange sur le frontend. Ce n'est probablement pas important, car si j'ai bien compris, vous demandiez le raisonnement derrière la décision d'exclure des produits simples de jeux d'attributs différents de ceux configurables, pas l'explication du code.


Merci Vinai. J'espérais profondément dans mon esprit pour une raison «époustouflante». Cela aurait été amusant :). Ceci est une explication satisfaisante. Quant au "résultat étrange", il n'est pas nécessaire de creuser le code. Je le ferai quand je m'ennuierai. J'ai toujours le vidage DB et la façon de reproduire le même résultat. C'est probablement parce que je visais directement dans la base de données. Je publierai un résultat quand / si j'en trouverai un.
Marius

2
Tsk tsk, @Marius - ne touchez pas à la base de données;)
philwinkle

4
@philwinkle. Je sais, je sais, l'univers explosera si tu le fais. Que puis-je dire? J'aime vivre dangereusement. Pour ma défense, j'ai dit "n'essayez pas ceci sur un serveur en direct".
Marius

1
Toujours en attente de me faire souffler l'esprit aussi ... :)
Vinai

2

Nous utilisons une extension appelée RapidFlow par Unirgy (que je ne peux pas recommander assez fortement) pour l'importation et l'exportation. L'une des fonctionnalités de la version Pro permet de modifier les jeux d'attributs. Un autre est la création de produits via l'importation CSV. Parfois, nous créons de nouveaux produits simples pour les éléments configurables, et parfois par accident, ces produits simples ont des jeux d'attributs différents de ceux de leurs parents.

Rapidflow importera volontiers ces produits et modifiera les jeux d'attributs. Nous ne sommes généralement pas satisfaits des résultats. Les produits configurables configurés par des attributs en dehors de leur ensemble d'attributs ne s'affichent pas dans l'administrateur du produit et doivent être réparés. Si nous ne modifions pas l'ensemble d'attributs du parent, comme vous l'avez noté, les enfants ne sont tout simplement pas correctement associés à leur parent. Ils existent en tant qu'entités Magento, peuvent être modifiés, mais n'apparaîtront pas comme des enfants sur la page du produit frontal ou dans la liste de produits associée du parent configurable.

Donc, d'un point de vue purement technique, il est possible que des produits simples soient dans un ensemble d'attributs différent de leur parent. Mais comme ce comportement n'est pas pris en charge, même en EE, et donc Razor d'Occam dit que lorsqu'ils ont conçu Magento, les développeurs de Varien n'ont pas vu le besoin.


1
Merci pour la réponse (et la recommandation d'extension) mais cela ne répond pas à ma question. J'ai dit que j'avais réussi à résoudre mon problème en modifiant directement la base de données. Je sais que je ne devrais pas faire ça mais j'avais une bonne connaissance de ce que je faisais - et une sauvegarde de base de données :). J'étais simplement curieux de savoir pourquoi cette restriction existe. En ce qui concerne "les développeurs Varien n'ont pas vu le besoin", j'ai le sentiment que vous vous trompez. Si vous implémentez une restriction, cela doit en être la raison.
Marius
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.