Jump to content
Vinum

[Resolu] Chargement javascript dans controller

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)

Share this post


Link to post
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?

Share this post


Link to post
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?

 

Share this post


Link to post
Share on other sites

Bonjour,

Merci mais aucune de vos suggestions n'est possible ou ne fonctionne.

J'avoue que je ne comprends pas.

Surtout que chez certains clients cela fonctionne et chez d'autres non.

Share this post


Link to post
Share on other sites

Quelques banalités au cas où:

-Problème de cache (local ou smarty)?

-regarder le source généré

-poser des error_log() avant et après les addJS pour tracer leur exécution?

Share this post


Link to post
Share on other sites

et en mettant :

<script type="text/javascript">$(document).ready(function() {ta_fonction_js()})</script>

ta_fonction_js étant la fonction qui appelle le js contenu dans tes 2 fichiers (monscript1.min.js et monscript2.min.js)

Share this post


Link to post
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)

Share this post


Link to post
Share on other sites

c'est surtout le $(document).ready qui est important dans ma réponse ça permet d'attendre la fin du chargement de la page avant de charger ton js.

Share this post


Link to post
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.

Share this post


Link to post
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

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More