Jump to content

[MODULE] Question developpement d'un nouveau module.


Recommended Posts

Bonjour,

Je développe un module pour mon entreprise, dans lequel il y a besoin, sur la page de configuration, d'intégrer dans la base de donnée certaines informations rentrées dans des champs de la page de config.

Mon soucis est qu'avec la balise Javascript, le module est considéré comme contenant des erreurs.

Auriez vous une solution sachant que je n'ai jamais développé de module ?

Merci d'avance.

Doug

Link to comment
Share on other sites

Bonjour,

Je développe un module pour mon entreprise, dans lequel il y a besoin, sur la page de configuration, d'intégrer dans la base de donnée certaines informations rentrées dans des champs de la page de config.

Mon soucis est qu'avec la balise Javascript, le module est considéré comme contenant des erreurs.

Auriez vous une solution sachant que je n'ai jamais développé de module ?

Merci d'avance.

Doug


Salut,

tu dois nécessairement avoir des problèmes d'échappement du code html retourné .
Le javascript passe nickel en BO ,
si dans la fonction getContent() , tu fais un return $html ,
et que tu as un truc du genre :

$html = '[removed]var mavar = 'toto';[removed]';



tu auras obligatoirement une erreur de parsing (seulement affichée si tu as display error à on dans config.inc.php )

Dans ce bout de code ci dessus par exemple ... tu devrais avoir échappé tous les ' du fait que ta variable est entre deux ' :

$html = '[removed]var mavar = \'toto\';[removed]';

Link to comment
Share on other sites

Bonjour, et merci de l'aide que tu me propose.

Je vais te copier mon code, étant en BTS IRIS, je n'ai pas spécialement beaucoup de notions, surtout sur Prestashop que je découvre :).

<?php
class Blocsondage extends Module
{
   function __construct()
   {
       $this->name = 'blocsondage';
       $this->tab = 'Mes modules';
       $this->version = 0.1;
       $this->displayName = $this->l('Bloc Sondage');
       $this->description = $this->l('Insere un bloc sondage dans votre site');

       parent::__construct();
   }

   function install()
   {
       if (!parent::install())
           return false;
       if (!$this->registerHook('rightColumn'))
           return false;
       return true;
   }

   public function uninstall()
    {
         if (!parent::uninstall())
             return false;
    }
   public function getContent()
   { 
       echo "

Administration du module Sondage : 
           <form method='post' name='creer' action=''>
Créer un nouveau Sondage :
           Nom du Sondage : <input id='creer' name='nomsondage' type='text' />
           <input method='post' name='submitcreer' type='submit' value='Envoyer' onClick='nouveauSondage(document.getElementById(\"nomsondage\");'/> 


           </form>
           <form method='post' name='modif' action=''>
Modifier un Sondage :


Aucun
           <input name='submitmodif' type='submit' value='Envoyer' /><br>


           </form>
           <form method='post' name='reinit' action=''>
Réinitialiser un Sondage :


Aucun
           <input name='submitreinit' type='submit' value='Envoyer' /><br>


           </form>
           <form method='post' name='suppr' action=''><h3>Supprimer un Sondage :


Aucun
           <input name='submitsuppr' type='submit' value='Envoyer' /><br>


           </form>
           <form method='post' name='radiopublic' action=''>
Résultats de Sondage publics :
           <input type='radio' name='public' value='oui' checked>Oui

           <input type='radio' name='public' value='non'>Non

           </form></br>
           <form method='post' name='votepublic' action=''>
Autoriser seulement un vote par Sondage par :
           <input type='radio' name='vote' value='jour'>Jour

           <input type='radio' name='vote' value='mois'>Mois

           <input type='radio' name='vote' value='seul'>Autoriser un seul vote

           <input type='radio' name='vote' value='tous' checked>Autoriser tous les votes

           </form></br>

<input name='submitsave' type='submit' value='Sauvegarder' class='button'/></center>
";
   }
   function nouveauSondage($nomsondage)
   {
       Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_lang (id_sondage int(11) AUTO_INCREMENT, nom_sondage text, PRIMARY KEY (id_sondage))");
       Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_reponse_lang (id_reponse int(11) AUTO_INCREMENT, id_sondage int(11),nom_reponse text, ip_client varchar(20), date date, PRIMARY KEY (id_reponse))");
       Db::getInstance()->ExecuteS("INSERT INTO ps_sondage_lang VALUES ('', '".$nomsondage."'");
   }

   function hookRightColumn($params)
   {
       return $this->display(__FILE__, 'blocsondage.tpl');
   }
}
?>



En fait, j'ai essayé de créer une fonction, comme pour les "pages normales". Mais visiblement, ça ne fonctionne pas comme ça ^^'.

Link to comment
Share on other sites


public function install()
 {

   if(!parent::install() || 
      !$this->registerHook('rightColumn') ||  
      !$this->installDB())
     return false;
   return true;
 }

 public function installDb()
 {
Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_lang (id_sondage int(11) AUTO_INCREMENT, nom_sondage text, PRIMARY KEY (id_sondage))");
       Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_reponse_lang (id_reponse int(11) AUTO_INCREMENT, id_sondage int(11),nom_reponse text, ip_client varchar(20), date date, PRIMARY KEY (id_reponse))");


   return true;
 }

Link to comment
Share on other sites

C'est exactement ce que je fais déjà, si tu regarde bien. Mais merci quand même :)

ps:

public function installDb()
 {
Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_lang (id_sondage int(11) AUTO_INCREMENT, nom_sondage text, PRIMARY KEY (id_sondage))");
       Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_reponse_lang (id_reponse int(11) AUTO_INCREMENT, id_sondage int(11),nom_reponse text, ip_client varchar(20), date date, PRIMARY KEY (id_reponse))");


   return true;
 }



Ne marche pas.

Link to comment
Share on other sites

Doug, pour te guider, tu peux epluché le module point de fidelite qui travail avec un bdd.

y a rien de mieux pour comprendre comment faire !


par contre sis je peut me permettre, un truc con, mais la fuction d'install, elle est seulement executée a l'installation du module, donc desinstal le et reinstal le pour l'executer

Link to comment
Share on other sites

C'est exactement ce que je fais déjà, si tu regarde bien. Mais merci quand même :)

ps:
public function installDb()
 {
Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_lang (id_sondage int(11) AUTO_INCREMENT, nom_sondage text, PRIMARY KEY (id_sondage))");
       Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_reponse_lang (id_reponse int(11) AUTO_INCREMENT, id_sondage int(11),nom_reponse text, ip_client varchar(20), date date, PRIMARY KEY (id_reponse))");


   return true;
 }



Ne marche pas.




Pas tout à fait d'accord ;) , ce n'est pas ce que tu fais ...
Je n'ai pas prêté attention au fait que tu créais une table , mais ici ta table doit être crée dans install idéalement,
et non faire un create if not exists ... chaque fois que tu veux insérer un élément .

Reprends le code donné par dfede , il est clair que c'est plus propre.

De plus tu fais tes inserts direct dans ps_nomdetable ...

Es tu certain que le préfix de ton install est bien PS ???
Link to comment
Share on other sites

Doug, pour te guider, tu peux epluché le module point de fidelite qui travail avec un bdd.

y a rien de mieux pour comprendre comment faire !


par contre sis je peut me permettre, un truc con, mais la fuction d'install, elle est seulement executée a l'installation du module, donc desinstal le et reinstal le pour l'executer


ben oui mais t'as vu , sa fonction install ne fait rien dans la bdd ?! ;)

    function install()
   {
       if (!parent::install())
           return false;
       if (!$this->registerHook('rightColumn'))
           return false;
       return true;
   }



Mais dis moi ta réponse est tout de même claire et sensée. !
oulala tu couves un truc nommam , tu couves un truc !

Link to comment
Share on other sites

Merci à vous, effectivement, c'est plus propre, et enfin les tables sont créées, par contre, le problème de la requête au clic sur "Envoyer" n'est pas résolu, elle ne s’exécute toujours pas. :(

ps : Oui, je suis sur que le préfixe de mes table est 'ps_'

Link to comment
Share on other sites

http://www.krys.com/ ;). Ceci dit, je commence un module, je vais pas tout faire, pour m’apercevoir que ça ne marche pas, donc, forcément, je commence par tester, c'est pour ça que les autres formulaires sont "vides".

<input method='post' name='submitcreer' type='submit' value='Envoyer' onClick="nouveauSondage(document.getElementById('creer').value)">



j'ai testé en faisant :

<input method='post' name='submitcreer' type='submit' value='Envoyer' onClick="alert(document.getElementById('creer').value)">



Et, là, ça marche, j'ai l'affichage en alert de la valeur rentrée dans le champ.

Mais, quand je fais appel a ma fonction nouveauSondage, aucun champ n'est créé dans la base.

function nouveauSondage($nomsondage)
   {
       Db::getInstance()->ExecuteS("INSERT INTO ps_sondage_lang VALUES ('', '".$nomsondage."')");
   }

Link to comment
Share on other sites

exemple:


if(isset($_POST['ajout']))
{
nouveauSondage($_POST['nomvariable']);
}

<form action="'.$_SERVER["REQUEST_uri"].'" method="POST">
<input type="text" name="nomvariable">
<input type="submit" name="ajout">
</form>



je t'épargne les Tools Get isset de presta et Tools Get value ..

Link to comment
Share on other sites

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...