Vinum Posted September 11, 2013 Share Posted September 11, 2013 (edited) 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 September 20, 2013 by Vinum (see edit history) Link to comment Share on other sites More sharing options...
spacm Posted September 11, 2013 Share Posted September 11, 2013 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 More sharing options...
spacm Posted September 11, 2013 Share Posted September 11, 2013 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 More sharing options...
Vinum Posted September 11, 2013 Author Share Posted September 11, 2013 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. Link to comment Share on other sites More sharing options...
spacm Posted September 12, 2013 Share Posted September 12, 2013 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? Link to comment Share on other sites More sharing options...
coeos.pro Posted September 12, 2013 Share Posted September 12, 2013 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) Link to comment Share on other sites More sharing options...
Vinum Posted September 13, 2013 Author Share Posted September 13, 2013 (edited) 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 September 13, 2013 by Vinum (see edit history) Link to comment Share on other sites More sharing options...
coeos.pro Posted September 14, 2013 Share Posted September 14, 2013 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. Link to comment Share on other sites More sharing options...
Vinum Posted September 15, 2013 Author Share Posted September 15, 2013 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 More sharing options...
Vinum Posted September 20, 2013 Author Share Posted September 20, 2013 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' )); } } 2 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now