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”
Block Catégories Prestashop
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”

Tri des produits prestashop

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;
    }
 
}