doud62 Posted December 20, 2015 Share Posted December 20, 2015 Bonjour, L'affichage des tailles dans mes produits ne me satisfait pas. Il faudrait que mes tailles (pointures de chaussure) soient affichées dans l'ordre croissant. De base c'est le cas mais ma boutique fonctionne en synchronisation avec une boutique physique qui créé des attributs de manière très étrange empêchant le fonctionnement normal de ce tri par ordre croissant. Peu importe, quoiqu'il en soit je souhaiterait que le tri ne se fasse plus par le nom mais plutôt par la référence produit qui elle me permettrait sans doute de faire ce tri comme je l'entends. Dans mon fichier classes/Products.php j'ai la fonction getAttributesGroup() et à la dernière ligne je peux choisir l'ordre qui est actuellement comme ceci : ORDER BY ag.`position` ASC, a.`position` ASC, agl.`name` ASC'; Que dois-je remplacer pour effectuer un ordre par référence ? Merci d'avance ! Link to comment Share on other sites More sharing options...
Baba deCode Posted December 21, 2015 Share Posted December 21, 2015 (edited) Salut, essaye agl.`reference` si ca ne marche pas il faut allez voir dans la base de donnée et trouver le champs correspondant aux references des attributs Edited December 21, 2015 by Alexandre-KM (see edit history) Link to comment Share on other sites More sharing options...
doud62 Posted December 21, 2015 Author Share Posted December 21, 2015 Salut, merci de ta réponse ! J'ai essayé mais tous les attributs disparaissent dans le front office... La référence apparaît dans la table ps_product_attribute et porte le nom de "reference". As-tu une autre idée ? Link to comment Share on other sites More sharing options...
Baba deCode Posted December 21, 2015 Share Posted December 21, 2015 oui c exact, du coup c'est cette table qu il faut connecter a la requete: public function getAttributesGroups($id_lang) { if (!Combination::isFeatureActive()) { return array(); } $sql = 'SELECT pa.`reference`, 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, product_attribute_shop.`id_product_attribute`, IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`price`, product_attribute_shop.`ecotax`, product_attribute_shop.`weight`, product_attribute_shop.`default_on`, pa.`reference`, product_attribute_shop.`unit_price_impact`, product_attribute_shop.`minimal_quantity`, product_attribute_shop.`available_date`, ag.`group_type` FROM `'._DB_PREFIX_.'product_attribute` pa '.Shop::addSqlAssociation('product_attribute', 'pa').' '.Product::sqlStock('pa', '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`) '.Shop::addSqlAssociation('attribute', 'a').' WHERE pa.`id_product` = '.(int)$this->id.' AND al.`id_lang` = '.(int)$id_lang.' AND agl.`id_lang` = '.(int)$id_lang.' GROUP BY id_attribute_group, id_product_attribute ORDER BY ag.`position` ASC, a.`position` ASC, agl.`name`, pa.`reference` ASC'; return Db::getInstance()->executeS($sql); } je suis pas sur que le select pa.`reference` soit necessaire Link to comment Share on other sites More sharing options...
doud62 Posted December 21, 2015 Author Share Posted December 21, 2015 Merci de la réponse, avant d'essayer la modification, qu'est-ce qui a été changé exactement hormis le "pa.`reference`" à la fin ? Link to comment Share on other sites More sharing options...
Baba deCode Posted December 21, 2015 Share Posted December 21, 2015 le pa.`reference` au debut dans le SELECT, je sais pas si tu en a besoin donc je pense pas que ce soit utile Link to comment Share on other sites More sharing options...
doud62 Posted December 21, 2015 Author Share Posted December 21, 2015 J'ai essayé et dans chaque cas cela ne fonctionne pas, l'ordre reste le même... Voici le code que j'ai : public function getAttributesGroups($id_lang) { if (!Combination::isFeatureActive()) return array(); $sql = 'SELECT pa.`reference`, 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, product_attribute_shop.`id_product_attribute`, IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`price`, product_attribute_shop.`ecotax`, product_attribute_shop.`weight`, product_attribute_shop.`default_on`, pa.`reference`, product_attribute_shop.`unit_price_impact`, product_attribute_shop.`minimal_quantity`, product_attribute_shop.`available_date`, ag.`group_type` FROM `'._DB_PREFIX_.'product_attribute` pa '.Shop::addSqlAssociation('product_attribute', 'pa').' '.Product::sqlStock('pa', '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`) '.Shop::addSqlAssociation('attribute', 'a').' WHERE pa.`id_product` = '.(int)$this->id.' AND al.`id_lang` = '.(int)$id_lang.' AND agl.`id_lang` = '.(int)$id_lang.' GROUP BY id_attribute_group, id_product_attribute ORDER BY ag.`position` ASC, a.`position` ASC, agl.`name`, pa.`reference` ASC'; return Db::getInstance()->executeS($sql); } Link to comment Share on other sites More sharing options...
Baba deCode Posted December 21, 2015 Share Posted December 21, 2015 ok remplace: ORDER BY ag.`position` ASC, a.`position` ASC, agl.`name`, pa.`reference` ASC'; par ORDER BY pa.`reference` ASC'; pour tester voir... Link to comment Share on other sites More sharing options...
doud62 Posted December 21, 2015 Author Share Posted December 21, 2015 C'est presque ça ! Par contre il ne gère pas les demi-tailles. Sur une de mes fiches produit, la taille 40,5 apparaît avant la taille 40. Même chose, 42,5 apparaît avant la taille 42. Comment faire ? Link to comment Share on other sites More sharing options...
Baba deCode Posted December 21, 2015 Share Posted December 21, 2015 La les attributs sont classés par reference d attrribut en ascendant donc il suffit de mettre la bonne reference Link to comment Share on other sites More sharing options...
doud62 Posted December 21, 2015 Author Share Posted December 21, 2015 Bah mes références sont comme ça : Taille 40 : SMNMD-DIA-DI-5F-86-40Blue Corsair Taille 40,5 : SMNMD-DIA-DI-5F-86-40,5Blue Corsair Peut-être la virgule qui gène ? Link to comment Share on other sites More sharing options...
Baba deCode Posted December 21, 2015 Share Posted December 21, 2015 ouais essaye un point ou alors essaye 405 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now