Jump to content

Php dans mon template


Recommended Posts

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

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

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

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

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

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

(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

ç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

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

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

  • 3 weeks later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...