Remettre un produit en nouveauté dans Prestashop

Dans Prestashop le module nouveautés, affiché en homepage ou bien dans un bloc est très pratique… seulement le comportement automatique ne permet pas d’influencer si un produit est nouveau ou non.

Nouveautés sous Prestashop

Un problème récurrent

Dans le back-office de Prestashop sous la partie « Préférences -> Produits », il est possible de définir le nombre de jours qu’il faut considérer un produit comme « nouveau ». Le problème c’est que lorsque vous créez des produits à l’avance, ceux-ci ne seront peut-être plus tolérés comme « nouveau » lors de leur activation. On retrouve le même problème si on crée plusieurs produits similaires, dans les nouveautés, on se retrouve ensuite avec X fois le même produit sans pouvoir alterner l’affichage ce qui n’est pas très vendeur.

Cette option n'est pas suffisante, car il faudrait idéalement pouvoir modifier le champ date d'ajout du produit.
Cette option n’est pas suffisante, car il faudrait idéalement pouvoir modifier le champ date d’ajout du produit.

La solution

La première consiste à dupliquer le produit pour actualiser le champ « date_add », mais ce n’est pas très pratique comme solution et cela risque d’occasionner d’autres problèmes à la longue. L’idéal est donc d’ajouter un nouveau champ dans la fiche produit, afin de pouvoir administrer la date et pouvoir donc positionner le produit en fonction de la date donnée.

Pour cela modifiez le fichier « \admin\themes\default\template\controllers\products\informations.tpl » et juste avant le code ci-dessous (vers la ligne 189) :

<hr/>
{* status informations *}

Ajoutez le code suivant

 {* Webbax - 04.11.15 - date ajout produit *}
        <style>
            {literal}
                #ui-datepicker-div{z-index:1000!important;}
            {/literal}
        </style>
        <script type="text/javascript">
            {literal}
               $(function(){
                   $('#date_add').datepicker({dateFormat:'yy-mm-dd'});
               });
            {/literal}
        </script>
        <div class="form-group">
             <label class="control-label col-lg-3" for="date-creation">
                 <span class="label-tooltip" data-toggle="tooltip"
                         title="{l s="Date d\'ajout"}">
                         {$bullet_common_field} {l s="Date d\'ajout"}
                 </span>
             </label>
             <div class="col-lg-3">
                 <input maxlength="12" type="text" id="date_add" name="date_add" value="{$product->date_add|htmlentitiesUTF8|date_format:'%Y-%m-%d'}" />
             </div>
        </div>
        <hr/>
{* -- *}

Ensuite, si vous accédez à votre fiche produit, vous pourrez constater l’apparition d’un nouveau champ, avec la possibilité d’éditer la date.

Cela semble tellement évident d'avoir ce champ éditable en natif... peut-être dans une prochaine version de Prestashop ?
Cela semble tellement évident d’avoir ce champ éditable en natif… peut-être dans une prochaine version de Prestashop ?

Quelque chose m’échappe…

Vous remarquerez qu’on a édité seulement la partie « template » de l’administration et pourtant la mise à jour des données fonctionne, sans pour autant devoir modifier des requêtes ou les processus qui sauvent / éditent le produit. Pourquoi ? Parce qu’il y’a un comportement magique dans Prestashop, qui va récolter automatiquement les valeurs des champs portant le nom du « Modèle de données » on aurait donc pu faire cela aussi avec « date_add » par exemple.

La méthode CopyFromPost du fichier AdminController est l'explication du pourquoi ça fonctionne sans coder le "sauvegardage des données".
La méthode CopyFromPost du fichier AdminController est l’explication du pourquoi ça fonctionne sans coder le « sauvage des données ».

Bilan

Finalement, cette date d’ajout c’est un peu comme « une date de publication », il n’est pas rare d’avoir des clients qui veulent influencer l’affichage des nouveautés. On retrouve cette problématique par exemple pour les « meilleures ventes », on aimerait plutôt mettre des produits définis par « nos soins », plus pertinent en fonction du stock et de la tendance… que sur le contenu des commandes effectuées. Bonne intégration à tous !

18 réflexions au sujet de « Remettre un produit en nouveauté dans Prestashop »

  1. Bonjour

    Super pratique cette astuce, merci !

    Je ne suis pas un pro du codage, et je n’aime pas modifier mes fichiers même si quelque fois çà m’est arrivé… Mais bon…

    Une petite question néanmoins : çà fonctionne sous PS 1.6.1.3 ?
    Je n’ose pas faire la modif…, pourtant çà m’arrangerait bien

    Cordialement,
    Alain

    1. Bonjour,

      Cela devrait fonctionner, mais par précaution conservez une copie des fichiers originaux en local à chaque fois.
      Dans le pire de cas, vous pourrez toujours les remettre et revenir à l’état initial.

      Merci pour votre visite !

    1. Bonjour,

      Le champ est prévu pour stocker l’heure, car il s’agit d’un datetime(), par contre je n’ai pas essayé de creuser sur cette partie de la configuration.

      Merci pour votre visite !

  2. Bonjour ,
    j’aimerais savoir ou trouver ce dossier car je ne l’ai pas sur filezilla (adminthemesdefaulttemplatecontrollersproductsinformations.tpl ) je suis sur prestashop 1.6.1.3
    Cordialamant

  3. Bonjour ,
    Cette méthode fonctionne t’elle sur le Cloud de Prestashop ?
    car je ne retrouve pas ce dossier dans FTP
    adminthemesdefaulttemplatecontrollersproductsinformations.tpl
    ma version est 1.6.1.3

    Merci

  4. Bonsoir,
    Bravo pour le tuto, je l’ai installer en local sur la version 1.6.1.10 et ca fonctionne a merveille.
    J’aimerais l’installer sur mon serveur 1&1 mais il n’y a pas de dossier admin…

  5. Bonjour,

    Normalement si vous avez réussi à faire l’opération en local, sur l’espace distant la configuration doit-être identique.

    Les dossiers devraient être similaires en local et sur l’espace distant.

  6. Bonjour,
    Comme tu le dis à la fin de ce très bon article «on aimerait plutôt mettre des produits définis par nos soins ». A force d’entendre des demandes similaires de la part de mes clients, j’ai fini par développer un module qui permet de s’affranchir de la date d’ajout en ce qui concerne l’affichage des nouveautés.
    Il y a un lien sur ma signature, je n’ai pas voulu/osé mettre le lien directement dans le post.
    Yann

  7. Bonjour et merci pour cette astuce, fonctionne nickel pour la version 1.6.1.12.

    Petite remarque, d’après la date de mon fichier *.tpl, je pense que c’est une manipulation à faire à chaque fois que l’on fait une mise à jour de Prestashop.

    Merci de me le confirmer et bonne journée

    1. Hello,

      Effectivement, avec cette manière de faire le fichier est écrasé à chaque mise à jour. Normalement il est possible de mettre en place un override dans le thème du back-office Prestashop pour éviter ce genre de désagrément, mais ici je ne l’avais pas proposé (peut-être que j’étais confronté à un autre problème).

      A bientôt !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *