DEVELOPPEUR WEB FREELANCE Expert e-commerce Prestashop depuis 2010

21 mai
2012

Afficher le nombre de produits dans les sous-catégories - Prestashop 1.4

Afficher le nombre de produits dans les sous-catégories - Prestashop 1.4

Nous allons voir ici comment afficher le nombre de produits contenus dans chacune de vos sous-catégories sur vos pages catégories.

Les pages catégories de Prestashop n'affichent que l'image et le nom des sous-catégories. Il est pourtant utile d'avoir la possibilité de visualiser le nombre de produits contenus dans chaque sous-catégorie car cela permet de faciliter la navigation au sein de votre boutique et d'éviter les clics inutiles, notamment dans le cas des sous-catégories vides.

Modification du fichier PHP

La première étape consiste à créer la variable utilisée pour récupérer le nombre de produits contenus dans chaque sous-catégorie.

 

Pour cela, rendez-vous dans le dossier classes de votre boutique Prestashop et ouvrez le fichier nommé Category.php.

 

Remplacez les lignes :

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;

Par ces lignes :

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(ac.`id_product`) as totalProducts
FROM `'._DB_PREFIX_.'category_product` ac
LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = ac.`id_product`
WHERE ac.`id_category` = '.$row['id_category'].' AND p.`active` = 1');
$row['products_nbr'] = $result_products_nbr[0]['totalProducts'];
}
return $result;

 

Modification du fichier TPL

Nous allons à présent ajouter la variable que nous venons de créer au fichier tpl concerné pour que le résultat apparaisse sur la boutique.

 

Rendez-vous donc dans le dossier de votre thème et ouvrez le fichier nommé category.tpl.

 

Remplacez la ligne :

<a href="{$link->getCategoryLink($subcategory.id_category, $subcategory.link_rewrite)|escape:'htmlall':'UTF-8'}">{$subcategory.name|escape:'htmlall':'UTF-8'}</a>

Par cette ligne :

<a href="{$link->getCategoryLink($subcategory.id_category, $subcategory.link_rewrite)|escape:'htmlall':'UTF-8'}">{$subcategory.name|escape:'htmlall':'UTF-8'} ({$subcategory.products_nbr})</a>

 

Forcer la compilation smarty pour la prise en compte des modifications

Lorsque vous effectuez des modifications dans vos fichiers tpl, la compilation smarty doit être active sinon vos modifications ne sont pas prises en compte. Vous pouvez régler l'activation de la compilation smarty dans l'onglet Préférences de votre back-office.

Auteur de cet article : Sabrina ROUSSEAU

Développeur web freelance spécialiste de la solution e-commerce Prestashop depuis 2010. Créatrice du site web Prestacrea ainsi que des produits qui y sont proposés.

COMMENTAIRES

4 commentaires

Prestrain

05/09/2012

Bonjour,

je souhaite utiliser votre approche pour masquer les liens vers des sous-catégories ne contenant aucun produit (mais qui pourront en avoir plus tard).
Je rencontre alors un problème : lorsque des produits sont présents dans des sous-catégories de sous-catégories (ex : Rubriques-catégories-sous-catégories : tout ça dans la même table bien sûr) avec une profondeur de 2 ou 3, la sous-catégorie parente ne contient aucun produit avec le code que vous proposez.

Auriez-vous une solution pour pallier à ce problème?

Merci d'avance!

Prestacrea

23/09/2012

Bonjour,

Ce comportement est normal.

Le code expliqué dans ce tutoriel permet d'afficher le nombre de produits dans chaque catégorie, indépendamment des éventuelles sous-catégories. Donc par exemple, si vous avez une catégorie sans produits avec une sous-catégorie contenant 5 produits, la catégorie parente affichera 0 produit tandis que la sous-catégorie affichera 5 produits.

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

Prestrain

18/10/2012

Bonjour,

Merci de votre réponse, je n'avais pas eu le temps de résoudre mon problème, et je pensais m'orienter vers la seconde solution que vous proposez, soit modifier le code pour obtenir le nombre total des produits des sous-catégories.
Je n'avais pas pensé à la première solution que vous proposez, affecter un produit à sa catégorie parente, (table: ps_category_product) qui m'a l'air d'être la solution la plus efficace!

Merci encore!

Alain

02/02/2013

Bonjour,

Juste pour vous remercier pour ce bout de code bien utile.

Bien sincèrement
Cet article a été rédigé il y a plus d'un an. Les commentaires sont fermés.