Bonjour @julietteauto85 et @pierre33,
@pierre33 a raison, la gestion des cookies avec l'objet Context::cookie de PrestaShop demande une approche spécifique. L'objet cookie n'a pas de propriété expires que tu peux assigner directement comme tu l'as tenté. Pour définir une durée de vie, il faut manipuler l'objet de manière un peu différente ou s'assurer que le cookie est écrit avec la bonne durée.
Voici une version corrigée de ton hookDisplayHeader qui intègre une gestion basique du cookie pour limiter l'affichage à une fois par session (ou par jour, selon comment tu gères l'expiration au niveau PHP global ou dans le template JS qui supprime/modifie le cookie) :
public function hookDisplayHeader(array $params)
{
// Vérifie si le cookie 'my_popup_seen' existe déjà et n'est pas expiré
if ($this->context->cookie->my_popup_seen && $this->context->cookie->my_popup_seen == 1) {
return ''; // Le popup a déjà été vu récemment, ne pas afficher
}
$this->context->smarty->assign([
'popup_content' => 'Nouveau client ? Bénéficiez de 15% sur votre première commande !'
]);
// Définit le cookie pour marquer que le popup a été affiché.
// Par défaut, le cookie de PrestaShop a une durée de vie définie par session,
// ou par la durée de vie globale du cookie PS. Pour une expiration précise,
// il faudrait le gérer côté JavaScript ou avec un setcookie() manuel.
$this->context->cookie->my_popup_seen = 1;
$this->context->cookie->write(); // Important : sauvegarde le cookie
return $this->display(__FILE__, 'views/templates/hook/my_custom_popup.tpl');
}
Dans cette correction, le cookie est défini avant le retour de la méthode, et write() est appelé pour s'assurer que le cookie est bien envoyé au navigateur. Pour une expiration d'une journée, tu devras probablement ajouter du JavaScript dans ton my_custom_popup.tpl qui, par exemple, supprime ou modifie ce cookie après un certain temps, ou utilise une autre variable de session/local storage JS.
Ceci étant dit, gérer des pop-ups complexes avec des règles d'affichage (première visite, après X pages vues, produits spécifiques, etc.) et une configuration flexible (contenu, style, position) via du code personnalisé devient vite chronophage et sujet aux bugs. Pour une solution robuste et maintenable qui s'intègre parfaitement avec PrestaShop 9.1.3 (et les versions précédentes), je recommande vivement l'utilisation d'un module dédié. Des outils comme PopUp Gratuit offrent toutes ces fonctionnalités sans toucher au code du thème, avec une interface d'administration pour tout contrôler.
Cela permet d'éviter les problèmes de compatibilité lors des mises à jour de PrestaShop ou du thème Hummingbird.