Jump to content

[Module] Tirage Au Sort Bon De Réduction


Arnaud Drieux

Recommended Posts

Bonjour à tous

 

 

Merci encore pour ce module Arnaud1900 c'est possible d'avoir le module modifié ??

 

Amitiés

 

je suis en train de regarder, parce qu'en fait, il est possible que ça ne fonctionne pas vraiment. Je croyais avoir trouvé…

Du coup il enregistre le cookie fais le test et n'affiche rien…

 

Rebonjour à tous non j'ai la version 2.4 car je n'ai pas trouvé la version 7 ou est ce que je peux l'installer car j'en aurai besoin pour l'adpter à mon logiciel pizza .

 

tenez moi au courant

 

merci à vous tous

 

ps je viens de le faire marcher mais j'ai ce code qui s'affiche sur ma page

 

array(1) { [0]=> array(2) { ["code"]=> string(8) "Pizza007" ["name"]=> string(4) "Test" } }

 

de l'aide please :)

 

Il ya un var_dump qui traine dans le fichier areduction.php. Il suffit juste de le supprimer.

Link to comment
Share on other sites

salut Arnaud, moi je l'ai fais en php pure avec les ip, c'est pas aussi bien qu'avec les coockies mais ça a le mérite de fonctionner, si tu veux voir le code n'hésite pas à demander ;) en revan,che j'ai tjs pas trrouvé quel tpl modifier

Link to comment
Share on other sites

salut Arnaud, moi je l'ai fais en php pure avec les ip, c'est pas aussi bien qu'avec les coockies mais ça a le mérite de fonctionner, si tu veux voir le code n'hésite pas à demander ;) en revan,che j'ai tjs pas trrouvé quel tpl modifier

 

Oui je veux bien voir le code final.

 

Pour ton soucis, en fait le problème ne doit pas se résoudre dans les tpl, mais bel et bien dans le fichier php. Il faut trouver une condition pour que le module soit désactiver si l'url n'est pas xxxxx.com/index.

Link to comment
Share on other sites

ca c'est mon fichier allreduction.tpl

[/size]
<!-- REDUC MODULE INDEX -->
{if $page_name == $host}
{if $var_tirage_sort == 0 }
<div id="reduction_block">
<div id="glob">
 <div id="img"></div>
 <div id="exit" onclick="exti();"></div>
 <div id="reduction_info">
 {foreach from=$txt item=txte name=txte}
  <p>{$txte.text_intro}</p>
 <script type="text/javascript">
  var cpt = {$txte.valeur_temps};
 </script>
  <button class="valid" onclick="montenl();decompte();">Jouer</button>
 </div>
 <div id="load" onload="decompte();" style="display:none;"><img src="{$modules_dir}/areduction/img/progress.gif"/><p id="Crono"></p></div>
 <div id="reduction_content" >
  <p>{$txte.text_second}</p>
  {foreach from=$reponse item=code name=code}
   <p class="code">{$code.name}</p>
   <p>{$txte.text_final}</p>
   <p class="code">{$code.code} : Notez le pour ne pas le perdre  </p></h2>
   <p>Pour un <img src="images/gift.png" title="cadeau"> supplémentaire, n'oubliez pas de poster le numéro de votre commande sur notre page <a href="https://www.facebook.com/omega.nutrition.france" title="Facebook Omega Nutrition"><img src="images/facebook.png" title="Notre page facebook"></a></p>
  {/foreach}
 </div>
 {/foreach}
</div>
</div>
{else}
<!--<div id="reduction_block">
<div id="glob">
 <div id="img"></div>
 <div id="exit" onclick="exti();"></div>


 <div id="reduction_content" style="display:block">
  <p>Vous avez déjà joué, revenez dans 7 jours</p>

   <p class="code"></p>
   <p></p>
   <p class="code"></p></h2>
   <p>Pour un <img src="images/gift.png" title="cadeau"> supplémentaire, n'oubliez pas de poster le numéro de votre commande sur notre page <a href="https://www.facebook.com/omega.nutrition.france" title="Facebook Omega Nutrition"><img src="images/facebook.png" title="Notre page facebook"></a></p>

 </div>

</div>
</div>-->
{/if}
{/if}

 

et ça c'est le fichier .php

 

<?php
class Areduction extends Module
{
/* @var boolean error */
protected $error = false;

public function __construct()
{
  $this->name = 'areduction';
  $this->tab = 'Custom Module';
  $this->version = '2.5';
 $this->author = 'awb-dsgn.com';
 $this->need_instance = 0;
  parent::__construct();
    $this->displayName = $this->l('Areduction');
    $this->description = $this->l('Tirage au hasard d\'un bon de réduction. Pop-up sur l\'accueil');
 $this->confirmUninstall = $this->l('Etes-vous sûre de vouloir supprimer areduction ?');
}

public function install()
{
  if (!parent::install() OR !$this->registerHook('header') OR !$this->installDB() OR !$this->insertDB())
   return false;
  return true;
}

public function uninstall()
{
 if (!parent::uninstall() OR !$this->unregisterHook('header') OR !$this->desinstallDB())
   return false;
  return true;
}

public function installDb()
{
 return (Db::getInstance()->execute('
 CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'areduction` (
  `id_areduc` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `valeur_affichage` INT UNSIGNED NOT NULL,
  `valeur_temps` INT UNSIGNED NOT NULL,
  `text_intro` VARCHAR( 128 ) NOT NULL ,
  `text_second` VARCHAR( 128 ) NOT NULL,
  `text_final` VARCHAR( 128 ) NOT NULL
 ) ENGINE = '._MYSQL_ENGINE_.' CHARACTER SET utf8 COLLATE utf8_general_ci;'));
}
public function insertDB()
{
 return (Db::getInstance()->execute('
 INSERT INTO `'._DB_PREFIX_.'areduction` (`valeur_affichage`,`valeur_temps`,`text_intro`, `text_second`, `text_final` ) VALUES (1, 5, "Jouez pour gagner un bon de réduction", "Félicitation vous avez gagné !", "Voici le code à utiliser")'));
}

public function desinstallDB()
{
 return (Db::getInstance()->execute('DROP TABLE IF EXISTS`'._DB_PREFIX_.'areduction`'));
}
public function hookheader($params)
{
  global $cookie, $smarty;
 //
 //Récupération du nombre de ligne dans la ps_cart_rule = nombre de bons de réductions
 //
 $sql = "SELECT COUNT(*) FROM `"._DB_PREFIX_."cart_rule`";
 $nbMax = Db::getInstance()->getValue($sql);
 $idlangue = $cookie->id_lang;
 //
 // si nombre de lignes plus grand que 0 alors on va chercher les bons.
 //
 if($nbMax > 0){
  $query = "SELECT `code`,`name`
   FROM `"._DB_PREFIX_."cart_rule` cr
   LEFT JOIN `"._DB_PREFIX_."cart_rule_lang` crl ON crl.`id_cart_rule` = cr.`id_cart_rule`
   WHERE crl.`id_lang` = ".$idlangue."
   AND cr.`active` = 1
   ORDER BY RAND( )
   LIMIT 1";
  $reponse = Db::getInstance()->ExecuteS($query);


  $sql = "SELECT `valeur_temps`,`text_intro`, `text_second`, `text_final` FROM `"._DB_PREFIX_."areduction`";
  $txt = Db::getInstance()->ExecuteS($sql);
function afficheTirageAusort() {
   //Initialisation des variables
   $ip = $_SERVER["REMOTE_ADDR"];
   $date_str = date('d-m-y');
   $rep = "ip/";
   if (!file_exists($rep)) {
	    fopen($rep, "w+");
   }

   $periode = 1;
   $i = 0;
   $date_jeu = 0;
   //Test de l\'existence du fichier
   while ($i <= $periode) {
 list($d,$m,$Y)= explode('-',$date_str);
	    $date2 = Date('d-m-Y', mktime(0, 0, 0, $m, $d + $i, $Y));
  $fichier = $ip . '-' .$date2 . '.txt';
	    if (file_exists($rep . $fichier)) {
			    $var = 1;
  break 1;
	    } else {
			    fopen($rep . $fichier, 'w+');
			    $var = 0;

	    }
			  $i++;
   };
   return $var;
}
$var_tirage_sort = afficheTirageAusort();
//var_dump($var_tirage_sort) ;
  $smarty->assign(array(
   'reponse' => $reponse,
   'url' => $_SERVER['REQUEST_URI'],
   'host' => $_SERVER['HTTP_HOST'],
   'index' => $_SERVER['HTTP_HOST'].'/index.php',
   'txt' => $txt,
   'var_tirage_sort' => $var_tirage_sort
  ));

  $this->smarty->assign('tmp', '6');

  //
  // Ajout de mon css et js
  //
  $this->context->controller->addJS($this->_path.'js/reduc.js', 'all');
  $this->context->controller->addCSS($this->_path.'css/reduc.css', 'all');

  //
  // On vérifie si on affiche le module pour tout le monde ou pas.
  //
  $verif = "SELECT `valeur_affichage` FROM `"._DB_PREFIX_."areduction`";
  $verification = Db::getInstance()->ExecuteS($verif);
  foreach ($verification as $row){
   $vFinal = $row['valeur_affichage'];
  }

  //
  //Si on autorise tout le monde à voir le module, on affiche le module
  //
  if($vFinal == 1){
   return $this->display(__FILE__, 'views/template/hook/allreduction.tpl');
  }else{
   return $this->display(__FILE__, 'views/template/hook/connecreduction.tpl');
  }
 }
}

//
// Formulaire pour mettre afficher le texte de son choix dans le pop-up
//
public function getContent()
   {
  $output = '<h2>'.$this->displayName.'</h2>';
 if (Tools::isSubmit('submitInsert'))
 {
  $val = Tools::getValue('val');
  $temps = Tools::getValue('temps');
  $premier = Tools::getValue('premier');
  $second = Tools::getValue('second');
  $final = Tools::getValue('final');
  if ($val != 0 && $val != 1){
   $output .= '<div class="alert error">'.$this->l('Valeur pour "Autoriser les personnes non connectées…": Erreur ').'</div>';
  }else{
   Db::getInstance()->update('areduction',array(
 'valeur_affichage' => (int)$val,
 'valeur_temps'    => (int)$temps,
 'text_intro'    => pSQL($premier),
 'text_second'    => pSQL($second),
 'text_final'	   => pSQL($final)
   ));
   $output .= '<div class="conf confirm">'.$this->l('Settings updated').'</div>';
  }
 }

 return $output.$this->displayForm();
   }
private function displayForm()
{
  global $cookie;
  $defaultLanguage = (int)(Configuration::get('PS_LANG_DEFAULT'));
 $languages = Language::getLanguages(false);
 $divLangName = 'text¤title';

 $recup = "SELECT * FROM `"._DB_PREFIX_."areduction`";
 if($result = Db::getInstance()->ExecuteS($recup))
 foreach ($result as $f){
  $valeurAff = $f['valeur_affichage'];
  $valeurTmp = $f['valeur_temps'];
  $textintro = $f['text_intro'];
  $textsecond = $f['text_second'];
  $textfinal = $f['text_final'];
 }

  $finalput ='<form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post">
  <fieldset>
   <label >'.$this->l('Autoriser les personnes non connectées à voir le module :').'</label>
   <div class="margin-form">';
   if ($valeurAff == 1)
   {
 $finalput .='<input type="radio" name="val" value="1" checked="checked"/>
 <label class="t" for="on"><img src="../img/admin/enabled.gif" alt="'.$this->l('Oui').'" title="'.$this->l('Oui').'" /></label>
 <input type="radio" name="val" value="0"/>
 <label class="t" for="off"><img src="../img/admin/disabled.gif" alt="'.$this->l('Non').'" title="'.$this->l('Non').'" /></label><br/>';
   }else{
 $finalput .='<input type="radio" name="val" value="1"/>
 <label class="t" for="on"><img src="../img/admin/enabled.gif" alt="'.$this->l('Oui').'" title="'.$this->l('Oui').'" /></label>
 <input type="radio" name="val" value="0" checked="checked"/>
 <label class="t" for="off"><img src="../img/admin/disabled.gif" alt="'.$this->l('Non').'" title="'.$this->l('Non').'" /></label><br/>';
   }
 $finalput .='</div>
   <div class="clear pspace"></div>
   <label for="premier">'.$this->l('Texte d\'accueil :').'</label>
   <input type="text" name="premier" value="'.$textintro.'"/><br/>
   <div class="clear pspace"></div>
   <label for="second">'.$this->l('Texte lorsque la personne a gagné :').'</label>
   <input type="text" name="second" value="'.$textsecond.'"/><br/>
   <div class="clear pspace"></div>
   <label for="final">'.$this->l('Texte placé avant le code de réduction :').'</label>
   <input type="text" name="final" value="'.$textfinal.'"/><br/>
   <div class="clear pspace"></div>
   <label for="temps">'.$this->l('Temps avant affichage du résultat :').'</label>
   <input type="text" name="temps" value="'.$valeurTmp.'"/><br/>
   <div class="clear pspace"></div>
   <div class="margin-form clear"><input type="submit" name="submitInsert"/></div>
  </fieldset>
 </form>';
 return $finalput;
}
}
?>

 

bon le soucis c'est qu'il ne s'affiche pas je dois avoir un problème avec smarty, sinon le principe fonctionne bien

Link to comment
Share on other sites

  • 2 weeks later...

Je crois que j'ai trouvé une réponse viable pour en finir !

 

L'idée serait de créer le cookie avec l'ip lorsque la personne désactive (clique sur la croix) du pop-up ou clique sur jouer.

Du coup dans le fichier php, il suffit de vérifier si le cookie existe et si l'ip à l'intérieur est la même que la personne qui visite le site.

 

A cela on peut du coup déterminer, aussi, la durée de vie de ce cookie pour remettre le pop-up en place au bout de X temps.

Edited by arnaud1900 (see edit history)
Link to comment
Share on other sites

Bon je rame sur la création du cookie, il veut pas le prendre en compte…

 

Dansle fichier php j'ai déclaré une variable IP à envoyer au tpl :


$ipServer = $_SERVER["REMOTE_ADDR"];
$this->smarty->assign('ipcookie', $ipServer);

 

 

Dans le fichier reduc.js j'ai rajouté cette fonction de création de cookie:

function createCookie(name,value,days) {
if (days) {
 var date = new Date();
 date.setTime(date.getTime()+(days*24*60*60*1000));
 var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}

 

et dans mon fichier tpl, j'ai modifié la ligne 6 :

<script type="text/javascript">
var elcookie = "{$ipcookie}";
</script>
<div id="exit" onclick="exti();createCookie('ipcookie',elcookie,7);"></div>

 

 

mais rien n'y fait, elcookie a bien une valeur correcte, mais le cookie n'est pas créé… je comprend pas.

Link to comment
Share on other sites

  • 3 months later...

Bonjour,

votre module est juste geniale et je voulais le preciser tout d'abord. etant en version 1.4.9 de presta j'ai telecharger la v1.8 de votre module.

 

J'ai neanmoins un probleme car j'ai actuellement plusieur bon de reduction et ils les prend tous pour les faire passer au hasard je souhaiterai pouvoir choisir 1 ou plusieurs bon de reduction mais pas tous... est-ce possible ?

 

herve

Link to comment
Share on other sites

  • 5 weeks later...

Bonjour,

C'est un module efficace d'un point de vue marketing et commercial, une idée pour une future évolution pourrait :

- ajouter un formulaire avec un champ email pour recevoir son code promo à la lecture du gain. Dans le genre "Remplissez les champs suivants pour recevoir votre code promo "-30% sur toute la boutique..." par e-mail"

 

Avantages ou inconvénients ? Je suis de mèche à capter un maximum de mail, le plus tôt possible, l'internaute est si versatile.

Link to comment
Share on other sites

  • 1 year later...

Bonjour,

 

Je viens d'installer la version 2.5 sur PS 1.5.6.2, tout est ok ^^.

 

Je soumet juste quelques modifications à apporter (déjà proposées et nouvelles) :

1* Choix du texte quand le tirage n'est pas gagnant.

2* Sélection des bons pour la loterie.

3* Définition de la durée avant que la popup ne s'affiche à nouveau sur la même iP.

4* Proposer au visiteur de saisir son email pour recevoir son Bon (en réalité il s'inscrirait sur le site en plus) (mais on risque d'avoir un soucis avec le 2* après).

5* Pouvoir proposer des  articles (donc il faudrait sélection + qté) en plus des bons de réduction

6* Définition du nombre de tirage avant de gagner un bon spécifique (ou article si 5* développé). Il faudrait pouvoir ajouter autant de ligne de Définition 6* qu'on le souhaite.

7* Télécharger l'image affichée dans la popup pour la remplacer (avec aperçu coté BO).

8* Pouvoir partager sur les principaux réseaux sociaux le fait qu'on a gagné à la loterie.

9* Définir le nombre de gagnants par jour et/ou le nombre de gagnants par bon

10* Ne plus activer la popup quand tout est gagné ou Définir le texte à afficher quand la loterie est finie.

 

Je pense que c'est déjà pas mal pour une V.3 ^^

Edited by lordbdp (see edit history)
Link to comment
Share on other sites

  • 4 weeks later...
  • 1 month 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...