Soucis d'intégration PHP/TPL

Technopower Messages postés 5 Date d'inscription vendredi 25 avril 2014 Statut Membre Dernière intervention 10 juin 2014 - Modifié par jordane45 le 25/04/2014 à 12:20
 david294 - 10 juin 2014 à 11:52
Bonjour à tous.
JE souhaite intégrer la date et l'heure du jour dans un module prestashop (blockuseronline).
J'ai réussi à créer un fichier php pour afficher l'heure et la date, mais l'intégration ne fonctionne pas dans le TPL.

Les codes ci-dessous des fichiers :

blockuseronline.tpl :
    <div id="informations_block_right" class="block">
     <h4><img align="absmiddle" src="{$base_dir}modules/blockuseronline/online.gif"/> {l s='Visites' mod='blockuseronline'}</h4>
             <div align="left" class="block_content" style="padding:3px 10px;">
                {l s='Visteurs en ligne:' mod='blockuseronline'} {$useronline}<br>
                {l s='Ce jour :' mod='blockuseronline'} {$today}<br>
                {l s='Votre IP :' mod='blockuseronline'} {$yourip}<br>
    {l s='Nous sommes le :' mod='blockuseronline'} {$date}<br>
                {l s='Il est :' mod='blockuseronline'} {$heure}
       </div>
    </div>


blockuseronline.php :
<?php

$date = date("d-m-Y");
$heure = date("H:i");

class BlockUserOnline extends Module {
 private $_html = '';
 private $_postErrors = array();

 function __construct(){
  $this->name = 'blockuseronline';
  $this->tab = 'User Module';
  $this->version = 1.0;
  // Update by Bayu Prawira
  // bywebs.blogspot.com

  parent::__construct(); // The parent construct is required for translations

  $this->page = basename(__FILE__, '.php');
  $this->displayName = $this->l('Block User Online');
  $this->description = $this->l('Displays total user online in you home page');
 }

 public function installDb(){
  Db::getInstance()->ExecuteS('
  CREATE TABLE IF NOT EXISTS ''._DB_PREFIX_.'total_hits' (
    'id' INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    'ip' VARCHAR(20) NOT NULL,
    'time' VARCHAR(20) NOT NULL
  );');
  
  Db::getInstance()->ExecuteS('
  CREATE TABLE IF NOT EXISTS ''._DB_PREFIX_.'today_hits' (
    'id' INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    'ip' VARCHAR(20) NOT NULL,
    'time' VARCHAR(20) NOT NULL
  );');
  
  Db::getInstance()->ExecuteS('
  CREATE TABLE IF NOT EXISTS ''._DB_PREFIX_.'today_online' (
    'timestamp' INT(15) NOT NULL DEFAULT 0 PRIMARY KEY,
    'ip' VARCHAR(40) NOT NULL,
    'path' VARCHAR(100) NOT NULL,
  KEY ip(ip));');
  
     return true;
 }

 function install(){
  if (!parent::install())
   return false;
  if (!$this->registerHook('leftColumn'))
   return false;
     if (!$this->installDB())
         return false;
  return true;
 }
 
    public function uninstall(){
  if(!parent::uninstall() ||
     !$this->uninstallDB())
    return false;
  return true;
   }

   private function uninstallDb(){
  Db::getInstance()->ExecuteS('DROP TABLE ''._DB_PREFIX_.'total_hits'');
  Db::getInstance()->ExecuteS('DROP TABLE ''._DB_PREFIX_.'today_hits'');
  Db::getInstance()->ExecuteS('DROP TABLE ''._DB_PREFIX_.'today_online'');
  return true;
   }

    function hookLeftColumn($params){
        global $smarty;

  if (@getenv("HTTP_X_FORWARDED_FOR")){
   $ip = @getenv("HTTP_X_FORWARDED_FOR");
  } else{
   $ip = @getenv("REMOTE_ADDR");
  }
  
  if (strstr( $ip, "," ) ){
   $elvalaszto = ",";
   $client_ip = strtok ($ip, $elvalaszto);
  } else { 
   $client_ip = $ip; 
  }

  $to_secs = 600;
  $server_time = date("U");
  $timeout = $server_time - $to_secs;
  $datum = date("d.m.Y");
  $user = 0;
  $todayhits = 0;
  $totalhits = 0;

  $sql = "SELECT * FROM "._DB_PREFIX_."today_online WHERE ip = '".$client_ip."'";
  if ($results = Db::getInstance()->ExecuteS($sql)){
      foreach ($results as $row){
    $onlip1 = $row['ip'];
   }
  }

  if($onlip1 !== $client_ip) {
   Db::getInstance()->insert('today_online', array(
    'timestamp' => pSQL($server_time),
    'ip' => pSQL($client_ip),
    'path' => pSQL($PHP_SELF)
   ));
  }

  Db::getInstance()->delete("today_online", "timestamp < '".$timeout."' AND ip != '".$client_ip."'");

  $query31 = "SELECT DISTINCT ip FROM "._DB_PREFIX_."today_online WHERE path='$PHP_SELF'";
  if ($result1 = Db::getInstance()->ExecuteS($query31)){
   $user = count($result1);
  }

  Db::getInstance()->delete("today_hits", "time < '".$datum."'");

  $kapcsolodas2 = "SELECT * FROM "._DB_PREFIX_."today_hits";
  if ($results = Db::getInstance()->ExecuteS($kapcsolodas2)){
   foreach ($results as $row){
    $statip2 = $row['ip'];
    $statdate2 = $row['time'];
   }
  }

  if($statip2 !== $client_ip) {
   Db::getInstance()->insert('today_hits', array(
    'ip' => pSQL($client_ip),
    'time' => pSQL($datum)
   ));
  }

  $todayk2 = "SELECT DISTINCT ip FROM "._DB_PREFIX_."today_hits";
  if ($todayk22 = Db::getInstance()->ExecuteS($todayk2)){
   $todayhits = count($todayk22);
  }

  $kapcsolodas3 = "SELECT * FROM "._DB_PREFIX_."total_hits WHERE ip = '$client_ip'";
  if ($results = Db::getInstance()->ExecuteS($kapcsolodas3)){
   foreach ($results as $row){
    $statip3 = $row['ip'];
    $statdate3 = $row['time'];
   }
  }

  if($statip3 !== $client_ip) {
   Db::getInstance()->insert('total_hits', array(
    'ip' => pSQL($client_ip),
    'time' => pSQL($datum)
   ));
  }

  $todayko3 = "SELECT * FROM "._DB_PREFIX_."total_hits";
  if ($todayko23 = Db::getInstance()->ExecuteS($todayko3)){
   $totalhits = count($todayko23);
  }


        $smarty->assign('yourip',$ip);
        $smarty->assign('useronline',$user);
        $smarty->assign('total',$totalhits);
        $smarty->assign('today',$todayhits);
  $smarty->assign('date',$date);
        $smarty->assign('heure',$heure);


  return $this->display(__FILE__, 'blockuseronline.tpl');
 }

 function hookRightColumn($params)
 {
  return $this->hookLeftColumn($params);
 }

}



Le moduole est visible à la page suivante : http://www.technopower.fr [le lien n'est pas destiné à faire de la pub, mais bien pour avoir une aide. Merci]

6 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
25 avril 2014 à 12:20
Merci de penser dans tes prochains messages à utiliser les balises de code
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

J'ai édité ton message précédent pour les ajouter
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
25 avril 2014 à 12:28
Pour ce qui est de ta question....
PretaShop étant une appli .. disposant d'une communauté.. d'un forum ;.. pourquoi ne pas y poser directement la question ?
http://www.prestashop.com/forums/forum/73-conception-de-th%C3%A8mes-int%C3%A9gration/


Enfin bon.. a tout hasard.. déplace tes initialisations de variable date et heure DANS la class et non au dessus.
0
Technopower Messages postés 5 Date d'inscription vendredi 25 avril 2014 Statut Membre Dernière intervention 10 juin 2014
25 avril 2014 à 12:31
Mci Jordane. Pour la réponse, je dois avouer que je n'ai pas reg les FAQ...
Pour la question au sujet de PS, j'ai déjà cherché. Mais rien trouvé à ce sujet.
Je vais essayer ta suggestion, mais il me semble avoir déja testé. Peut-être ais-je aussi mal placé.
0
j'aurais mis cette déclaration de date / heure:

$date = date("d-m-Y");
$heure = date("H:i");

juste avant l'affectation aux variable $smarty - car actuellement ces deux variables sont en dehors de la classe et ne doivent pas être instancié....

est-ce que les variables {$useronline} {$today} et {$yourip} sont visibles?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Technopower Messages postés 5 Date d'inscription vendredi 25 avril 2014 Statut Membre Dernière intervention 10 juin 2014
10 juin 2014 à 10:27
Bonjour.
J'avais essayé de mettre les variables avant, mais sans succès.
Quant aux variables {$useronline} {$today} et {$yourip}, oui, elles sont visibles
0
Si vous refaite des tests placez les juste avant les smartys (c'est plus sùr)

Est-ce vos nouveaux labels {l s='Nous sommes le :' mod='blockuseronline'} et {l s='Il est :' mod='blockuseronline'}
s'affichent bien ?

Avez vous aussi pensez à vider vos cache smarty et le cache des modules ( il faut, pour ce dernier, effacer le fichier "class_index.php" à la racine du dossier "cache" => tous les modules se rechargent)

Autre test, pour voir si votre variable est rempli :
placez la commande " d($date); " juste avant l'assignation des smarty....puis faite un affichage front (un test en local serait plus judicieux) cela devait affichez en haut de page votre date
(en equivalent php cela fait un echo de votre variable $date (ici) puis un die())
0
Rejoignez-nous