Lorsqu’un produit a des déclinaisons dans votre boutique Prestashop, l’affichage des groupes d’attributs dans la page produit se fait par ordre alphabétique sur le nom public.

L’astuce consiste à changer le nom (pas le nom public) en ajoutant un numéro au début (ex : 01, 02 etc…).

Prestashop : groupe attributs

Grâce à l’override, nous allons changer la façon dont les groupes d’attributs sont classés : nous les classerons par leur nom.

1.Récupérer la fonction qui gère l’affichage des groupes d’attributs

Cette fonction (getAttributesGroups) se trouve dans la classe Produts.php de Prestashop :

   
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\`, pa.\`unit\_price\_impact\`, pa.\`minimal_quantity\`
		  
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\` = '.(int)($this->id).'
		  
AND al.\`id\_lang\` = '.(int)($id\_lang).'
		  
AND agl.\`id\_lang\` = '.(int)($id\_lang).'
		  
ORDER BY agl.\`public_name\`, al.\`name\`');
	  
}
  

2.Création d’un fichier Product.php pour l’override

Ce fichier doit être dans le dossier override/classes.

Nous allons recopier dans ce fichier la fonction getAttributesGroups et modifier “ORDER BY” pour classer les groupes d’attributs par nom et non plus par nom public :

Fichier Product.php :

  
<!--?php class Product extends ProductCore { 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.*
		  
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\` = '.(int)($this->id).'
		  
AND al.\`id\_lang\` = '.(int)($id\_lang).'
		  
AND agl.\`id\_lang\` = '.(int)($id\_lang).'
		  
ORDER BY agl.\`name\`');
	  
}

}
  
?>
  

Et voilà !!