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.