Tutoriels

#Prestashop : Changer l’ordre des groupes d’attributs grâce à l’override

#Prestashop : Changer l’ordre des groupes d’attributs grâce à l’override

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 :

[code lang= »php » firstline= »2190″ highlight= »2204″]
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`’);
}
[/code]

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 :

[code lang= »php » firstline= »1″ highlight= »19″]
<!–?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`’);
}

}
?>
[/code]

Et voilà !!