PHP et Javascript Dynamique

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Orsam, 26 Juin 2012.

  1. Orsam
    Orsam WRInaute discret
    Inscrit:
    26 Février 2011
    Messages:
    66
    J'aime reçus:
    0
    Bonjour à tous,

    J'ai besoin d'un petit conseil concernant le Javascript dynamique.

    Je m'explique :
    Dans ma page PHP, j'ai quelque chose comme ça :

    Code:
    <script src="monjs.js"></script>
    Ma question est, comment changer le contenu de mon fichier JS suivant si je suis sur telle ou telle page PHP.
    Des paramètres comme monjs.js?a=1&b=2 ?? (Pas terrible et pas propre !) :?

    Y a-t-il une façon propre d'injecter du PHP dans du Javascript ???

    Bien sûr que si j'ai, l'exemple suivant, est plus simple, mais le problème c'est que je n'ai pas qu'un seul js (il y a plusieurs librairies), et ma page PHP risque de devenir un beau bordel...

    Code:
    <script>
    alert("<?php="toto";?>")
    </script>
    Il y a peut-être le rewriting je renomme mes fichiers .js en .php et ça "devrait" rouler...

    Mais y-a-t-il un autre moyen plus propre ???

    Merci à tous.

    Olivier
     
  2. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    Oui mais c'est dépendant de ton hébergement :
    htaccess :
    Code:
    	# demander au moteur php d'interpréter le javascript
    	AddType x-mapp-php5 .js
    dans le fichier JS au tout début du script :
    PHP:
    <span class="syntaxdefault"><?php<br />    session_start</span><span class="syntaxkeyword">();</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// si tu as besoin des sessions<br /></span><span class="syntaxdefault">    ob_start</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"ob_gzhandler"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'Content-Type: text/javascript;'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment">// offset cache 24 heures * 365 jours<br /></span><span class="syntaxdefault">    $offset </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 3600 </span><span class="syntaxkeyword">*</span><span class="syntaxdefault"> 24 </span><span class="syntaxkeyword">*</span><span class="syntaxdefault"> 365</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    $expire </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'Expires: '</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">gmdate</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"D, d M Y H:i:s"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> time</span><span class="syntaxkeyword">()</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">+</span><span class="syntaxdefault"> $offset</span><span class="syntaxkeyword">).</span><span class="syntaxstring">' GMT'</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'Cache-Control: max-age='</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$expire</span><span class="syntaxkeyword">.</span><span class="syntaxstring">', public'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    header</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$expire</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">?></span>
    tu peux donc envisager ensuite d'utiliser php dans le JS genre :
    PHP:
    <span class="syntaxhtml">var urldoc = String(document.location);<br />if(urldoc.substring(0,20)!='<span class="syntaxdefault"><? echo $domain</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> ?></span>'){<br />   document.location='<span class="syntaxdefault"><? echo $domain</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> ?></span>';<br />}</span>
    Attention toutefois a la gestion du cache qui pourrait pousser un navigateur a ne pas prendre en compte le JS adapté a une certaine page en privilégiant un fichier chargé pour une autre (mais bon la partie header est modifiable)
    Dans ton cas une variable php du genre "$page" ou $_SERVER['REQUEST_URI'] sera utile pour déterminer la page qui demande le JS.
     
  3. frenchhorn
    frenchhorn WRInaute passionné
    Inscrit:
    8 Février 2007
    Messages:
    1 094
    J'aime reçus:
    1
    encore plus simple:

    Code:
    <script src="monjs.php"></script> 
    ou
    Code:
    <script src="monjs.js.php"></script>
    pour plus de clareté

    ton fichier js est en fait un fichier php, tu génère ton js dans ton fichier php
     
  4. Orsam
    Orsam WRInaute discret
    Inscrit:
    26 Février 2011
    Messages:
    66
    J'aime reçus:
    0
    Salut Zeb,

    Et merci pour ta réponse.

    J'ai ajouté la ligne suivante dans le htaccess du répertoire js et dans le répertoire du fichier php, et rien, ça ne fonctionne pas..

    Code:
    # demander au moteur php d'interpréter le javascript
       AddType x-mapp-php5 .js
    J'ai bien-sûre ajouté l'entête dans le fichier js, dans lequel j'ai juste mis un alert("<?php echo time();?>")

    Dommage, voila une solution propre..
     
  5. frenchhorn
    frenchhorn WRInaute passionné
    Inscrit:
    8 Février 2007
    Messages:
    1 094
    J'aime reçus:
    1
    je ne trove pas ca si propre que ca que de demander au serveur de lire les js comme du php...

    as tu lu ma réponse?, ca fonctionne (faut envoyer le bon hedar http), et c'est plus propre je trouve...
     
  6. Orsam
    Orsam WRInaute discret
    Inscrit:
    26 Février 2011
    Messages:
    66
    J'aime reçus:
    0
    Salut frenchhorn,

    Et merci pour ta réponse...

    Ca fonctionne très bien, à part un petit détail que j'ai modifié.

    ton code :
    Code:
    <script src="monjs.js.php"></script>
    je l'ai laissé en :
    Code:
    <script src="monjs.js"></script>
    et j'ai mis dans le htaccess :

    Code:
    RewriteRule ^([A-z0-9-]+).js$ $1.php
    Ce qui va me permettre de faire un espèce de "contrôleur" pour mes .JS (si tu trouve le fichier .js tu l'utilise autrement trouve le .php du même nom)..

    La seule chose un peut gênante, c'est que mon IDE (NetBeans) ne fait plus la différence (pour la couleur syntaxique) entre le code JS et le code PHP. :(

    Merci à tous les deux...

    Olivier
     
  7. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    Il te faut le "Apache Module mod_mime" activé sur le serveur. Ce qui te permet entre autre de faire la même chose avec du CSS, du XML ou n'importe quoi.

    Au passage changer l'extension du fichier reviens au même (puisque dans les deux cas c'est le php engine qui va parser et traiter de la même façon le fichier) seulement dans un cas tu aura je sais plus ou (il me semble de mémoire que c'est dans les outils de validation de code entre autre) un avertissement qui te dira que le système "suppose" que le .php est un .js
     
  8. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    tu peux essayer ça aussi :
    Code:
    AddType application/x-httpd-php .js
    AddHandler x-httpd-php5 .js
     
    <FilesMatch "\.(js|php)$">
    SetHandler application/x-httpd-php
    </FilesMatch>
    regarde en bas de : Bonnes pratiques pour un .htaccess de qualité
    Attention aux règles de réécriture avec des expressions régulières, je n'ai pas d'info précise la dessus mais il se peut qu'elles soit plus gourmandes que d'autres ... Multiplié par X sur chaque requêtes sur un serveur ça peut chiffrer au final.
     
  9. Philings
    Philings WRInaute discret
    Inscrit:
    9 Juin 2010
    Messages:
    51
    J'aime reçus:
    0
    C'est pas plus simple et plus propre :

    <script> var page = 'toto'; </script>
    <script src="monscript.js"></script>

    Et de gérer en fonction de la variable "page" dans le JS ?

    Car dire au serveur d'interpréter tous les .js comme du PHP, c'est vraiment bête !
     
  10. Orsam
    Orsam WRInaute discret
    Inscrit:
    26 Février 2011
    Messages:
    66
    J'aime reçus:
    0
    Zeb,

    Ca fonctionne très bien...

    Merci.
     
  11. Orsam
    Orsam WRInaute discret
    Inscrit:
    26 Février 2011
    Messages:
    66
    J'aime reçus:
    0
    Philing,
    Le var page='toto' ne me va pas, car j'ai des fonctions JS entières qui doivent changer selon la page PHP sur laquelle je me trouve.

    En ce qui concerne la redirection des JS, mon code rewriting été un exemple, ne t'inquiète pas, je ne compte rediriger que deux ou trois fichiers. :mrgreen:

    Code:
    RewriteRule ^monfichier1.js$ monfichier1.php
    RewriteRule ^monfichier2.js$ monfichier2.php
    RewriteRule ^monfichier3.js$ monfichier3.php
    
    Merci pour ta réponse..

    Olivier
     
  12. Orsam
    Orsam WRInaute discret
    Inscrit:
    26 Février 2011
    Messages:
    66
    J'aime reçus:
    0
    Zeb,

    Comment avec ce système, demander l'utilisation du moteur php uniquement pour deux ou trois fichiers JS donnés ??

    Merci beaucoup...

    Olivier
     
  13. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    En affinant FilesMatch peut-être. Par exemple :
    Code:
    <FilesMatch "(fichier1|fichier2|fichierX)\.(js|php)$">
    SetHandler application/x-httpd-php
    </FilesMatch>
    
     
  14. Orsam
    Orsam WRInaute discret
    Inscrit:
    26 Février 2011
    Messages:
    66
    J'aime reçus:
    0
    [Résolu] PHP et Javascript Dynamique

    Super, ça marche nickel...

    Merci encore à tous,

    Olivier
     
  15. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    Re: [Résolu] PHP et Javascript Dynamique

    bah voila :D
    Autant je suis regardant sur une expression régulière (voir exemple plus haut) autant je pense pas qu'un fichier ne comportant aucune ouvrante php (<?php) ne pose problème (ça doit glisser tout seul).
    Mais bon la remarque est bonne, perso j'ai pas de données pour comparer en revanche.
     
  16. frenchhorn
    frenchhorn WRInaute passionné
    Inscrit:
    8 Février 2007
    Messages:
    1 094
    J'aime reçus:
    1
    et bien...dans ton fichier.js.php tu n'a qu'à inclure tes fichier JS comme ca tu garde la coloration syntaxique dans tes includes ;)

    un autre avantage est pouvoir regrouper tout tes fichiers JS en un seul et même de pouvoir les minifier, et même de préciser dans l'entete une compression gzip cela fait moins de requetes http pour le navigateur, donc tes pages s'afficheront plus vite

    cool non ?
     
  17. Orsam
    Orsam WRInaute discret
    Inscrit:
    26 Février 2011
    Messages:
    66
    J'aime reçus:
    0
    Oui, je reconnais, c'est cool...
     
Chargement...
Similar Threads - PHP Javascript Dynamique Forum Date
Code Javascript s'affiche différemment en php et en html Développement d'un site Web ou d'une appli mobile 8 Décembre 2014
Serveur SOAP PHP et Javascript Développement d'un site Web ou d'une appli mobile 24 Février 2013
Variable php dans du javascript Développement d'un site Web ou d'une appli mobile 17 Mars 2012
[PHP/JavaScript/Ajax] COmpte à rebour Développement d'un site Web ou d'une appli mobile 24 Juin 2011
[script] probleme confirm() javascript+ PHP Développement d'un site Web ou d'une appli mobile 7 Juin 2011
Gestion des Majuscules [script] - PHP / javascript Développement d'un site Web ou d'une appli mobile 9 Mars 2011
Erreur javascript ? ou code php pas bon? Développement d'un site Web ou d'une appli mobile 15 Novembre 2010
Carte pour un rpg en php, déplacement via javascript Développement d'un site Web ou d'une appli mobile 16 Juin 2010
Recuperer variable javascript dans PHP Développement d'un site Web ou d'une appli mobile 17 Février 2010
Recuperer page en cours javascript/php Développement d'un site Web ou d'une appli mobile 1 Novembre 2009
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice