8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un script JS qui est généré à partir de PHP. C'est un menu et je récupère les informations de la base de données pour les insérer dans le menu, donc besoin de PHP.

J'obtiens un script JS dans mon code source et j'aimerais pouvoir le mettre à part dans un fichier JS et l'appeler avec <script src="" />. Ceci pour optimiser mon code source, tout simplement. Le script fonctionne très bien.

J'aimerais qu'à chaque ouverture de la page, le script se génère et s'en aille dans un fichier JS à part pour pouvoir l'appeler.

J'ai pensé à un fopen mais je récupère le PHP et pas le script généré. Alors je me tourne vers vous.

Merci d'avance
En fait j'ai le menu html qui est généré. Et j'ai une partie javascript a côté qui s'execute pour le déroulement des menus. C'est cette partie qui s'affiche dans mon code source et que je souhaiterais envoyer dans un fichier à part.
Les informations de mon menu sont sur une base de données.
J'ai donc un fichier PHP qui récupère ces informations et génère un code en Javascript qui permet de déplier/replier mon menu.
C'est un code assez long que je voudrais mettre dans un fichier JS.
Et comme à la base c'est un fichier PHP, ca me pose problème.

J'espère que tu comprends bien ce que je veux faire ^^
Dans ton appel de script JS :

<script type="text/javascript" src="mon_fichier_js.php"></script>


Ensuite, dans ton fichier "mon_fichier_js.php" tu vas faire ta petite moulinette en php.

Il faut juste, que ton fichier soit renvoyer comme un fichier Js (changement des headers renvoyé par le serveur).

Pour résumé, tes deux première ligne de ton fichiers "mon_fichier_js.php" devront être :

<?php
header('Content-type: application/javascript');


Ainsi, ton fichier PHP sera renvoyé au navigateur comme un fichier javascript, sauf qu'il sera traité par ton serveur avant l'envoie Smiley cligne

*Suppression du "multipostage" et des posts inutiles Smiley cligne
Modifié par 6l20 (15 Jun 2010 - 13:44)
Ca ne fonctionne pas. Le content type fonctionne, mais l'appel ne se fait pas correctement.

A mon avis, ca vient du fait qu'on utilise la balise script pour appeler un .php ... Il regarde pas les entêtes je pense.
Franchement, désolé d'insister, mais tu as été regarder les exemples sur le site de superfish?

Il ya vraiment quelque chose qui m'échappe dans ta manière de faire. Tu n'as pas une page ligne? Le code html généré?
J'ai finalement trouvé !

Ce que tu m'as donné fonctionne en fait, c'est parfait !

Patidou, j'ai été voir, mais j'ai pas le temps de reprendre ce script en entier, c'était plus simple pour moi de faire comme ça.

Merci à vous deux !
Hello,

Idem que Patidou, je ne suis pas sur de voir l'utilité de faire un script PHP pour générer du Javascript, il doit y avoir moyen de faire autrement.

Cela dit, ce qui t'a été indiqué, d'appeller un script php depuis une balise script est tout à fait possible, du moment que le code retourné est bien du js, avec les bonnes entetes.

Qu'est-ce que tu entends par "Le content type fonctionne, mais l'appel ne se fait pas correctement" ?

Edit : Crossposting
Modifié par Tymlis (15 Jun 2010 - 14:01)
Ah bien si vous dîtes que l'on peut utiliser une bdd MySQL autrement qu'en PHP pourquoi pas ...

Mais bon ça fonctionne ainsi, alors voilà Smiley smile Je regarderai, pour la prochaine fois !

Je disais que les headers étaient bien modifiées en fait mais qu'à l'appel du fichier avec <script> ça ne fonctionnait pas, le fichier ne s'éxécutait pas. Une erreur de ma part que j'ai corrigée, tout est niquel !
Je crois que ce qu'ils voulaient plutôt dire... c'est que tu place les infos de ton menu directement dans ton code HTML et que tu les caches au chargement de la page en javascript. Ton script javascript ne feraient alors que dérouler ou enrouler un menu déjà dans le code HTML au lieu d'ajouter le code html par javascript (ce qui serait d'ailleurs plus accessible puisque sans javascript ton menu s'afficherait complètement déroulé avec leur méthode (donc utilisable)... alors qu'avec ta méthode le menu ne sera tout simplement pas visible. Bonne journée!