Jump to content

[RESOLU] Insérer une balise script dans un template depuis un module


Recommended Posts

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 by virtual (see edit history)
Link to comment
Share on other sites

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 by herve25 (see edit history)
Link to comment
Share on other sites

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

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

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

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

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