Jump to content

Classer les déclinaisons dans un ordre précis.


Recommended Posts

Bonjour à tous, j'ai cherché sur le forum mais je n'ai pas encore trouvé la solution à mon problème alors je me permets de poster!

Tout d'abord je tiens à féliciter les programmeurs, c'est un très bon outil ce Prestashop !! Bravo !

Je rencontre néanmoins une difficulté: Lorsque je crée les déclinaisons pas de problème.

Je rencontre le problème lorsque je me mets dans la peau d'un client, je veux acheter un produit, j'ouvre le menu déroulant pour sélectionner la taille et la, j'ai devant moi L M S XL XS XLL XLLL.... l'ordre alphabétique quoi :)

J'aimerais pouvoir classer tout cela par taille (commencer du XS et finir par le XXXL).

Comment faire ? Merci d'avance !

Link to comment
Share on other sites

Je vais avoir besoin d'aide si possible =)

J'ai édité ORDER BY de la requête dans getAttributesGroups dans Product.php (qui se trouve dans classes).

J'ai également dézippé l'archive, mais après je fais quoi ? Je les mets où les "AdminAttributePosition.php", "attribute_repositon.php", "group_repositon.php" et "fr.php" ?

Merci d'avance pour vos réponses !

Link to comment
Share on other sites

  • 2 weeks later...

Voici le code tel que je l'ai édité, je ne pense pas avoir fait d'erreur puisque tout fonctionne parfaitement du côté du backoffice
Il n'y a que sur le front office que mes déclinaisons ne veulent pas s'organiser dans l'ordre:

public function getAttributesGroups($id_lang)
   {
       return Db::getInstance()->ExecuteS('
       SELECT ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name,
       a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`
       FROM `'._DB_PREFIX_.'product_attribute` pa
       LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
       LEFT JOIN `'._DB_PREFIX_.'attribute` a ON a.`id_attribute` = pac.`id_attribute`
       LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
       LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON a.`id_attribute` = al.`id_attribute`
       LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group`
       WHERE pa.`id_product` = '.intval($this->id).'
       AND al.`id_lang` = '.intval($id_lang).'
       AND agl.`id_lang` = '.intval($id_lang).'
       ORDER BY ag.`position`, a.`position`');
   }

Link to comment
Share on other sites

Bonjour Bliss,

Depuis que j'ai mis à jour Prestashop (1.3), les déclinaisons ne sont plus dans l'ordre que je souhaite malheureusement.. J'ai cherché, je ne sais pas d'où ça peut venir.
Pourtant comme tu l'as dit, dans le BO tout est bien rangé ! Mais sur le site.. c'est une autre histoire :(

Link to comment
Share on other sites

Je viens de prendre connaissance de ce plugin et j'ai rencontré le même problème. Une petite heure de passé sur le code m'a permi de résoudre le problème (peut être en en créant un autre ?)

Dans le fichier /product.php (pas /classes/Product.php), aux alentours de la ligne 300 vous trouvez ceci :

foreach($groups AS &$group)
   natcasesort($group['attributes']);



natcasesort trie les résultats de la requête sql après coup, donc j'ai commenté ces deux lignes et mtn ca marche :)

Merci de signaler si qqn se rend compte que cette modification reporte d'autres problèmes :)

Link to comment
Share on other sites

Bonjour,

De mon coté le classement ne marche pas: malgré la modification apportée dans le /classes/Product.php ET dans le /product.php...
Quelqu'un a-t-il le même problème que moi ? J'aimerais ne pas avoir à feinter sur les nom de déclinaisons pour qu'elles s'affichent dans un ordre correcte.

Merci !

Link to comment
Share on other sites

Ma réponse concerne la version 1.3.1 (j'en ai pas testé d'autres)

Quelle modif as-tu fait dans product.php (celui de la racine donc) ? J'ai trouvé aucune indication concernant ce fichier.. il me semble en tout cas..

Link to comment
Share on other sites

J'ai la version 1.3.1 de Prestashop, comme toi.

J'ai commenté les lignes 285 et 286 du fichier /product.php:

           //foreach($groups AS &$group)
               //natcasesort($group['attributes']);



J'ai modifié la ligne 1045 du fichier /classes/Product.php de la manière suivante:

ORDER BY ag.`position`, a.`position`



je suis étonné que ça marche chez toi et pas chez moi, j'ai du rater quelque chose de majeur ...

Merci de ton aide

PS: j'ai bien pensé à modifier l'ordre dans l'onglet 'Attribute Ordering' du panneau de config.

Link to comment
Share on other sites

sinon, si vous ne voulez pas vous casser le tête, et avoir un outil qui fonctionne, jetez un oeil du côté des outils que propose Tomer (c'est payant certes, mais si pratique - voir attributeorder) je m'en sers tous les jours. (bon je vais me faire taper sur les doigts, bicose je fais la promo d'un module payant...) désolé. je le ferais plus. ;-)

Link to comment
Share on other sites

  • 2 weeks later...
  • 3 weeks later...

Sinon :

Dans la base tu utilises le champ color pour les tailles (enfin comme je synchronise via des fichiers csv par tache cron et fichier batch d'un soft de gestion de stock).
Genre le nom : xs et dans color :001, s 002, m 003 etc..

Dans la classe Product.php tu ordonne par color

Et dans le "controlleur" product.php tu conditionnes par un if is_color == 1 (donc une couleur) alors tu ordonnes par la fonction php sinon (une taille dans mon cas) tu laisses l'ordre de la requete sql

Voili, voila :)

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour, j'ai trouvé la solution et vais donc la partager, testé seulement avec la version 1.3.1.1
Attention le premier fichier product.php est celui qui se trouve à la racine de la boutique, et le second Product.php est celui qui se trouve dans le fichier /classes/

Dans /product.php à la ligne 286

Remplacer

natcasesort($group['attributes']);



par

$group['attributes'];



(Je préfère faire cela plutôt que le supprimer)


Dans /classes/Product.php à la ligne 1735

Remplacer

ORDER BY al.`name`');



par (si vous souhaitez que vos déclinaison soit classé par ordre de création des déclinaisons dans Attributs et groupes)

ORDER BY a.`id_attribute`');



ou par (si vous souhaitez que vos déclinaisons soit classé dans le même ordre que vous les avez créé dans votre fiche produit)

ORDER BY pa.`id_product_attribute`');



Edité pour proposer les deux solutions de classement

Link to comment
Share on other sites

  • 6 months later...

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