Jump to content
abatonime

Cacher automatiquement les catégories vides

Recommended Posts

Bonjour,

Est-il possible de cacher automatiquement aux clients toutes les catégories qui ne contiennent pas d'articles.

Je sais comment faire manuellement, avec les groupes. (ne pas autoriser une catégorie au groupe Défaut)

Cordialement,
Olivier.

  • Like 1

Share this post


Link to post
Share on other sites

Bonjour,

Je relance ce topic car j'ai aussi besoin de savoir s'il existe un paramétrage pour masquer les catégories (ou sous catégories) ne contenant aucun produit.

Quelqu'un a une réponse ?

Cordialement,
Sébastien

  • Like 1

Share this post


Link to post
Share on other sites

Bonjour,

 

Je relance le sujet car je ne trouve pas la solution...

 

Merci d'avance.

Share this post


Link to post
Share on other sites

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)

Share this post


Link to post
Share on other sites

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,

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More