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

Suite au premier tutoriel réalisé pour la version 1.4 de Prestashop, j'ai reçu de nombreuses demandes pour un tutoriel adapté pour la version 1.5. Je vais donc détailler ici la procédure pour afficher le nombre de produits contenus dans vos sous-catégories sur la version 1.5 de Prestashop.
Les manipulations sont quasiment identiques à celles de la version 1.4, seul le code diffère un peu. Nous allons également ajouter le mot "produit" ou "produits" selon le nombre de produits contenus dans la catégorie.
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'}" class="cat_name">{$subcategory.name|escape:'htmlall':'UTF-8'}</a>
Par cette ligne :
<a href="{$link->getCategoryLink($subcategory.id_category, $subcategory.link_rewrite)|escape:'htmlall':'UTF-8'}" class="cat_name">{$subcategory.name|escape:'htmlall':'UTF-8'}</a> ({$subcategory.products_nbr} {if $subcategory.products_nbr > 1}{l s='products'}{else}{l s='product'}{/if})
Ici nous avons ajouté un petit code permettant d'afficher le mot "produit" ou "produits" en fonction du nombre de produits contenus dans la catégorie. Pensez à traduire ce mot dans l'onglet Traductions de votre back-office.
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.
3 commentaires
Christian
14/08/2014
Quand je modifie le fichier category.php j'ai l'erreur suivante Parse error: syntax error, unexpected 'accolade de fin' in /classes/Category.php on line 543
C'est l'accolade présente d'origine, juste après le code inséré, je ne peux pas la poster ici, pas de code html autorisé apparemment :(
Pouvez-vous m'aider ? Merci par avance.
Guillaume
29/08/2014
Merci d'avance !
Prestacrea
09/09/2014
Guillaume : Cette méthode fonctionne également sur la version 1.6 de Prestashop