Jump to content

[Resolu] Chargement javascript dans controller


Vinum

Recommended Posts

Bonjour,
Sous Prestashop 1.5, dans la classe d'un module je charge des javascript de la façon suivante :

 

    function hookDisplayBackOfficeHeader()
    {
       if ( $this->context->controller instanceof AdminMonController )
        {
       
      $this->context->controller->addJS(array(
                  $this->_path.'/js/monscript1.min.js',
                $this->_path.'/js/monscript2.min.js'               
            ));
            
        }    
    
    }

 

Or mes scripts utilisent jquery et malheureusement de cette façon il sembleraient qu'ils soient chargés avant jquery. Ce qui génère des erreurs.
Donc comment charger mes javascripts pour qu'ils se chargent après jquery ?

merci

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

Bonjour,

Je dis peut être une bêtise, en espérant que ça t'inspire.

Si ton javascript est chargé trop tôt, c'est probablement que le hook que tu utilises est exécuté trop tôt.

Idées de solutions:

-Utiliser un autre hook plus tardif

-mettre ton javascript dans le template (beurk)?

 

Autre pensée qui me vient (je ne connais pas trop le fonctionnement des controllers back office): le addJS fonctionne-t-il dans leur contexte?

Link to comment
Share on other sites

Au cas où ça donnerait une piste:

Je viens d'intégrer un peu de javascript dans un controller back office comme ceci:

 

class AdminMonModuleController extends ModuleAdminController {

 

...

public function renderView()
    {
        $this->context->controller->addJS(_MODULE_DIR_.'/monmodule/lib/angular.min.js');
        $this->context->controller->addJS(_MODULE_DIR_.'/monmodule/lib/angular-resource.js');
        error_log("renderview");
        
        $this->context->smarty->assign("toto",$this->context->employee->id);
        return parent::renderView();
    }

 

}

 

Ca se passe bien, mais ne j'ai pas vraiment besoin de jQuery au dessus.

Si ça ne marche pas, tu peux peut être aussi charger ton jQuery manuellement avant avec ton addJs?

 

Link to comment
Share on other sites

Pas de problème de cache.

Coeos, le problème n'est pas dans l'appel du script mais dans le chargement de celui ci qui  se charge avant jquery chez certains clients.

J'ai essayé de les charger dans la function hookDisplayBackOfficeHeader() dans la classe de définition du module, dans les fonctions setmedia, renderview.

Mais soit les scripts ne sont pas chargés, soit chez certains clients ils sont chargés avant jquery. La seule solution que je vois pour y remédier serait de recharger jquery après mes scripts mais cela n'est pas génial comme solution.

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

Oui mais sauf erreur de ma part le $(document).ready sert à appeler une fonction dans la page. Or je n'ai pas de problème de ce coté là avec l'appel de la fonction. Le problème vient du fait que le javascript que je charge (et qui utilise jquery) dans le header se charge avant jquery chez certains clients mais pas chez tous. D'où la génération d'erreurs.

Je pensais qu'un chargeant mes scripts dans le hook function hookDisplayBackOfficeHeader() ceux ci seraient chargés après les scripts natifs de prestashop mais il semblerait que non.

Link to comment
Share on other sites

Bonjour,

Je me réponds à moi même car je pense avoir trouvé la solution.

En fait pour charger proprement un javascript dans le header d'un controller en admin, il faut utiliser le hook :hookActionAdminControllerSetMedia

plutôt que hookDisplayBackOfficeHeader.

 

Comme cela

 

public function hookActionAdminControllerSetMedia($params)
{
 
     if ( $this->context->controller instanceof AdminMonController )
    {
      
          $this->context->controller->addCSS($this->_path.'css/moncss.css');
       
         $this->context->controller->addJS(array(
                   $this->_path.'/js/monjavascript1.js',         
                  $this->_path.'/js/monjavascript2.js'
                
            ));
    }
 
}

  • Like 2
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...