Jump to content

Variable irrécupérable dans la fonction hook du module


draeya

Recommended Posts

Bonjour,

je developpe actuellment un module tout bête avec un upload de fichier et un lien assigné à ce fichier

le soucis est que je n'arrive pas a récupréer le lien dans ma fonction hookHome

voici la classe du module merci pour votre aide.

la variable concerner est: $lien;

<?php

class homepage extends Module
{
   /** @var max image size */
   protected $maxImageSize = 307200;
   public $lien;

   public function __construct()
   {
       $this->name = 'homepage';
       $this->tab = 'Blocks';
       $this->version = '1.00';

       parent::__construct();

       $this->page = basename(__FILE__, '.php');
       $this->displayName = $this->l('HomePage Edit');
       $this->description = $this->l('Modifier le visuel en Home Page');
   }

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

   public function getCustomValues()
   {
       return Db::getInstance()->ExecuteS("select distinct(name) from ps_customization_field_lang order by 1");
   }

   public function _MakeSelect()
   {
       global $result, $lien;

       $result = $this->getCustomValues();
       $_Combo = '';
       $_Combo .= '            if($lien == "")
           {
               $_Combo .='selected="selected" ';
           }
       $_Combo .= '>Choisir un thème...';

       foreach($result as $key => $value)
       {
           if($value["name"] !='')
           {
               $_Combo .= '                if($lien == $value["name"])
               {
                   $_Combo .= 'selected="selected"';
               }
               $_Combo .= '>'.$value["name"].'';
           }
       }
       $_Combo .= '';
       return $_Combo;
   }

   public function getContent()
   {
       global $smarty, $lien;

       $this->_html = ''.$this->displayName.'';
       $errors = '';

       if (isset($_POST['submitUpdate']))
       {    
           if ((isset($_FILES['body_homepage_logo'])&&($_FILES['body_homepage_logo']['error'] == UPLOAD_ERR_OK))) 
           {
               move_uploaded_file($_FILES['body_homepage_logo']['tmp_name'], dirname(__FILE__).'/homepage_logo.png');
           }

           if(isset($_POST['LIEN_IMG']))
           {
               $this->lien = $_POST['LIEN_IMG'];
           }

           $this->_html .= $errors == '' ? $this->displayConfirmation('Settings updated successfully') : $errors;
       }

       $this->displayForm();
       return $this->_html;
   }

   public function displayForm()
   {
       global $cookie;

       $this->_html = '
       <form method="post" action="'.$_SERVER['REQUEST_URI'].'" enctype="multipart/form-data">

_path.'logo.gif" alt="" title="" /> '.$this->displayName.'

'.$this->l('Insérer une image (635 x 351):').'



_path.'homepage_logo.png" alt="" title="" />



                   <input type="file" name="body_homepage_logo" />



Sélectionnez un lien: 
';
       $this->_html .= $this->_MakeSelect();        
       $this->_html .='

<input type="submit" name="submitUpdate" value="'.$this->l('Mettre à jour').'" class="button" />

       </form>';


   }

   public function hookHome($params)
   {
       global $smarty, $lien;

       print_r($this->lien);

       $url_img = $this->_path.'homepage_logo.png';
       $smarty->assign('url_theme', $this->lien);
       $smarty->assign('url_img' ,$url_img);
       return $this->display(__FILE__, 'homepage.tpl');
   }
}

?>

Link to comment
Share on other sites

hmm, si je comprends bien ce que tu veux faire ici...


Tu souhaites sauver un lien vers un image que tu as mis dans un input dans la page de configuration de ton module.

Tu as ici un gros problème : Tu stock ce lien dans une variable de ta classe (mal définie d'ailleurs puisque tu fais à la fois référence à $this->lien et une variable global $lien.). Cette variable sera réinitialisée à chaque fois que tu rafraichi ta page.

En fait, un objet de ta classe, utilisée dans le backoffice pour affichée la page de configuration, recevra ton lien dans $this->lien.

Par contre, l'objet de ta classe créée pour afficher effectivement du contenu dans le front office via la fonction hookHome ne passera pas par la fonction getContent, par conséquence, ton print_r($this->lien) n'affichera que... rien.


La solution pour cela est de ne pas mettre dans ton getContent() $this->lien = $_POST['...'], mais de stocker cette variable de $_POST dans la base de donnée.


Bon courage dans tous les cas ;)

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