virtual Posted May 13, 2014 Share Posted May 13, 2014 (edited) Bonjour à tous, J'essaye de développer un module pour prestashop qui permette d'ajouter une barre de progression lorsqu'un client ajoute des photos au module de personnalisation d'un produit. Techniquement, tous fonctionne parfaitement. j'ai juste un petit problème. J'ai un fichier javascript qui doit appeler une page php qui se trouve dans le dossier de mon module. La question est : comment obtenir l'adresse complète depuis mon fichier js ? Il faudrait logiquement utilisé depuis un template smarty {$base_url} donc je me suis dis que j'allais ajouter ceci dans mon template : <script> var ajax_url = '{base_url}/modules/monmodule/mapage.php; </script> qui est utilisé de la façon suivante dans mon module : public function hookDisplayFooterProduct() { return $this->display(__FILE__, 'js.tpl'); } Seulement, Prstashop me supprime automatiquement tout ce qui se trouve entre les balises <script> Si j'écris <scri> // code </scri> ça passe, mais <script> non. Dans le même genre si j'écris dans mon template ceci : <script type="text/javascript" src="fichier_js_qui_nexiste_pas.js"></script> Le code est bien inséré à l'emplacement du hook. Mais si j'écris : <script type="text/javascript" src="fichier_js_qui_existe.js"></script> le code n'est pas inclus. Donc, visiblement, prestashop vérifie si le fichier existe et supprime la balise le cas échéant. Je ne comprend pas vraiment l'intérêt de laisser la balise si le fichier n'existe pas ? Donc j'imagine qu'il y a une sorte de filtre qui empêche d'inclure du javascript de cette façon. Je ne comprend pas exactement pourquoi mais bon. Je suppose qu'il y a une technique pour désactiver ça, mais je n'arrive pas à trouver donc si quelqu'un pourrait m'éclairer, ça serait super ! Une autre alternative serait de pouvoir accéder à certaines variables de prestashop depuis javascript (avec des variables global ou quelque chose comme ça), mais je n'ai pas trouver de doc à ce sujet, donc je suppose que ce n'est pas possible. Merci de prendre du temps pour m'aider. Edited May 16, 2014 by virtual (see edit history) Link to comment Share on other sites More sharing options...
jd440 Posted May 14, 2014 Share Posted May 14, 2014 As tu essayé avec {literal}{/literal}? Link to comment Share on other sites More sharing options...
virtual Posted May 14, 2014 Author Share Posted May 14, 2014 Oui j'ai essayé, le problème est exactement le même. Link to comment Share on other sites More sharing options...
herve25 Posted May 14, 2014 Share Posted May 14, 2014 (edited) Bonjour,Il existe une variable javascript "baseDir" qui comprend l'url du site ( Visible dans le header des pages) Du coup tu peux la récupérer directement dans ton fichier js sans passer par un template tpl. Ex var ajax_url = baseDir + '/modules/monmodule/mapage.php'; Edited May 14, 2014 by herve25 (see edit history) Link to comment Share on other sites More sharing options...
virtual Posted May 15, 2014 Author Share Posted May 15, 2014 Ah merci herve25, ça devrait résoudre mon problème ! Mais par contre, je suis tout de même intéressé par une solution pour insérer du javascript directement dans un tpl car j'en aurais certainement besoin plus tard. Link to comment Share on other sites More sharing options...
herve25 Posted May 15, 2014 Share Posted May 15, 2014 Quelle version de prestashop ?Sur une version 1.5 le code ci-dessous fonctionne sans problème <script type="text/javascript" src="{$modules_dir}/moduleName/fichier.js"></script> Link to comment Share on other sites More sharing options...
virtual Posted May 15, 2014 Author Share Posted May 15, 2014 La variable baseDir en js marche très bien. Merci. j'ai pu finir mon module, je vais le publier sur le forum. Pour le problème d'insertion d'une balise script, c'est avec la version 1.6 de prestashop. Ce code là : public function hookDisplayFooterProduct() { return "<b> Coucou </b> <script> alert('salut'); </script> <b> hello </b>"; } m'affiche dans le code source : <b> Coucou </b> <b> hello </b> Link to comment Share on other sites More sharing options...
herve25 Posted May 16, 2014 Share Posted May 16, 2014 C'est exact je viens de vérifier le javascript n'apparait pas dans le fichier du module (Nouveau comportement Prestashop 1.6)En revanche le fichier est bien chargé :-) Tous les fichiers javascript sont affichés en fin de page avant la balise </body> <script type="text/javascript" src="/prestashop_1.6.0.6/themes/default-bootstrap/js/modules/blocktopmenu/js/blocktopmenu.js"></script> <script type="text/javascript">alert('test');</script> </body> </html> L'ajout via cette méthode fonctionne tout même du coup. Link to comment Share on other sites More sharing options...
virtual Posted May 16, 2014 Author Share Posted May 16, 2014 Aaah d'accord ! Prestashop optimise le chargement de la page en migrant toutes les balises <script> en fin de page. C'est astucieux ! J'aurais du lire tous le code source avant d'en déduite que mon code n'étais pas affiché ! En tout cas, merci beaucoup de m'avoir éclairé 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