alexislevrai Posted June 23, 2011 Share Posted June 23, 2011 Bonjour a tous, Voilà, j'ai un (gros) problème avec prestashop et je n'ai trouvé aucune réponse sur le forum.Je souhaite utiliser les cookies Php afin de n'afficher une popup QUE lors de la première visite d'un client.J'ai tout essayer inclure mon php entre des balises {PHP} {/PHP} ou encore {include_php file='/popup.php'}Rien n'y fait j'ai une page blanche.Pourtant lorsque je teste mon "script" dans une page test.php que je met a la racine cela fonctionne a merveille.Donc je ne sais plus quoi faire Un grand merci par avance pour votre aide. Link to comment Share on other sites More sharing options...
Asenar Posted June 23, 2011 Share Posted June 23, 2011 Bonjour, Le php est par défaut désactivé dans smarty, il faut l'activer en modifiant la configuration (je ne sais plus où exactement, il faudrait regarder la doc de smarty ) Link to comment Share on other sites More sharing options...
jherbaux Posted June 23, 2011 Share Posted June 23, 2011 pourquoi ne pas tout simplement récupérer l'existence de ton cookie coté PHP, transmettre ta variable au TPL ? et traité l'affichage ou non de ta popup en fonction de cette variable ? Link to comment Share on other sites More sharing options...
alexislevrai Posted June 23, 2011 Author Share Posted June 23, 2011 Donc dans Smarty.class.php j'ai activé PHP_TAG var $security_settings = array( 'PHP_HANDLING' => false, 'IF_FUNCS' => array('array', 'list', 'isset', 'empty', 'count', 'sizeof', 'in_array', 'is_array', 'true', 'false', 'null'), 'INCLUDE_ANY' => false, 'PHP_TAGS' => true, 'MODIFIER_FUNCS' => array('count'), 'ALLOW_CONSTANTS' => false ); Puis dans mon header.tpl j'essaye d'inclure un page php. {php} // including a php script directly from the template. include('/test.php'); {/php} Il y a de l'évolution ma page n'est plus blanche. Elle s'affiche bien jusqu'à l'emplacement dans le code de mon {php}{/php}Je ne comprends vraiment rien :/Et pour répondre a jherbaux ... en réalité je n'ai que très peu de connaissance en php, donc les variables etc c'est un peu du chinois pour moi Je suis déjà très contant d'avoir compris et réussi a faire fonctionner cette histoire de cookie/popup, maintenant j'aimerai l'intégrer a prestashop. Link to comment Share on other sites More sharing options...
Asenar Posted June 23, 2011 Share Posted June 23, 2011 édite ton fichier /config/config.inc.php pour activer l'affichage des erreurs php : ini_set("display_errors", "On");Edit : je crois que la variable $cookie est déjà disponible dans les tpl, à confirmer Link to comment Share on other sites More sharing options...
alexislevrai Posted June 23, 2011 Author Share Posted June 23, 2011 Ah oui en effet la au moins on a un peu plus d'infos : Fatal error: Uncaught exception 'SmartyException' with message '{php} is deprecated, set allow_php_tag = true to enable' in /homepages/26/d363762824/htdocs/tools/smarty/plugins/block.php.php:21 Stack trace: #0 /homepages/26/d363762824/htdocs/tools/smarty/compile/7956525de7ca0cb5ad1301ef957d68bdfe3fe6eb.file.header.tpl.php(237): smarty_block_php(Array, NULL, Object(Smarty_Internal_Template), true) #1 /homepages/26/d363762824/htdocs/tools/smarty/sysplugins/smarty_internal_template.php(433): include('/homepages/26/d...') #2 /homepages/26/d363762824/htdocs/tools/smarty/sysplugins/smarty_internal_template.php(568): Smarty_Internal_Template->renderTemplate() #3 /homepages/26/d363762824/htdocs/tools/smarty/Smarty.class.php(339): Smarty_Internal_Template->getRenderedTemplate() #4 /homepages/26/d363762824/htdocs/tools/smarty/Smarty.class.php(383): Smarty->fetch('/homepages/26/d...', NULL, NULL, NULL, true) #5 /homepages/26/d363762824/htdocs/classes/FrontController.php(491): Smarty->display('/homepages/26/d...') #6 /homepages/26/d3 in /homepages/26/d363762824/htdocs/tools/smarty/plugins/block.php.php on line 21 Link to comment Share on other sites More sharing options...
Asenar Posted June 23, 2011 Share Posted June 23, 2011 Ce serait peut être plus efficace (et plus simple) de surcharger la classe FrontController non ?tu créé un fichier /override/classes/FrontController contenant quelquechose comme ça : <?php class FrontController extends FrontControllerCore{ public function displayHeader() { global $css_files, $js_files; // important de garder ça if (!self::$initialized) $this->init(); // mon code pour savoir si c'est la première fois ou pas if($laConditionPourLaPopup) self::$smarty->assign('firstTime','1'); else self::$smarty->assign('firstTime','0'); parent::displayHeader(); } } et dans ton header.tpl, juste avant {$HOOK_HEADER}, quelquechose comme ça : {if $firstTime}<script type=text/javascript> $(document).ready(function(){ // mon code qui va afficher la popup }) </script> {/if} PS : les popup c'est mal hein, ça énerve les visiteurs plus que ça les fidélise en général Link to comment Share on other sites More sharing options...
alexislevrai Posted June 23, 2011 Author Share Posted June 23, 2011 Graaaa ça me fait une erreur de syntaxe dans le front contrôler au niveau du else :/Je sais que les gens n'aiment pas les popups c'est pour ça que je veux la proposer que lors de la première visite et après tous les 6 mois Link to comment Share on other sites More sharing options...
Asenar Posted June 23, 2011 Share Posted June 23, 2011 ajoute les point-virgue à la fin des lignes où je les ai oublié (bon d'accord t'a peu de connaissance en php, mais quand même tu aurais pu voir ma faute tout à fait volontaire !) Link to comment Share on other sites More sharing options...
alexislevrai Posted June 23, 2011 Author Share Posted June 23, 2011 J'aurai fait comme ça mais ça ne semble pas marcher :/ class FrontController extends FrontControllerCore { public function displayHeader() { global $css_files, $js_files; if (!self::$initialized) $this->init(); if($laConditionPourLaPopup); self::$smarty->assign('firstTime','1'); else self::$smarty->assign('firstTime','0'); parent::displayHeader(); } } Link to comment Share on other sites More sharing options...
Asenar Posted June 23, 2011 Share Posted June 23, 2011 j'ai édité mon message d'au dessus.Et sinon, il faut bien évidemment remplacer la $laConditionPourLaPopup par ce qu'il faut. Mais comme je ne suis pas sur des conditions exacte je te laisse compléter Link to comment Share on other sites More sharing options...
alexislevrai Posted June 23, 2011 Author Share Posted June 23, 2011 J'ai donc ceci dans mon FrontController class FrontController extends FrontControllerCore{ public function displayHeader() { global $css_files, $js_files; // important de garder ça if (!self::$initialized) $this->init(); // mon code pour savoir si c'est la première fois ou pas if($PopUpNewsletter) self::$smarty->assign('firstTime','1'); else self::$smarty->assign('firstTime','0'); parent::displayHeader(); } } J'ai ajouté ceci pour ajouter du texte lorsque c'est donc la première visite: { if $firstTime} Test premiere visite {/if} Mais ça ne marche pas. J'ai supprimé les cookie existants ... toujours rien. Link to comment Share on other sites More sharing options...
Asenar Posted June 23, 2011 Share Posted June 23, 2011 (petite suggestion en convention de nomage des variables : première lettre en minuscule.)et $popUpNewsletter, tu lui donne quoi comme valeur ? et où ?essaye de mettre juste au dessus $popupNewsletter = 1 pour voir si ça marche.Ensuite tu fais un print_r(self::$cookie) pour voir ce que tu pourrais utiliser pour te satisfaire. efface les cookies avant pour voir la différence entre une première arrivée ou pas. Link to comment Share on other sites More sharing options...
alexislevrai Posted June 23, 2011 Author Share Posted June 23, 2011 Eh bien j'ai l'initialisation de mon cookie avant le doctype : <?php setcookie('popUpNewsletter', 'HelloAgain', time() + 90*24*3600, null, null, false, true); ?> Link to comment Share on other sites More sharing options...
Asenar Posted June 23, 2011 Share Posted June 23, 2011 ça ne marchera pas comme ça.remplace if(!empty(self::$cookie->PopUpNewsletter)) self::$smarty->assign('firstTime','1'); else self::$smarty->assign('firstTime','0'); par if(!self::$cookie->popUpNewsletter) { self::$cookie->popUpNewsletter = 'HelloAgain'; self::$smarty->assign('firstTime','1'); } else self::$smarty->assign('firstTime','0'); Link to comment Share on other sites More sharing options...
alexislevrai Posted June 23, 2011 Author Share Posted June 23, 2011 Eh bien ça marche toujours pas --'Fatal error: Call to undefined method Cookie::get() class FrontController extends FrontControllerCore { public function displayHeader() { global $css_files, $js_files; // important de garder ça if (!self::$initialized) $this->init(); // mon code pour savoir si c'est la première fois ou pas if(self::$cookie->popUpNewsletter != 'HelloAgain') { self::$cookie->popUpNewsletter='HelloAgain'; self::$smarty->assign('firstTime','1'); } else self::$smarty->assign('firstTime','0'); parent::displayHeader(); } } Ce Smarty complique quand même énormément les choses qui sont habituellement simple. Link to comment Share on other sites More sharing options...
Asenar Posted June 23, 2011 Share Posted June 23, 2011 pardon, c'est la méthode __get qui est une méthode magique, autrement dit tu dois faire ce que j'ai édité Link to comment Share on other sites More sharing options...
alexislevrai Posted June 23, 2011 Author Share Posted June 23, 2011 Et __set aussi Mais après pour la durée de vie du cookie ça se passe comment ? on peut le régler ? Link to comment Share on other sites More sharing options...
Asenar Posted June 23, 2011 Share Posted June 23, 2011 Oui, __set aussi, mais c'est pris en compte dans ce que j'ai écrit . les méthodes magiques ne sont pas à utiliser directement hein ! La durée de vie du cookie, ce sera la même que le cookie utilisé par PrestaShop.Concernant la durée, je t'invite à regarder le code de la classe Cookie pour voir quelles méthodes et paramètres sont disponibles. Tu peux aussi créer un autre cookie plutôt que d'utiliser le même que PrestaShop, mais je pense que ce n'est pas adapté à ton cas. Link to comment Share on other sites More sharing options...
Asenar Posted June 24, 2011 Share Posted June 24, 2011 Alors Alexis, c'est résolu ?Je viens de tester chez moi et ça marche parfaitement Link to comment Share on other sites More sharing options...
alexislevrai Posted June 24, 2011 Author Share Posted June 24, 2011 Eh bien ça semble fonctionner ( http://www.sqwear.fr ) mais je n'ai pas trouvé ou l'on définissait la valeur/durée du cookie.C'est un peu embêtant de ne pas savoir car j'ai pas envie que mon visiteur se retrouve avec la pop up toutes les semaines. Je voudrais que mon cookie se supprime au bout de 90 jours a peut près. :/ Link to comment Share on other sites More sharing options...
Asenar Posted July 11, 2011 Share Posted July 11, 2011 Pour la durée du cookie, regarde la classe Cookie (dans le fichier .php du même nom), c'est dans le constructeur. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now