Technopower
Messages postés5Date d'inscriptionvendredi 25 avril 2014StatutMembreDernière intervention10 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]
Technopower
Messages postés5Date d'inscriptionvendredi 25 avril 2014StatutMembreDernière intervention10 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é.
Technopower
Messages postés5Date d'inscriptionvendredi 25 avril 2014StatutMembreDernière intervention10 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
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())