Prestashop 1.6

Ouvrez le fichier modules/blockcategories/blockcategories.php (la version actuelle est 2.9.3) et modifiez la fonction hookFooter tel que :

public function hookFooter($params)
{
    //...
    if (!$this->isCached('blockcategories.tpl', $cacheId))
    {
        //...
        foreach ($result as &$row)
        {
            // Cacher les catégories et sous-catégories vides
            // On récupère le nombre de produits que contient la catégorie...
            $result_products = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
                SELECT COUNT(c.id_product) as number
                FROM `'._DB_PREFIX_.'category_product` c
                LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = c.`id_product`
                WHERE c.`id_category` = '.(int)$row['id_category'].' AND p.`active` = 1');
            $total_products = $result_products[0]['number']+0;

            // ... Et s'il y en a, on garde la (sous-)catégorie
            if ($total_products)
            {
                $resultParents[$row['id_parent']][] = &$row;
                $resultIds[$row['id_category']] = &$row;
            }
        }
    }
    //...
}

Voilà ! Pensez à vider le cache et le tour est joué ☺

Prestashop 1.7

Ouvrez le fichier modules/ps_categorytree/ps_categorytree.php (la version actuelle est 2.0.0) et modifiez la fonction getCategories tel que :

private function getCategories($category)
{
    //...
    foreach ($result as &$row) {
    // Cacher les catégories et sous-catégories vides
    // On récupère le nombre de produits que contient la catégorie...
    $result_products = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
        SELECT COUNT(c.id_product) as number
        FROM `'._DB_PREFIX_.'category_product` c
        LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = c.`id_product`
        WHERE c.`id_category` = '.(int)$row['id_category'].' AND p.`active` = 1');
    $total_products = $result_products[0]['number']+0;

    // ... Et s'il y en a, on garde la (sous-)catégorie
    if ($total_products)
    {
        $resultParents[$row['id_parent']][] = &$row;
        $resultIds[$row['id_category']] = &$row;
    }

    return $this->getTree(/*....*/);
}

Voilà ! Pensez à vider le cache et le tour est joué ☺

Historique

  • 2019-07-20 : Ajout du code pour Prestashop 1.7.