N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.
Voici comment lister les produits et les catégories Prestashop par ordre alphabétique :
( Cette méthode est valide avec prestashop 1.4.x et prestashop 1.5.x , je ne l’ai pas testé avec la version 1.6 )
Les procédures à exécuter sont les suivantes :
- Ordre des catégories dans le module blockCatégories
- Ordre des produits dans les préférences produits
- Override de la récupération des sousCatégories
Ordre des catégories dans le module blockCatégories :
Dans l’administration « modules » , rechercher le module « bloc catégories »
Dans la configuration du module , cocher « par nom » dans l’option Trier et sauvegarder
Ordre des produits dans les préférences produits
Dans l’administration « Préférences » puis « Produits »
Dans « pagination / Tri par défaut » sélectionner l’option « Nom du produit » et sauvegarder
Override de la récupération des sousCatégories
Afin de pouvoir trier les sous catégories d’une catégorie par ordre alphabétique il va être nécessaire d’overrider la fonction getSubCategories de la class « Category »
Créer donc un fichier Category.php dans le dossier « override/classes » avec le contenu suivant.
Version prestashop 1.4
<?php class Category extends CategoryCore { /** * Return current category childs * * @param integer $id_lang Language ID * @param boolean $active return only active categories * @return array Categories */ public function getSubCategories($id_lang, $active = true) { if (!Validate::isBool($active)) die(Tools::displayError()); $groups = FrontController::getCurrentCustomerGroups(); $sqlGroups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1'); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT c.*, cl.id_lang, cl.name, cl.description, cl.link_rewrite, cl.meta_title, cl.meta_keywords, cl.meta_description FROM `'._DB_PREFIX_.'category` c LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND `id_lang` = '.(int)($id_lang).') LEFT JOIN `'._DB_PREFIX_.'category_group` cg ON (cg.`id_category` = c.`id_category`) WHERE `id_parent` = '.(int)($this->id).' '.($active ? 'AND `active` = 1' : '').' AND cg.`id_group` '.$sqlGroups.' GROUP BY c.`id_category` ORDER BY `level_depth` ASC, cl.name ASC'); //On change le tri de c.position à cl.name foreach ($result AS &$row) { $row['id_image'] = (file_exists(_PS_CAT_IMG_DIR_.$row['id_category'].'.jpg')) ? (int)($row['id_category']) : Language::getIsoById($id_lang).'-default'; $row['legend'] = 'no picture'; } return $result; } } |
Version prestashop 1.5
<?php class Category extends CategoryCore { /** * Return current category childs * * @param integer $id_lang Language ID * @param boolean $active return only active categories * @return array Categories */ public function getSubCategories($id_lang, $active = true) { if (!Validate::isBool($active)) die(Tools::displayError()); $groups = FrontController::getCurrentCustomerGroups(); $sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1'); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT c.*, cl.id_lang, cl.name, cl.description, cl.link_rewrite, cl.meta_title, cl.meta_keywords, cl.meta_description FROM `'._DB_PREFIX_.'category` c '.Shop::addSqlAssociation('category', 'c').' LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND `id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').') LEFT JOIN `'._DB_PREFIX_.'category_group` cg ON (cg.`id_category` = c.`id_category`) WHERE `id_parent` = '.(int)$this->id.' '.($active ? 'AND `active` = 1' : '').' AND cg.`id_group` '.$sql_groups.' GROUP BY c.`id_category` ORDER BY `level_depth` ASC, cl.name ASC '); //Changement du tri de position à name foreach ($result as &$row) { $row['id_image'] = file_exists(_PS_CAT_IMG_DIR_.$row['id_category'].'.jpg') ? (int)$row['id_category'] : Language::getIsoById($id_lang).'-default'; $row['legend'] = 'no picture'; } return $result; } } |