Jump to content

Cacher automatiquement les catégories vides


Recommended Posts

  • 9 months later...
  • 1 year later...
  • 8 months later...

Bonjour,

 

d'après ce tuto :

ainsi que leur commentaire indiquant comment récupérer le nombre exact de produits dans une catégorie et ses sous-catégories :

[...] Pour pallier à cela, il faut soit attribuer les produits de la sous-catégorie à la catégorie parente, soit modifier le code pour que la catégorie parente affiche le nombre total de produits contenus dans ses sous-catégories.

 

Voici la réponse que j'apporterai en utilisant la seconde solution de Prestacrea :

Fichier PHP : récupération du nombre de produits :

Modifier '/override/classes/category.php', ajouter :


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, category_shop.`position` ASC
');

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';
$result_products_nbr = Db::getInstance()->ExecuteS('
SELECT COUNT(pcp.id_product) as totalProducts
FROM '._DB_PREFIX_.'category_product pcp
LEFT JOIN '._DB_PREFIX_.'product pp ON pp.id_product = pcp.id_product
INNER JOIN '._DB_PREFIX_.'category pc ON pc.id_parent = pcp.id_category
INNER JOIN '._DB_PREFIX_.'category_product pcp2 ON pcp2.id_category = pc.id_category
LEFT JOIN '._DB_PREFIX_.'product pp2 ON pp2.id_product = pcp2.id_product
WHERE pcp.id_category='.$row['id_category'].' AND pp.active=1 AND pp2.active=1');
$row['products_nbr'] = $result_products_nbr[0]['totalProducts'];
}
return $result;
}

 

Là on a donc récupéré le nombre de produits dans la catégorie courante, ainsi que dans ses sous-catégories, accessible dans les fichiers templates avec la variable : ({$subcategory.products_nbr})

 

On peut donc avec cette variable choisir de masquer les sous-catégories vides :

 

Fichier TPL :

Modifier le fichier '/themes/montheme/category.tpl':

Là où on a :

<ul>{foreach from=$subcategories item=subcategory}

Ajouter avant le "<li>" :

{if $subcategory.products_nbr>0}
<li>

Puis à la fermeture de l'élément liste :

</li>
{/if}

 

 

Voilà, je pense que ça peut être amélioré.

Sachant que la première solution est plus simple : affecter le produit à chacune de ses catégories parentes.

Edited by Intra (see edit history)
Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,

 

Je ne sais pas si ça peut aider mais j'ai pour le moment caché les catégories vides (menu gauche)

Je préciser que mes produits sont affectés aux catégories parentes

Dans le fichier modules/blockcategories.php

J'ai ajouté cette ligne :

AND (c.id_category IN (SELECT id_category FROM `'._DB_PREFIX_.'category_product`) OR c.`id_parent` = 1)

Aux alentours de la ligne 174 (requête SQL chargée d'envoyer les données)

 

A adapter aux autres besoins, chez moi ça fonctionne

 

Cdt,

Link to comment
Share on other sites

  • 3 years later...

Bonjour,

 

Je relance ce post pour demander si quelqu'un à une solution pour la version 1.6.1.12 de prestashop car le tuto précédent ne fonctionne pas chez moi.

 

Je vous remercie d'avance.

 

Cordialement

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...