Ajouter des conditions d’affichage dans PrestaShop

Intégration, PrestaShop
  • Accueil
  • Blog
  • Ajouter des conditions d’affichage dans PrestaShop

Un billet plutôt technique concernant l’intégration sous PrestaShop parce qu’il arrive bien souvent d’être confronté à ce type de problème : afficher ou non un élément en fonction d’une condition.
Pour ce faire, on va faire appel à nos connaissances smarty et plusieurs variables.

Première étape, on va télécharger PrestaShop.

Principales variables smarty dans PrestaShop

Pour rappel donc, voici une liste des principales variables de PrestaShop que l’on peut utiliser sur n’importe quelle page :
{$base_dir}
Url de votre site web, racine du site. Utile et indispensable lorsque vous insérez des liens, je déconseille fortement de mettre des liens en dur directement dans votre code mais plutôt d’utilisez cette variable et toute les autres qui suivent, car le jour où vous migrez d’hébergement ou de nom de domaine, cela pourrait vous causer beaucoup de problèmes.
{$base_dir_ssl}
Idem via le protocol https.
{$content_dir}
Url vers votre dossier racine du site, peut changer en fonction des paramètres SSL. A ne pas confondre avec {$basedir}, cette variable vous donne l’Url complète jusqu’au dossier racine.
{$img_ps_dir}
Url vers le dossier img situé à la racine de votre boutique.
{$img_dir}
Url vers le dossier img de votre thème.
{$css_dir}
Url vers le dossier css de votre thème.
{$js_dir}
Url vers le dossier js situé à la racine de votre boutique.
{$tpl_dir}
Url vers votre dossier thème.
{$modules_dir}
Url vers le dossier modules. Utilisée principalement dans le code des modules.
{$mail_dir}
Url vers le dossier mail.
{$lang_iso}
Code ISO du language courant.
{$come_from}
Url absolue de la page précédente.
{$shop_name}
Nom de votre boutique.
{$cart_qties}
Nombre total de produits dans votre panier.
{$cart}
Contenu de votre panier sous forme de tableau.
{$currencies}
Liste des devises disponibles sous forme de tableau, retrouvez la liste via ce code {foreach from=$currencies item=c}{$c.name}{/foreach}
{$id_currency_cookie}
Identifiant de la devise actuelle.
{$languages}
Liste des langages disponibles dans la boutique sous forme de tableau, retrouvez la liste via ce code :{foreach from=$languages item=c}{$c.name}{/foreach}
{$logged}
Permet de vérifier si le client est connecté, utile pour afficher des éléments uniquement aux visiteurs enregistrés. (ex : {if $logged}Vous êtes connecté{/if}
{$page_name}
Nom de la page actuelle (ex: index)
{$customerName}
Nom et prénom du client actuellement connecté.
{$priceDisplay}
Paramètre actuel de l’affichage des prix (identifiant).

Affichage d’un élément soumis à condition

Dans le même principe, on peut utiliser d’autres variables smarty dans PrestaShop pour filtrer l’affichage de certains éléments notamment.
Exemple 1 : afficher un texte seulement sur la catégorie ayant l’identifiant numéro 3

{if $id_category == 3}
{l s='mon texte visible seulement dans la catégorie 2'}
{/if}

Exemple 2 : afficher un texte seulement sur les catégories de niveau 2

{if $category->level_depth == 2}
{l s='mon texte affiché sur une catégorie de niveau 2'}
{/if}

Les possibilités sont énormes d’autant que les variables sont nombreuses et peuvent être affichées en insérant le bout de code {debug} dans le fichier .tpl en question. En effet, par défaut les variables de catégorie présentées ci-dessus ne sont pas utilisables sur le fichier product.tpl etc.
Un petit tour sur la documentation smarty ne sera qu’un plus pour vous perfectionner et aussi combiner les conditions d’application des variables, voir la documentation smarty.
Vous avez toutes les clés en mains pour franchir les questions d’intégrations fréquentes dans PrestaShop.

187 commentaires sur “Ajouter des conditions d’affichage dans PrestaShop

  1. Bonjour Arnaud,
    j’affiche une meta index sur mes pages catégorie avec une condition
    {if $page.page_name == ‘category’}

    {/if}

    Mais je voudrais ne pas afficher la même meta sur 2 catégories. Comment faire ma condition ?
    merci pour ton aide sous ps 1.7

    1. Bonjour,
      Le mieux serait d’afficher {$category.meta_description} pour avoir la description par catégorie.
      Bonne journée

  2. Bonjour Arnaud
    Je reviens à la charge pour essayer de sauver les quelques cheveux que je n’ai pas encore arraché.
    Je cherche toujours à afficher sur la page détail du produit un bouton supplémentaire (à coté du bouton “ajouter au panier”) lorsque le produit est d’occasion (état “used”).
    La version PS est la 1.7.6
    le fichier que je tente de modifier est “product-add-to-cart.tpl”
    et les modifications que j’y ai ajouté sont

    {if $product.condition.type == ‘used’}Faire une offre{/if}

    ça ne fonctionne pas et je désespère.
    Par avance merci
    Serge

    1. Bonjour Serge,

      Il est possible que la condition que vous avez utilisée dans votre code ne fonctionne pas comme prévu. Je vous recommande de vérifier que la valeur de la variable {$product.condition.type} est bien “used” pour les produits d’occasion. Pour cela, vous pouvez ajouter un bloc {debug} dans votre template pour afficher le contenu de cette variable.

      Voici un exemple de code qui devrait vous aider :
      {if $product.condition.type == ‘used’}
      {debug}
      Faire une offre
      {/if}

      Après avoir ajouté ce code, actualisez la page de détail du produit et vérifiez que la valeur de la variable {$product.condition.type} est bien “used”. Si ce n’est pas le cas, vous devrez peut-être modifier la condition pour qu’elle corresponde à la valeur de votre champ d’état d’occasion.

      Si la valeur de la variable est correcte, mais que le bouton supplémentaire ne s’affiche toujours pas, vous pouvez également vérifier que le fichier que vous modifiez est bien utilisé par votre thème en effectuant une autre modification visible, comme ajouter du texte supplémentaire, et vérifier si cette modification est visible sur la page.

      J’espère que cela vous aidera à résoudre votre problème. N’hésitez pas à me faire savoir si vous avez des questions supplémentaires.

  3. Bonjour Arnaud,
    j’ai réussi à afficher le texte suivant les variants. Par contre, je voudrais afficher le nombre de variants, mais je ne trouve pas. As-tu une idée ?

    2ᵉ souci, j’ai besoin de ne pas afficher un élément selon une catégorie. Un listing produit d’une catégorie. Sais-tu comment créer ma condition ?
    merci pour ton aide précieuse.

    1. Bonjour Manu,
      Pour toutes ces conditions, le plus simple est de s’aider de {debug}, bon courage 🙂

  4. Bonjour Arnaud,
    je voudrais afficher un texte dans le listing produit pour indiquer que les produits ont plusieurs variant.
    Donc uniquement sur les produits avec des déclinaisons.

    Une idée ?, car je ne trouve pas grand choses sur le net.

    Merci pour ton aide 😉

    1. Bonjour Manu,
      Merci pour le commentaire.
      Peut être avec {if $product.variants}…{/if} de tête, à affiner avec {debug} je pense 😅

  5. Bonjour Arnaud
    Je fais suite à une question déjà posée (en août 2022) en prenant ma problématique différemment.
    Je cherche à déclencher l’affichage d’un bouton (lien vers formulaire) pour des produits d’occasion.
    Jusqu’à présent j’ai filtré par catégorie, mais ça ne fonctionne que pour les catégories principales et c’est assez contraignant.
    Je cherche à savoir s’il est possible de déclencher cet affichage, dans la page de détail du produit, avec l’état “used” et si oui, bien sur, comment ? 🙂
    Par avance merci

    1. Bonjour Rom94320,
      Merci pour ton commentaire,
      C’est possible via la condition {if $product.condition} bouton {/if}.
      A affiner car je donne la variable de tête 😅
      Bon courage !

  6. Bonjour Arnaud,
    j’ai besoin d’ajouter un texte selon un groupe de variant (attribut).
    J’ai mon id=”group_26″ ou data-product-attribute=”26″
    Ce sont les tailles, et j’ai besoin d’ajouter un lien vers le guide des tailles, mais uniquement avec cet id de variant.
    Une idée de la formule ?
    en vous remerciant pour votre aide.

    1. Bonjour Mélanie,
      Merci pour le commentaire.
      Il faut aller dans product-variant.tpl de tête et ajouter la condition dans le {foreach} qui boucle sur les groups.
      Bon courage !

  7. Bonjour Arnaud,
    je voudrais ne pas afficher un texte de catégorie à partir de la 2ᵉ page.
    Exemple, je voudrais ne pas afficher la description de ma catégorie à partir de ma 2eme page.
    (ou l’afficher uniquement sur la première page)

    Pour afficher le numéro de page, j’ai ceci : $smarty.get.page

    Mais je n’arrive pas à écrire la condition.

    Peux-tu m’aider ?

    1. Bonjour Mélanie,
      Affichez les variables via {debug} à placer dans votre .tpl.
      Vous aurez dans la popup de debug smarty une variable disponible du type “.pagination.pages.page”.
      Bon courage 😉

  8. Bonjour Arnaud,
    Une question bien particulière : j’ai une multiboutique et j’utilise le module de paiement par virement bancaire. Sur une seule boutique particulière, je souhaiterais remplacer le titre et les traductions de ce module par “paiement par prélèvement”. J’ai pu conditionner l’affichage des informations liées à ce module dans les différents tpl ({if isset($shop) && $shop.id ==1}), par contre le nom de l’option dans les modes de paiement est codé dans un fichier php, et je n’arrive pas à le faire fonctionner … J’ai essayé $this->context->shop->id & $id_shop=1 mais sans succès… Si vous avez une idée ?
    Merci d’avance 🙂

    1. Bonjour Ewa,
      Dans le php, vous pouvez utiliser la condition :
      if ( $this->context->shop->id == 1 ) {

      }
      Bon courage 🙂

  9. Merci Arnaud pour votre réponse positive.
    J’ai encore une question sur le même sujet.
    J’ai créé un nouveau layout pour mes 4 pages (catégorie).
    Dans mon header, j’ai la variable du nom de la page que je ne voudrais PAS afficher.
    Pouvez-vous me dire comment faire ?
    merci encore pour toutes vos informations 😉

  10. Bonsoir Arnaud,
    j’ai 4 catégories principales, qui ont des sous-catégories, mais la mise en page est la même que sur mes sous catégories.

    je voudrais ne pas afficher la colonne de gauche, les produits ainsi que les descriptions, afin de créer une page spéciale (enfin 4 pages dans un fichier TPL) et surtout pas comme les autres catégories.

    Comment faire pour ajouter la condition pour mes 4 id de catégories ?
    je pense qu’il faut ajouter la condition dans le fichier au niveau de la class “container position-static”
    mais comment afficher ma condition?
    merci pour votre aide

    1. Bonjour Sarah,
      Il faut utiliser la condition {if isset($category) && ($category.id == 1 || && $category.id == 2 || && $category.id == 3 || && $category.id == 4)}…{/if}
      Bon courage 😉

  11. Bonsoir Arnaud
    Merci pour cette réponse rapide.
    Non la catégorie fille concernée n’est pas chargée. Et dans ce cas que puis-je faire ?
    Cordialement
    Serge

    1. Bonjour rom94320,
      Dans ce cas, la condition ne peut pas fonctionner.
      Il faut soit déclarer la variable dans le controller de la page, soit utiliser une autre condition.
      Si c’est pour une catégorie, utiliser la catégorie par défaut par exemple.

  12. Bonjour Arnaud
    Tout d’abord merci pour ces précieuses informations et le temps passé à nous les diffuser.
    Je cherche à afficher sur la page de détail du produit un bouton particulier pour certaines catégories seulement. J’ai inséré le code suivant :
    {if $category->id == ‘261’||$category->id == ‘273’||$category->id == ‘274’||$category->id == ‘275’||$category->id == ‘276’||$category->id == ‘277’||$category->id == ‘282’} …BOUTON… {/if}
    dans le fichier product-add-to-cart.tpl
    ça fonctionne correctement pour les deux premières catégories qui sont des catégories “parentes”, mais pas pour les autres qui sont des “filles” de la 274 (sauf la 282 qui est fille de 274). Et je m’arrache les cheveux pour savoir comment contourner ce problème de catégorie parente…
    La version de PS est la 1.7.7.3
    Par avance merci

    1. Bonjour rom94320,
      Merci pour le message concernant l’intégration sous PrestaShop,
      Dans les pages catégories filles, ajoutez dans le tpl {debug} pour voir si {$category->id} est bien chargée.
      Si oui, vous pourrez l’utiliser.

  13. Bonjour Arnaud,
    Merci pour vos précieux tutos.
    Depuis hier je bloque sur un problème, je voudrais pouvoir ajouter un bloc texte en page d’accueil mais le temps de le préparer et de l’activer pour la première fois, je voudrais pouvoir le visualiser seul sans que les visiteurs ou les clients le voit.
    Je suis en version 1.7.6.1, je n’ai pas trouvé de variable pour connaitre l’IP du visiteur, je me suis donc rabattue sur {$customer.id}. je me connecte avec mon compte client qui est le 158, je teste :
    [code]
    {if $customer.id == “158”}
    {$htmlbox5.text nofilter}
    {/if}
    [/code]
    mais ça s’affiche pour n’importe lequel client.
    J’ai testé == 158 sans guillemet c’est pareil.
    Si j’utilise {if $customer.is_logged} ça le détecte bien, mais je veux pousser au seul client 158 connecté.
    Qu’est-ce que je fais mal ?

  14. Bonjour Arnaud, je souhaite créer 2 block distincts sur ma page produit. Dans un premier temps j’ai ma page produits et mes filtres grace à la navigation à facette mais dans le deuxième j’aimerais que les seuls produits affichés soient exactement ceux qui seraient liés à une valeur ou une caractéristique, par exemple: voir uniquement les produits qui auraient comme caractéristique “vêtements” mais pas sous forme de bouton, que ce le soit nativement. Comment faire ? je suis encore novice sur Prestashop. Merci !

    1. Bonjour Kevin,
      Vous décrivez le fonctionnement du module de navigation à facettes et c’est un module natif donc gratuit 😉

  15. Bonjour Arnaud,

    Je voudrai afficher un message si un produit est associé à un catégorie, un autre sinon.

    Mais les 2 messages s’afficheront si le produit associé à plusieurs catégories

    Voilà mon code sur prestashop 1.7

    {foreach from=Product::getProductCategoriesFull(Tools::getValue(‘id_product’)) item=cat}
    {if $cat.id_category == 548}
    Message AAAA
    {else}
    Message BBBB
    {/if}
    {/foreach}

    Merci d’avance

  16. Bonjour Arnaud,
    1000 merci pour votre réponse,
    ça marche très bien,
    Y’a t’il un moyen de faire apparaître que les catégories de 3ème niveau ? s’il faut rajouter une condition pour ingorer niveau 1 et 2
    Merci d’avance Arnaud.
    A bientôt

  17. Bonjour Arnaud,

    Merci pour ces tutos.

    Dans le cas ou un produit appartient à plusieurs catégories, pourriez-vous m’indiquer comment faire apparaitre dans une page produit ces noms de catégories (que le nom de la catégorie du DERNIER NIVEAU) en forme de “lien”
    Et si c’est possible exclure cet affichage sur 1 catégories.

    Le but est d’afficher dans mes pages produit à quelle catégories appartient ce produit.

    Merci d’avance pour votre aide

    1. Bonjour Nordine,
      Merci pour le commentaire.
      Je n’ai pas testé mais une condition du type devrait faire l’affaire :
      {foreach from=Product::getProductCategoriesFull(Tools::getValue('id_product')) item=cat}
      {$cat.name}
      {/foreach}

      A bientôt 😉

  18. Bonjour Arnaud,
    Merci beaucoup pour l’aide apportée concernant les conditions que l’on peu mettre sur un presta 1.6.
    Pour ma part je cherche à mettre une condition dans une liste déroulante :
    le monde entier peut commander mes produits mais je ne peux livrer que dans un seul pays (cadeau fleurs). J’aimerais savoir s’il est possible de n’afficher dans le menu déroulant du choix de l’adresse de livraison sur le site en “one page checkout” que les adresses créée par le client qui correspondent au pays de livraison ? Comment faire.
    Merci pour votre aide
    jp

    1. Bonjour Jean-Pierre,
      Allez sur l’affichage des pays dans l’admin puis en bas de page activez “Restreindre les pays sur la boutique aux pays desservis par les transporteurs actifs” puis restreignez vos transporteurs au pays souhaité.
      Bonne journée 🙂

  19. Bonjour Arnaud,

    Est-il possible d’effectuer une action en fonction de la catégorie du produit via custom.js ???

    J’ai besoin d’afficher une liste déroulante qui m’ouvre une série de liens. Pour se faire j’utilise ceci dans mon custom.js :

    /* TEST LISTE DEROULANTE AVEC DES LIENS */

    function ChangeUrl(formulaire){
    if (formulaire.ListeUrl.selectedIndex != 0){
    var url ;
    url = formulaire.ListeUrl.options[formulaire.ListeUrl.selectedIndex].value;
    open(url);
    }
    }

    if(prestashop.language.language_code==”fr”){

    if(category.id == ’79’){

    $(‘#step1′).after(” – Sélectionnez la taille – Test 1 Test 2 “);

    }

    }

    La liste déroulante fonctionne comme je le souhaite mais je n’arrive pas à écrire la condition if(category.id == ’79’) correctement, pour que cette liste ne s’affiche que sur les fiches produits de catégorie prestashop 79.

    Je galère depuis maintenant quelques jours, si jamais vous auriez une solution, j’en serais ravis !

    Bien à vous,

    Kévin CHARLIER

  20. Bonjour,

    Une astuce pour que afficher un texte seulement sur les catégories ayant l’identifiant numéro X prend en compte également ses sous-catégories ?

    Merci.

    1. Bonjour Jean-Pierre,
      Vous pouvez utiliser la condition suivante :
      {if $category.id == '3' || $category.id_parent == '3'}...{/if}
      Remplacez 3 par l’id de votre catégorie visée.
      A bientôt !

  21. Bonjour,

    Quel serait la condition pour afficher un texte seulement sur la catégorie ayant l’identifiant numéro X ainsi que l’ensemble de ses sous-catégories ?

    Cela afin d’éviter un code du genre : {if $category->id_category == ‘195’ OR if $category->id_category == ‘256’}

    Merci.

  22. Bonjour Arnaud
    Nous sommes en train de migrer de la 1.6 à 1.7
    Sur la 1.6, nous utilisions le code suivant dans product.tpl pour cacher une caracteristique sur la fiche produit, mais je ne vois pas ou rentrer cette fonction dans la 1.7 :

    {if isset($features) && $features}
    {foreach from=$features item=feature}
    {if $feature.id_feature != 2}
    {if isset($feature.value)}
    {$feature.name|escape:’html’:’UTF-8′} : {$feature.value|escape:’html’:’UTF-8′}
    {/if}
    {/if}
    {/foreach}
    {/if}

    Merci beaucoup
    Mark

    1. Bonjour Mark,
      Avec la variable {debug} vous allez pouvoir afficher les nouvelles variables dans PrestaShop 1.7.
      Vous allez trouver la solution avec cette astuce toute simple 😉
      Bon courage !

  23. Bonjour Arnaud, je reviens vers toi avec une demande pour cacher une page cms à tous mes client saut à un groupe de client (7). Comment doit-je mis prendre?
    et dans ma seconde demande, je voudrais cacher une catégorie (toutes les catégorie ou est placé le produit qui s’affiche dans ma page produit) à tous mes clients sauf au groupe (7).
    une grande aide serait la bienvenue. ps 1.6
    merci pour ton aide 😉

  24. Merci pour ta réponse.
    Justement je n’arrive pas à afficher les variables avec {debug}, c’est pour cela que je pose la question :p.
    Auriez-vous une autre idée ou la bonne façon d’utiliser debug sur un presta 1.6.1.23.
    D’avance merci.

    1. Bonjour Julien,
      Dans ce cas il faut essayer en plaçant {debug} dans le header.tpl / footer.tpl aussi.

  25. Bonjour,
    Super article, merci pour le travail.
    Pour ma part, dans le tunnel de conversion, je cherche à mettre une condition en fonction du montant total HT du panier.
    Dans shopping-cart.tpl, c’est $total_products qui est récupéré et quand je l’utilise dans mon fichier order-carrier.tpl ça ne fonctionne pas. Je cherche à faire quelque chose du genre :
    {if $total_products < 30}
    BLA BLA BLA
    {else}
    {/if}
    Auriez-vous une idée svp ?
    Vous en remerciant par avance.
    Julien

    1. Bonjour Julien,
      Il faut d’abord afficher les variables disponibles avec {debug} puis utiliser la bonne 😉
      Bon courage !

  26. Bonjour, Arnaud, et merci de votre réponse.
    Je me doutais bien que ça devait être compliqué, donc j’ai pensé à une autre solution, et j’ai finalement contourné ce problème.
    Mais merci quand même

  27. Bonjour,
    merci beaucoup pour votre article. Je suis tombé dessus en cherchant comment afficher les produits d’une catégorie sur une page CMS.
    Je galère depuis des jours sans trouver la solution :/
    Peut-être pourriez-vous m’aider ?
    Dans le page.tpl CMS, j’arrive très bien à cibler une page en particulier grâce à son ID {if $cms.id==8}{/if}
    Ce qui me manque, c’est commet récupérer les produits d’une catégorie particulière…
    #bouteilleàlamer
    Bonne journée,

    1. Bonjour Jacky,
      Dans votre cas, il faudrait dupliquer le module homefeatured et l’afficher sur un hook dédié sur la page cms ciblée.
      C’est le plus simple, bon courage 🙂

  28. Bonjour Arnaud,
    J’ai encore un souci avec des conditions d’affichage, et j’ai encore besoin de votre aide !
    J’ai un produit avec plusieurs attributs et valeurs et donc tout un tas de déclinaisons. J’ai un prix de base à 0€ et en fonction des attributs le prix change. Je souhaiterais avoir une des déclinaisons à 0€ donc sans impact sur le prix, et que dans la fiche produit et dans le récap panier, le prix du produit (0€) soit remplacé par un texte « demander le prix » ou qu’il soit non visible, mais que le prix reste affiché si l’attribut n’est pas sélectionné par le client !
    J’aimerais donc savoir quelle est la condition à écrire : si prix =0 alors affichage texte ou prix invisible
    Est-ce faisable ?
    Merci d’avance !

    1. Bonjour Perla,
      C’est possible pour la déclinaison à zéro et pour le texte mais là c’est de l’intégration sur-mesure.
      Contactez-moi par e-mail pour une intervention 😉

  29. Bonjour Arnaud,
    je voudrais afficher un lien (lien d’une page cms avec des videos) suivant la marque du produit de la page.
    Dans ma page produit, j’ai notamment le nom de la marque, et je voudrais ajouter en dessous un lien vers les vidéo de la marque. Mais certaines marque n’ont pas de video. Pouvez vous me dire la marche à suivre?
    merci pour vos infos

    1. Bonjour Manu,
      Il s’agit là d’un cas particulier, je pourrais regarder cela dans le cas d’une intervention si vous le souhaitez, contactez-moi par e-mail.

  30. Bonjour Arnaud et merci pour vos réponses rapides 🙂
    Dans votre réponse la ligne après (… pour y insérer une class ou id ce qui donne 🙂 ne s’affiche pas.
    Est-ce que du coup jedois mettre ma condition dans product-add-to-cart.tpl au niveau du <divclass=add> ?
    {if $product.id_category_default == 7 || $product.id_category_default == 8}
    <div class=”add1″>
    {else}
    <div class=”add”>
    {/if}
    Merci
    Ike92

    1. Bonjour Ike92,
      J’ai corrigé mon commentaire et le code est apparent à présent.
      A bientôt !

  31. Bonjour Arnaud,
    Je crois que j’ai trouvé la solution, j’ai ajouté dans catalog/product.tpl
    {block name=’product_add_to_cart’}
    {if $product.id_category_default == 7 || $product.id_category_default == 8}
    {include file=’catalog/_partials/product-add-to-cart1.tpl’}
    {else}
    {include file=’catalog/_partials/product-add-to-cart.tpl’}
    {/if}
    {/block}
    puis j’ai crée dans catalog/partials “product-add-to-cart1.tpl” et j’ai modifie
    <
    div class=”add”> en
    <
    div class=”add1″>
    pour finir dans theme.css j’ai ajouté ” .product-quantity .add1″ et modifié les attributs CSS.
    Est-ce que tout ca c’est bon pour toi.
    Merci d’avance
    Ike92

    1. J’ai répondu avant de lire le second commentaire, ça doit fonctionner aussi, je n’ai pas testé mais je pense que c’est bon.
      Je dirai juste que ma solution est plus rapide et vu qu’on est juste sur une modification CSS sans modification HTML, alors je ne passerais pas par 2 fichiers .tpl mais là c’est mon avis 😉

  32. Bonjour Arnaud,
    Je ne trouve pas la solution pour un site Prestashop 1.7.3 qui est en développement .
    Comment je peux modifier la CSS de la page produit pour certaines catégories.
    Je veux modifier l’affichage de la page produits “product.tpl” uniquement (par exemple), pour la catégorie ID= 4 et les sous-catégories ID= 12,13, et 14.
    Pour être plus précis je veux modifier les propriétés de la class “.product-customisation” et de “.product-quantity .add” pour la catégorie ID= 4 et les sous-catégories ID= 12,13, et 14.
    Merci d’avance pour votre aide 🙂
    Ike92

    1. Bonjour Ike92,
      Merci pour ton commentaire.
      Dans votre cas, il faut utiliser une condition du type {if $id_category_default == 4}{/if} sur une balise html pour y insérer une class ou id ce qui donne :
      [code]
      <div {if $id_category_default == 4}class="nomdelaclasse"{/if}></div>
      [/code]
      Il ne vous restera plus qu’à ajouter le CSS nécessaire en ciblant la class sous la forme : .nomdelaclasse{…}
      A bientôt 🙂

  33. Bonjour Arnaud, je cherche à afficher les catégories soeur (niveau 2) de la catégorie par défaut du produit en cours. (sur la page produit)
    pouvez vous me dire comment procéder?
    j’ai regardé sur le forum et google, mais je ne trouve aucune infos.
    merci pour votre aide

    1. Bonjour Manu,
      Je pense que pour afficher les catégories enfants de la catégorie par défaut du produit consulté, il faut s’orienter sur la fonction getSubCategories de la Class Category.php et l’utiliser dans la Class Product.php, je n’ai pas testé mais ça doit fonctionner.
      Bon courage 😉

  34. Bonjour Arnaud,
    J’ai à nouveau un problème avec les conditions d’affichage : je dois ajouter un bandeau sur les produits appartenant à une catégorie particulière. Dans le product-list.tpl c’est facile : j’utilise {if $category->id_category == xxx}, par contre comment adapter cette condition au tpl d’un module (produits phares sur la homepage) ? J’imagine qu’il faut d’abord déclarer le produit et sa catégorie pour pouvoir vérifier s’il appartient à la catégorie recherché, mais j’ai beau essayer, ça ne marche pas… Merci d’avance pour votre aide 🙂

    1. Bonjour Ewa,
      Si on regarde le fichier homefeatured.tpl, on voit qu’il affiche les produits avec le fichier product-list.tpl cf {include file=”$tpl_dir./product-list.tpl” class=’homefeatured tab-pane’ id=’homefeatured’} donc c’est une liste produit classique.
      Si on regarde les anciennes versions du module, il faut utiliser la variable {if $product.id_category_default == 5}…{/if}
      A bientôt et n’hésitez pas à laisser un avis Google : https://goo.gl/Z4mMjt 🙂

    2. Bonsoir Arnaud et merci pour votre réponse. J’étais “un peu” pressée et j’ai trouvé une autre méthode (le module produits phares n’est pas celui natif de presta mais celui développé par Business Tech). Si cela peut aider quelqu’un, elle permet conditionner l’affichage sur une catégorie et sur toutes catégories enfants : {assign findcat [[‘id_category’ => 1400], [‘id_category’ => 1400]]}
      {if Product::idIsOnCategoryId($product.id_product, $findcat)} ……. {/if}
      En tout cas merci beaucoup !!!

  35. Bonsoir Arnaud, je viens seulement de voir votre réponse, merci, et j’ai voté pour vous !
    Pour faire suite à ma question c’est ce qu’il y a entre {if} et {/if} qui me manque, les 3 petits points en fait, le code qui efface le panier. Et je vois que je ne suis pas la seule avec le même soucis !!

    1. Merci pour le commentaire Google, ça fait toujours plaisir !
      Sur PrestaShop 1.6 et le thème Bootstrap, voici le code à mettre ou pas dans la condition pour afficher / masquer le bouton d’ajout panier :
      [code]
      <div class="box-cart-bottom">
      <div{if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || (isset($restricted_country_mode) && $restricted_country_mode) || $PS_CATALOG_MODE} class="unvisible"{/if}>
      <p id="add_to_cart" class="buttons_bottom_block no-print">
      <button type="submit" name="Submit" class="exclusive">
      <span>{if $content_only && (isset($product->customization_required) && $product->customization_required)}{l s=’Customize’}{else}{l s=’Add to cart’}{/if}</span>
      </button>
      </p>
      </div>
      {if isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS}{$HOOK_PRODUCT_ACTIONS}{/if}
      </div> <!– end box-cart-bottom –>
      [/code]

  36. Bonjour, j’ai besoin d’afficher le nom de la catégorie suivant un id. Pouvez vous me dire comment faire?
    exemple avec : {$category->nleft|escape:’html’:’UTF-8′}
    presta 1.6.1
    merci

  37. Bonsoir Arnaud,
    Un pb avec des conditions d’affichages, et hop je reviens sur votre page, parce que vous répondez toujours !
    Je souhaiterais dans le product.tpl, cacher le bouton “add to cart” en fonction d’une ou plusieurs catégories de produits, donc si je procède de la même manière que vous m’avez déjà indiqué à savoir :
    if $category->id == 3 || $category->id == 4 || $category->id == 5}
    … code A
    {else}
    … code B
    {/if}
    Je ne sais pas quel code mettre pour que le panier disparaisse de la page produit.
    J’ai besoin de votre aide, s’il vous plait !
    Merci par avance.

    1. Bonjour Perla,
      Merci pour le commentaire !
      Si avec ça vous me laisser un avis sur Google, vous illuminerez mon weekend, c’est simple et rapide : https://goo.gl/Z4mMjt
      Pour masquer le bouton d’ajout panier sur la fiche produit, soit vous utilisez l’option “Disponible à la vente” pour chaque produit, soit vous utilisez une condition par catégorie.
      Condition d’affichage par catégorie du bouton d’ajout panier sur PrestaShop 1.6 en éditant le fichier www/themes/mon_theme/product.tpl :
      [code]
      {if $product->id_category_default == 3}…{/if}
      [/code]
      Condition d’affichage par catégorie du bouton d’ajout panier sur PrestaShop 1.7 en éditant le fichier www/themes/mon_theme/templates/catalog/_partials/product-add-to-cart.tpl :
      [code]
      {if $product.id_category_default == 3}…{/if}
      [/code]
      En remplaçant le 3 par l’id de la catégorie par défaut souhaitée.
      Bon courage 🙂

  38. Bonjour Arnaud,
    Est-il possible de cacher le bouton “add to cart” dans la fiche produit (donc product.tpl) et pour certaines catégories de produit ? quel serait le code ?

    1. Bonjour Justomaker,
      Je viens de donner la solution à Perla justement 🙂

  39. j’ai résussi à faire ce que je voulais, il me manquait une )
    merci pour vos conseil.
    Une dernière demande, je cherche à afficher le nom de la description courte dans la fiche produit.
    j’arrive à afficher la catégorie par default du produit
    {$product_category.name}
    mais pas sa description courte.
    Pourriez vous m’aider? je ne doit pas etre loin….
    merci

    1. Bonjour Manu,
      Dans votre cas, utilisez {debug} et cherchez dans la popup de debug Smarty : vous devriez y trouver “category_default” ou “category-default”, et vous n’aurez plus qu’à utiliser cette variable où bon vous semble 🙂

  40. j’ai testé autre chose, cela s’affiche, mais toujours avec un 1 devant le nom de la catégorie
    1Idées cadeaux
    une solution?
    merci

  41. Bonjour,
    j’ai besoin d’ajouter le nom de la catégorie en cours (uniquement sur les catégories de produit) dans la colonne de gauche. J’ai donc ajouté le code dans le header.tpl
    {$category->name|escape:’html’:’UTF-8′}
    je voudrais restrindre uniquement cet affichage aux catégorie de produit dans la colonen de gauche.
    Car le bloc s’affiche dans toutes les colonne de gauche (mon compte, blog, magasins,..)
    auriez vous une solution?
    merci
    presta 1.6.1.11

    1. Bonjour Manu,
      Dans votre cas, dans le header.tpl, ajoutez :
      [php]
      {if $page_name == ‘category’}
      {$category->name|escape:’html’:’UTF-8′}
      {/if}
      [/php]
      A bientôt 🙂

    2. Ou doit-je le placer dans le header?
      j’ai ceci dans le bout de code:
      {if isset($left_column_size) &amp;&amp; !empty($left_column_size)}
      Boutique {$category->name|escape:’html’:’UTF-8′}{$HOOK_LEFT_COLUMN}
      {/if}
      puis-je le placer à la fin du code de la page?

    3. Vous pouvez placer le code où vous souhaitez faire afficher les éléments tout simplement 😉
      Je conseille juste après l’ouverture de la colonne de gauche.

  42. Bonjour,
    Le site n’est pas encore en production, l’url ne vous servira pas à grand chose. Par contre entre temps j’ai trouvé la réponse à ma question:
    J’ai ajouté {if $cms.id == 35} style=”display:none”{/if} dans la div que je ne voulais pas voir apparaitre sur la page cms 35 et quelques règles css pour ajuster l’affichage des autres éléments de cette page. Je ne sais pas si c’est la solution “idéale” mais elle a au moins le mérite de fonctionner.
    Merci d’avoir pris le temps de me répondre.

    1. Bonjour, Le beau Arnaud et merci pour votre réponse. Je vais essayer de faire remonter les infos de stock dans CMS alors. Encore merci pour votre réponse.
      Cordialement

    2. j’ai une petite question mais je ne sais pas ou la posée. comment changer le nom des images du module homeslider car elles sont pas tres bonne pour le SEO EX: 297735609894e45b67325d841b39444d7ab8b0fc_aiguilles.png

    3. Bonjour Jp,
      Ce n’est pas le bon article pour poser ce commentaire mais pour vous aiguiller, il s’agit de modifier le fichier homeslider.php 😉

  43. Bonjour Arnaud et merci pour ce tuto
    Je n’arrive pas à trouver la bonne syntaxe pour ce que je veux faire, à savoir masquer le module “blockcms” sur une seule de mes pages cms.
    La console debug smarty me donne les variables suivantes:
    Smarty_Variable Object (3)
    ->value = Array (9)
    id_cms_category => “1”
    position => “11”
    indexation => “1”
    meta_description => “”
    meta_keywords => “”
    meta_title => “”
    link_rewrite => “”
    content => ”
    &lt;
    p style=”text-align: just…”
    id => 35
    ->nocache = false
    ->scope = “file:cms/page.tpl”
    Mais mes tentatives pour masquer ce bloc sur la page cms qui a donc l’id 35 restent infructueuses (chacun son métier en fait 😉 )
    Merci d’avance pour le petit coup de main !
    Ah oui au fait, version 1.7.3

  44. Bonjour;
    Je voudrais faire disparaitre une div de l’une de mes pages cms lorsque l’un de mes produits est hors stock.
    J’ai essayé plein de solutions mais en vain.
    Voici mon essai qui me parait le plus proche de la solution.

    Si le cœur vous en dit, un petit coup de main serait le bienvenu.
    Merci pour votre lecture

    1. le code n’a pas été pris en compte dans mon précédent message le voici:
      if (product.id_product == 24 AND $product.quantity == 0) {(“contenu a faire diparaitre”);}
      Merci a tous pour votre lecture.

    2. Dans votre cas, on peut utiliser aussi :
      {if $product->quantity < 1 AND $product->id_product == 24}…{/if}

    3. Bonjour Vain,
      Merci pour votre commentaire,
      Par défaut, vous n’avez pas l’info de stock d’un produit sur une page CMS, mais sur une page produit vous pouvez utiliser le code suivant {if $product->quantity < 1}...{/if}

  45. Bonjour Anrnaud,
    Merci pour ce tuto, çà me permet de mieux comprendre le mécanisme.
    Par contre, j’aimerais reprendre l’id de la categorie dans les produits dans la home page (product.tpl)
    J’ai fait ce code:
    {if $category.id === 12000}
    mon code…
    Le soucis c’est que cette variable n’est pas reprise sur la Home, je dois donc la ovverrider, mais ou ? dans override/class/controller/frontcontroller.php ?
    Je me suis inspiré de votre tuto mais je ne sais pas quelle code je dois ajouter, juste pour récupérer l’id sur la Home.
    Merci encore pour votre aide.

    1. Bonjour Dayna,
      Merci pour votre commentaire,
      Le problème sur la homepage, c’est le module homefeatured qui affiche les produits or ce module n’affiche que les produits d’une seule catégorie donc ça ne fonctionne pas dans ce cas en effet !

  46. Bonjour Arnaud,
    Désolée de revenir vers vous pour un problème similaire, j’ai pourtant essayé d’utiliser les astuces précédentes mais décidément je n’arrive pas à comprendre les subtilités de prestashop.
    Je suis sous 1.6.1.18. Ma boutique n’est pas encore en ligne (mode maintenance)
    Je vais vendre des produits finis, et des produits sur mesures.
    J’aimerais que sur ma page product-list pour certains produits seulement (les sur-mesures) ajouter à coté ou au dessus du prix le texte “à partir de :”, pour que mes clients comprennent que ce n’est pas le prix de vente, mais le prix de départ avant les options qu’ils vont choisir dans la page produit.
    Je ne sais pas où placer la condition, j’ai fait plusieurs essais, parfois rien n’apparaît, parfois le prix n’a plus son design, et parfois erreur prestashop. Donc je sollicite à nouveau votre gentillesse.
    Merci d’avance.
    Perla

    1. Bonjour Perla,
      Le souci n’est pas de créer la condition mais de la relier à une option dans l’admin.
      Par exemple, vous pouvez utiliser la condition de catégorie si tous vos produits d’une catégorie sont avec un prix “à partir de” et ça pourrait donner :
      {if $category->id == 3 || $category->id == 4 || $category->id == 5}
      … {l s=’à partir de’} XX €
      {else}
      … XX €
      {/if}
      A bientôt !

  47. Merci, Merci, Merci énormément Arnaud. Depuis le temps que je galérais, ça marche !
    Cependant j’ai du modifier $product->id_category_default == 3 car le bouton modifié s’affichait pour toutes les catégories, alors j’ai mis $category->id == ‘3’ (sans oublier les ‘) et là nickel.
    Précision aussi qui peut servir à d’autres : le bouton A (est le bouton modifié) et B le bouton initial “add to cart” (parce que dans votre réponse pour moi la version secondaire était celle que je voulais modifier)
    J’ai un peu bidouillé pour arriver à ce que je voulais, mais en tout cas j’ai réussi et c’est grâce à vous !
    Une petite question subsidiaire, si je veux qu’il s’affiche dans plusieurs catégories, ex (3,4,5) comment doit on écrire la condition : id == ‘3,4,5’ ou id == ‘3’,’4′,’5′ ou point virgule ????

    1. Bonjour Perla,
      Super nouvelle et heureux de vous avoir aidé 🙂
      Si on veut afficher un élément dans plusieurs catégories, il faut l’encadrer par la condition sous cette forme :
      {if $category->id == 3 || $category->id == 4 || $category->id == 5}
      … code A
      {else}
      … code B
      {/if}
      Bonne journée !

  48. Bonjour Arnaud, et merci de répondre si gentiment à toutes les questions que les débutants prestashop se posent. C’est rare, car même après avoir acheté leur module les développeurs ne répondent pas !
    J’ai regardé et “essayé” toutes les réponses précédentes susceptibles de résoudre mon pb mais décidément ça me résiste !! grrr
    Je souhaite simplement modifier l’intitulé du bouton ajouter au panier dans les pages produit d’une catégorie spécifique, en l’occurrence la catégorie id=4
    ci après le code product.tpl (ou théoriquement ça se passe)
    {if !isset($restricted_country_mode) && !$PS_CATALOG_MODE}
    {if (!$allow_oosp && $product->quantity available_for_order OR $PS_CATALOG_MODE}
    {*
    {l s=’Add to cart’}
    *}
    {else}
    {/if}
    {/if}
    ….
    Pouvez vous m’éclairer svp, savoir quel code il faut ajouter et à quel endroit !
    je suis sous prestashop 1.6.1.18 et un thème prestacrea !
    Merci d’avance

    1. Bonjour Perla,
      Merci pour le commentaire, ça fait toujours plaisir 🙂
      Dans votre cas, on peut utiliser la catégorie par défaut du produit et ça donnerait :
      {if !isset($restricted_country_mode) && !$PS_CATALOG_MODE && $product->id_category_default == 3}
      … le code avec votre bouton avec un texte A
      {else}
      … le code avec votre bouton avec un texte B
      {/if}
      Remplacez le chiffre 3 par l’id de la catégorie et insérer dans ce {if} le code pour afficher le bouton dans sa première version, puis après le {else} le code du bouton dans sa version secondaire.
      A bientôt !

  49. Bonjour Arnaud
    Merci pour la condition, je vais voir ça de plus près, mais pour l’instant impossible de la faire fonctionner dans le crossselling.tpl, j’ai droit à une page blanche…
    Cette condition vaut-elle pour prestashop 1.6.1 ?
    Cordialement,
    Fred

    1. Bonjour Fred,
      Je vous ai donné la trame mais je n’ai pas vérifié la variable exacte qui doit être {$orderProduct} de tête donc normal que mon code ne fonctionne pas en l’état 😉
      Oui c’est valable pour PS 1.6 et 1.7 également.
      A bientôt !

    2. Bonjour Arnaud,
      Ceci explique cela 😀
      Un gros merci en tout cas, je vais tester ça cette am.
      Cordialement,
      Fred

    3. Bonjour Arnaud,
      Petit retour sur la variable, je pense vraiment que je suis pas doué, pas moyen de l’intégrer sans une erreur, j’ai tout essayé, rien à faire.
      Du coup j’ai tenté avec {if $orderProduct.show_price}, et là, pas d’erreur, et dès que je décoche les cases dispo à la vente et voir le prix, le produit n’apparait plus, donc c’est tout bon!!
      Merci encore pour le temps que vous avez pris pour me répondre!
      Cordialement,
      Fred

    4. Bonjour Fred,
      Super nouvelle ! Content de savoir que mes conseils vous ont aidé 🙂
      A bientôt !

  50. Bonjour,
    Merci pour ce site qui est une mine d’infos, j’ai un petit soucis sur lequel je bute depuis quelques temps déjà. Par souci de référencement, je ne désactive pas les produits et les mets en visibilité nulle part avec une petite phrase dans la description courte indiquant qu’il ne fait plus partie du catalogue.
    Jusque là tout va bien, les produits n’apparaissent pas dans la liste des produits.
    Par contre, le module cross-selling continue de montrer ces produits, et je ne sais pas quelle condition ajouter pour indiquer que si le produit n’est pas visible, il ne doit pas être montré.
    Auriez-vous une idée?
    Cordialement,
    Fred

    1. Bonjour Fred,
      Vous devez pouvoir utiliser la condition suivante dans le module {if $product->visibility == ‘both’}…{/if}
      A bientôt 🙂

  51. Bonjour Arnaud,
    Je cherche à faire quelque chose qui me parait simple mais…peut être pas.
    Je voudrais afficher un texte différent du bouton “ajouter au panier ” en fonction de la quantité du produit choisit.
    exemple : si la quantité est = à 1 j’affiche commander un échantillon
    si la quantité est >1 j’affiche ajouter au panier
    Je suis sous presta 1.6.17
    Merci par avance pour votre aide.
    Cordialement
    Fabien

    1. Bonjour Fabien,
      Merci pour le commentaire,
      Vous pouvez très bien faire ceci avec la condition {if $product->quantity < 2}J’ajoute un échantillon{else}J’ajoute au panier{/if}
      Remarque : ce code n’est pas dynamique, il faut un rafraichissement de page si la quantité diminue en ajax.
      Bonne intégration 🙂

  52. Bonjour je souhaiterai faire afficher l’icone promotion en automatique sans coché la case dans le produit.
    Je m’explique, quand je créer une promotion je voudrais que l’image en promotion s’affiche automatiquement sans avoir à cocher la case promotion dans le produit dans le produit .
    Peut on le faire avec des condition si oui comment ?
    Merci d’avance à tous de vos réponses.
    Je suis sur prestashop 1.6.1.18
    Bonne journée

    1. Bonjour Jean Philippe,
      Merci pour le commentaire,
      C’est tout à fait possible, dans le product-list.tpl vous pouvez afficher les variables en insérant {debug} (pensez à enlever cette balise une fois le travail terminé).
      Vous avez alors la liste des variables et vous pourrez utiliser par exemple {if $product.reduction > 0}…{/if}
      Je n’ai pas testé, c’est un code à adapter 😉

  53. Bonjour,
    merci pour cet article fort utile.
    Je suis sur prestashop 1.6.1.5 – thème iqit warehouse
    J’ai certains articles qui possèdent une réduction de prix selon la quantité. Je souhaiterais faire apparaitre ce prix réduit directement en dessous de la vignette produit avec la mention “à partir de” sur la liste des produits.
    ex : mon produit est à 12,50€ de base et 10,50€ à partir de 5 – et je souhaiterais que ce soit marqué A partir de 10,50€ sur la petit vignette de présentation du produit (et une fois à l’intérieur de la fiche produit afficher le prix de base avec le prix dégressif en dessous)
    Le but étant d’indiquer directement au client le prix dégressif pour qu’il se rende compte de la promotion.
    Merci beaucoup

    1. Bonjour Arnaud,
      Merci pour le retour,
      Et bien dans le fichier product-list.tpl, vous devez afficher les variables avec {debug} puis trouver celles qui vous convient pour ensuite afficher le “à partir de” 😉

  54. Bonjour, je cherche à afficher une seule caractéristique dans ma liste de produits cependant cette condition ne fonctionne pas {block name=’product_features’}
    {if $product.features}
    {foreach from=$product.features item=feature}
    {if $feature.id_feature == 8}{/if}
    {$feature.name} : {$feature.value}
    {/foreach}
    {/if}
    {/block} merci de votre aide

    1. Bonjour Bruno,
      Votre demande concerne PrestaShop 1.7 aussi éditez le fichier www/themes/classic/templates/catalog/_partials/miniatures/product.tpl
      Collez à l’endroit souhaitez la code suivant en adaptant selon l’affichage souhaité :
      [code]
      {if $product.features}
      {foreach from=$product.features key=k item=feature}
      <p>{$feature.name} : {$feature.value}</p>
      {/foreach}
      {/if}
      [/code]
      A bientôt !

    2. Re bonjour,
      Merci infiniment Arnaud pour votre réponse, j’ai finalement trouvé à résoudre mon problème comme ceci, en suivant correctement votre tuto.
      Voila si ça peut aider mon bout de code à adapter bien sur
      {foreach from=$product.features item=feature}

      {if $feature.name == ‘Poids’}
      {l s=’Poids: ‘ d=’Shop.Theme.Catalog’}{$feature.value}
      {/if}
      {/foreach}
      et encore mille merci

  55. Bonsoir,
    Vraiment merci de m’avoir permis d’économiser des heures de travail ! J’ai utilisé la balise debug sur le product.tpl étant donné que je voulais afficher un élément en fonction du prix du produit sur la fiche de ce dernier.
    J’ai actualisé et la une fenêtre s’est ouverte avec la liste des variables. J’ai recherché le prix de mon produit et à gauche j’ai trouvé la variable. En plus des variables prestashop nous affiche les valeurs, il est donc plus simples de faire le lien.
    Encore merci !

  56. Bonjour Arnaud,
    J’ai une autre question. Dans ma boutique en ligne j’ai beaucoup de références produits en ligne et beaucoup qui n’ont pas forcément de photos, dû à notre activité.
    Par conséquent, je cherche à afficher dans un premier temps les produits avec photo. Je pense qu’il faut que je modifie mon fichier product-list.tpl mais je n’arrive pas à trouver la condition qui va me permettre de mettre les produits avec image en premier ($product.id_image)
    Merci d’avance pour ton aide.
    Julien

    1. Julien,
      Utilisez {debug} dans votre .tpl pour afficher les variables que vous pouvez ensuite utiliser pour créer vos conditions 😉

    2. Bonjour, il suffit de placer la balise {debug} dans le fichier .tpl souhaité et d’actualiser la page pour afficher les variables disponibles.

  57. Bonjour Arnaud,
    Sur mon site e-commerce, j’ai 7 niveaux de profondeur du site. Du coup, il me charge tous mes produits sur chaque page et rend donc le temps de chargement très long, ce qui peut faire fuir mon prospect / client.
    Je cherche donc à insérer une condition qui va me masquer les produits si je ne suis pas dans la profondeur de catégorie 6.
    J’ai trouvé l’endroit à modifier, seulement, cela me retire aussi mes produits sur la page d’accueil. J’aimerais faire une condition dans un if en lui disant que si tu es sur la page d’accueil, tu m’affiche les produits et si tu es dans la profondeur de catégorie 6 tu m’affiche aussi les produits.
    Le fichier concerné est le fichier product-list.tpl
    Ma condition sur la profondeur marche parfaitement mais je n’arrive pas à mettre la condition pour que les produits s’affichent également sur la page d’accueil.
    Voici ma condition :
    <
    div class=”product-container” itemscope itemtype=”http://schema.org/Product”>
    {if $page_name != "http://maPageAccueil" && $category->level_depth >= 6 }
    <div class="left-block">
    ...

    Avec maPageAccueil qui est la page d’accueil de mon site web.
    Peux-tu me conseiller ?
    d’avance merci.
    Julien

    1. Sinon j’ai également essayé
      {if $page_name != “http://maPageAccueil” || $id_category == 9 }
      Ma catégorie 9 correspond à ma catégorie “Promotion”, c’est elle qui est affiché sur ma page d’accueil …
      Cela ne marche pas non plus.

    2. Hello Julien,
      La condition sur la page d’accueil est du type {if $page_name != ‘index’}…{/if} que tu peux combiner avec les autres conditions 🙂
      ++

  58. Bonjour Arnaud,
    Je cherche à afficher un texte selon une déclinaison… j’avais pensez à modifier le code ean mais sans résultat 🙁
    Une solution ?
    Merci 😉

    1. Bonjour Elbow, sur quelle version de PrestaShop êtes-vous ? Avez-vous une url ?

    1. Votre site est en maintenance donc on ne peut pas voir la page d’accueil 🙂

    2. Affichez les erreurs via le fichier config.inc.php et vous verrez votre erreur car la condition est bonne.

  59. Bonjour, je depoussiere ce topic 😉
    je cherche a affiche un texte seulement sur la home page
    Le texte en question se trouve lui dans un module ..
    j’ai testé ca :
    {if $page_name == ‘accueil’} coucou {/if}
    et
    {if $category == 2} coucou {/if}
    avec des variante pour tester … rien ne fonction …
    pouvez vous m’aider ?

    1. Bonjour, la condition suivante suffira 🙂
      [php]{if $page_name == ‘index’}votre contenu{/if}[/php]

  60. Bonjour,
    Sous presta 1.6.0.11, je souhaiterais utiliser un template productX.tpl pour les produits d’une ou plusieurs catégories. En suivant un post (https://www.prestashop.com/forums/topic/392095-how-to-different-producttpl-template-on-a-page-per-product-and-a-per-category-basis/) j’arrive bien à utiliser un autre template quand je sélectionne non pas une catégorie mais un produit (son ID)
    le code ok pour 1 produit = 1 template
    if (Tools::getValue(‘id_product’)==3){
    $this->setTemplate(_PS_THEME_DIR_.’productAlt1.tpl’);
    } else {
    $this->setTemplate(_PS_THEME_DIR_.’product.tpl’);
    }
    Quand je veux travailler sur tous les produits d’une catégorie en utilisant le code ci-dessous ça ne fonctionne pas, la template reste celle par défaut et je ne comprends pas pourquoi.
    if ($this->category->id==11){
    $this->setTemplate(_PS_THEME_DIR_.’productStore.tpl’);
    } else {
    $this->setTemplate(_PS_THEME_DIR_.’product.tpl’);
    }
    Merci de votre aide.
    Ludovic

    1. Finalement, ce code fonctionne parfaitement, j’avais juste un problème dans mes catégories.

  61. Christophe, je viens de tester dans category.tpl [php]{if $category->level_depth == 2}level2{/if}[/php] et ça marche bien 🙂

  62. Bonsoir Arnaud,
    Je suis sous PS 1.6.1.1 et je souhaiterais faire la chose suivante : je voudrais que les “subcategory-name” présent en haut de chaque page de catégorie ne soit affichées qu’à partir des catégories de niveau 3.
    Est ce que ce code est le bon ?
    {if $category->level_depth == 3}
    {$subcategory.name}{/if}
    Et, où est ce que je peux placer ce code ? Dans le fichier category.tpl ? Et si oui, je peux le placer n’importe où ?
    Merci d’avance de votre aide.
    Bonne soirée

  63. Bonjour vivient, je viens de tester dans un category.tpl et ça fonctionne bien :
    [php][/php]
    {if $page_name == ‘category’ && $category->id == 2}

    htmlanimaux

    {elseif $page_name == ‘category’ && $category->id == 9}

    htmlbienetre

    {elseif $page_name == ‘category’ && $category->id == 45}

    htmlmaisonjardin

    {/if}
    [php][/php]

  64. Bonjour
    j’ai un petit probleme a résoudre :
    j’ai 3 modules html avec des informations spécifiques que je ne souhaite afficher que sur leur catégorie respectives :
    module_name=htmlanimaux que sur la catégorie 3
    module_name=htmlbienetre que sur la catégorie 4
    module_name=htmlmaisonjardin que sur la catégorie 13
    Quelle serait la façon la plus simple ?
    Merci pour vos lumières

  65. Bonjour, vous pouvez utiliser la condition dans le product.tpl :
    [code]
    {if $product->id_category_default == 13}
    …contenu à afficher…
    {/if}
    [/code]
    A bientôt 🙂

  66. Merci pour la réponse rapide,
    Permet-moi de poser la question d’une façon differente :
    comment pourrai-je afficher l’attribut des produits dans la page “product-list.tpl”
    Je pense utiliser les attributs comme class CSS et jouer avec le display:none et block pour masquer et afficher les produits en fonction de leur attribut
    Merci de nouveau 🙂

  67. @Karim : Bonjour, merci pour votre demande aussi envoyez-moi un mail pour votre demande en me donnant une url et tous les détails.

  68. @Zoux : Bonjour, vous pouvez utiliser la fonction native de PrestaShop “désactiver le produit à la vente” à gérer par produit ou bien utiliser en class directement sur l’élément à griser : [code]<a class="{if $product->id_category_default}bouton_grise{/if}" href="#">Ajouter au panier</a>[/code]
    Il ne reste plus qu’à appliquer le style adéquat 🙂

  69. Hum … Et si clients du groupe 3 aussi… sinon autant vider mes stock 🙂
    Donc je reprends :
    {if $product->id_category == 2 && $customer->id_group == 3 } ( c’est possible ça ?)
    GRISER et RENDRE IMPOSSIBLE AJOUT
    {/if}
    Merci

  70. Bonjour, je souhaiterais afficher une div uniquement dans certaines pages cms, j’ai essayé :
    {if $category->id_cms_category == 3}
    txt!
    txt
    01
    txt
    Contactez nous !
    {/if}
    En activant la console j’obtient les erreurs suivantes :
    Notice: Undefined index: category
    Notice: Trying to get property of non-object
    Si quelqu’un a une solution 🙂
    Merci d’avance 🙂

    1. @Pierre : Bonjour, pour vous répondre si on affiche le debug smarty en insérant dans le cms.tpl {debug} on obtient les variables que l’on peut utiliser notamment :
      conditions cms prestashop
      Donc ça devrait donner dans le cms.tpl à l’endroit souhaité :
      [code]
      {if $cms->id == 4}
      mon contenu…
      {/if}
      [/code]
      Au boulot 🙂

  71. Bonjour !
    J’aimerais un peu d’aide svp 🙂
    J’affiche un module seulement sur quelques produits, en éditant mon module.tpl comme suit :
    {if $smarty.get.id_product == 2} action
    {/if}
    je voudrais en fait aller un peu plus loin et dire que “Cela ne s’affiche que dans TOUS les produits de la catégorie dont l’id est 2 ou 3”
    Merci

    1. @Karim : Bonjour, dans votre cas vous pouvez utiliser la variable {$product->id_category_default} ou {$product->category} 😉

    2. Merci beaucoup pour votre réponse.
      Donc ca serait en ajoutant l’id de la catégorie comme ceci ? :
      {$product->id_category_default == 2} par exemple et sans {if] {/if} ?

    3. @Karim : Pour une condition il faut effectivement ajouter {if ma_condition}…{/if} 😉

    4. Merci alors figures toi que j’ai essayé avec les deux ça n’a rien donné. Et la j’ai juste tenté un truc avant de dormir et ça a marché c :
      {If $category->Id == XX} action {/if}
      A mettre dans le tpl de tout module comme condition d’affichage sur la fiche d’un produit

  72. Bonjour,
    Merci pour votre réponse. J’y suis presque mais c’est pas encore ça !
    Voici mon attribut (11) et ma valeur (119) :
    j’aimerai que le texte apparaisse uniquement si on choisi la valeur 119 (j’ai trois valeurs dans cet atrtibut )
    j’ai essayé :
    {if $combinations == 119}votre contenu{/if}
    sans succes
    en utilisant la fonction {$combinations|print_r} cela me donne ces infos :
    Array ( [6995] => Array ( [attributes_values] => Array ( [11] => Un coupon de 24cm sur 75cm (demi laize) ) [attributes] => Array ( [0] => 120 ) [price] => 2.916667 [specific_price] => [ecotax] => 0 [weight] => 0 [quantity] => 8 [reference] => [unit_impact] => 0.00 [minimal_quantity] => 1 [available_date] => [id_image] => -1 [list] => ‘120’ ) [6994] => Array ( [attributes_values] => Array ( [11] => Un coupon de 48cm sur 75cm (demi laize) ) [attributes] => Array ( [0] => 121 ) [price] => 4.583333 [specific_price] => [ecotax] => 0 [weight] => 0 [quantity] => 0 [reference] => [unit_impact] => 0.00 [minimal_quantity] => 1 [available_date] => [id_image] => -1 [list] => ‘121’ ) [6993] => Array ( [attributes_values] => Array ( [11] => La laize (150cm) sur une longueur de mon choix (en cm) ) [attributes] => Array ( [0] => 119 ) [price] => 0.27775 [specific_price] => [ecotax] => 0 [weight] => 0 [quantity] => 100 [reference] => [unit_impact] => 19.00 [minimal_quantity] => 20 [available_date] => [id_image] => -1 [list] => ‘119’ ) ) 1
    Merci d’avance de votre aide précieuse,

  73. @Corinne : Bonjour, dans votre cas je pencherais plutôt pour pour la variable $combinations, aidez vous d’un

    {$combinations|print_r}

    et tout devrait aller 🙂

  74. @Maxime : Bonjour, dans votre cas l’élément sera affiché dans les catégories autres que niveau 3. Le code est à placer dans le category.tpl 😉

  75. Bonjour,
    Je suis sous PS 1.5.5 et j’essais de mettre une condition d’affichage sur le bloc de publicité: j’aimerais qu’un bloc particulier s’affiche seulement pour une cat. Voilà ce que j’ai mis:
    {if $id_category == 6}

    {/if}
    Mais cela ne marche pas… Avez vous une idée?
    Merci d’avance

    1. @Ewa : Bonjour, dans quel fichier .tpl avez-vous placé votre condition ? Car suivant le fichier .tpl la variable smarty n’est pas chargée. Si c’est ce que je pense, vous l’avez placé dans le module publicité. Si oui, ajouté au de votre page dans sa class la variable suivante : [code]{if $page_name == ‘category’}category-{$id_category}{/if}[/code]
      Avec ça, vous n’aurez qu’à appliquer un peu de CSS de la sorte : [code]
      body#category.category-3 #monblocpub {display:block;}
      body#category #monblocpub {display:none;}
      [/code]
      A bientôt 🙂

    2. Merci beaucoup pour votre réponse rapide. Une petite question quand même: dans quel fichier exactement dois-je ajouter la nouvelle variable?
      Merci 🙂

    3. @Ewa : Re, et bien la variable s’ajoute à la class du body…donc dans le header.tpl 😉

    4. Ça ne marche toujours pas. 🙁 Rassurez moi, dans le blockadvertising.tpl on garde bien la condition: [code]{if $id_category == 6}
      <div id="monblocpub" class="advertising_block">
      <a href="{$adv_link}" title="{$adv_title}"><img src="{$image}" alt="{$adv_title}" title="{$adv_title}" width="155" height="163" /></a>
      </div>
      {/if}
      [/code] ?
      Merci

    5. @Ewa : Non il faut supprimer votre condition dans le blockadvertising.tpl puisqu’on a fait : 1) ajout d’une class si on est dans la catégorie ciblée 2) on masque via le CSS le block publicité.

    6. Problème résolu. Merci beaucoup pour votre aide et pour ce blog bien précieux 🙂

  76. Bonjour Sylv1, c’est normal que ça ne marche pas car il faut écrire la condition ainsi : {if $product->id == 2915}votre_contenu{/if}
    Bonne journée 🙂

  77. Pour information,
    Ce code ne fonctionne pas chez moi, par contre celui-ci oui : (Pourquoi ?)
    {if $smarty.get.id_category == 18}

  78. Dans ce cas, j’opterai pour une condition avec un champ libre à importer avec les produits (ou à mettre à jour) comme le champ location, par exemple, et ça donnerai : {if $product->location == …}…{/if} 🙂

  79. bonjour
    je voudrais afficher un élément pour une catégorie et ses sous catégories seulement.
    ex: j’ai une catégorie 747 avec des sous catégorie 748, 749, 730 etc
    j’aimerais bien que n’afficher un texte que pour le catégorie 747 et ses sous catégories
    avec le code {if $id_category == 747} ça marche mais pas pour les sous catégories, je suis obligé de me taper un truc du genre
    {if $id_category == 747 || $id_category == 748|| $id_category == 749 || $id_category == 730}
    le hic est que j’ai des catégories qui ont 200 voir 300 sous catégories donc le faire à la main un peu tendu.
    auriez-vous une solution?
    merci

Laisser un avis

Consultez les autres articles