Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2058 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Renvoi de Javascript avec PHP [Résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Renvoi de Javascript avec PHP [Résolu]

n°2183531
kilgourpa
Posté le 02-04-2013 à 11:43:30  profilanswer
 

Bonjour à tous !
Alors voilà mon problème : je suis en train d'adapter Avgrund (http://labs.voronianski.com/jquery.avgrund.js/), un plugin jQuery pour faire des popups (allez voir sur la page et cliquez sur "SHOW IT" ) en un plugin WordPress.
En fait, on appelle le plugin WordPress avec un shortcode (http://codex.wordpress.org/Shortcode_API). Si vous vous y connaissez en shortcode WordPress, sachez que ce sera un enclosing shortcode avec les paramètres suivants : width (largeur du popup), title (titre du lien pour déclencher l'ouverture du popup), height (hauteur du popup) et openOnEvent (paramètre binaire (true ou false) qui indique s'il faut directement ouvrir le popup, ou bien attendre le clic).
Mais j'ai un problème (bon, vous l'aurez devinez vu que je suis là  ;) ) :
Le code qui pose problème, le voici :

Spoiler :

// Now, we add the shortcode itself
function avgrund_shortcode( $atts , $content = null ) {
 
 // Attributes
 extract( shortcode_atts(
  array(
   'height' => '',
   'width' => '',
   'title' => '',
   'openOnEvent' => 'true',
  ), $atts )
 );
 
 // Code  
  return '<script>$(function() {$(\'#show\').avgrund({
   height="' . $height . '",
   width="' . $width . '",
   showClose=true,
   holderClass="\'custom\'",
   enableStackAnimation=true,
   showCloseText: "\'Close\'",
   openOnEvent:' . $openOnEvent . ',
   onBlurContainer: "\'.container\'",
   template: "<p>' . $content . '</p>"
   });});</script>';
   return '<a href="#" id="show" class="button left">' . $title . '</a>';
 
}
add_shortcode( 'avgrund', 'avgrund_shortcode' );


et plus particulièrement, cette partie :  

Spoiler :

 return '<script>$(function() {$(\'#show\').avgrund({
   height="' . $height . '",
   width="' . $width . '",
   showClose=true,
   holderClass="\'custom\'",
   enableStackAnimation=true,
   showCloseText: "\'Close\'",
   openOnEvent:' . $openOnEvent . ',
   onBlurContainer: "\'.container\'",
   template: "<p>' . $content . '</p>"
   });});</script>';
   return '<a href="#" id="show" class="button left">' . $title . '</a>';


Qui est en fait une version PHPisée de celui-ci :

Spoiler :

<script>
 $(function() {
  $('#show').avgrund({
   width: Ici va la variable width qui régie la largeur du popup,
   height: Ici va la variable height qui régie la hauteur du popup,
   holderClass: 'custom',
   showClose: true,
   showCloseText: 'Close',
   openOnEvent: Ici va la variable openOnEvent qui régie l'ouverture du popup,
   enableStackAnimation: true,
   onBlurContainer: '.container',
   template: '<p>La variable content (la partie entre le tag d'ouverture et celui de fermeture du shortcode)</p>' +
  });
 });
---------------------------------- et puis, plus loin dans le code ----------------------------------
 <a href="#" id="show" class="button left">Ici va la variable title qui donne le nom du lien d'ouverture du popup</a>
 </script>


Le problème étant que, lorsque je met le shortcode suivant :

Spoiler :

[avgrund title=ca height=90 width=50]eflzrtzzyvjthicb[avgrund]


le résultat HTML est comme ceci :

Spoiler :

<p><script>$(function() {$('#show').avgrund({
   height="90",
   width="50",
   showClose=true,
   holderClass="'custom'",
   enableStackAnimation=true,
   showCloseText: "'Close'",
   onBlurContainer: "'.container'",
   template: "<p></p>"
   });});</script>eflzrtzzyvjthicb<script>$(function() {$('#show').avgrund({
   height="",
   width="",
   showClose=true,
   holderClass="'custom'",
   enableStackAnimation=true,
   showCloseText: "'Close'",
   onBlurContainer: "'.container'",
   template: "<p></p>"
   });});</script></p>


Ce qui ne ressemble à rien :fou: , et n'a d'autre effet qu'afficher "eflzrtzzyvjthicb"  :??: .
Ouate de phoque ????
 
Merci d'avance !


Message édité par kilgourpa le 03-04-2013 à 08:54:44
mood
Publicité
Posté le 02-04-2013 à 11:43:30  profilanswer
 

n°2183538
x1fr
Posté le 02-04-2013 à 12:26:45  profilanswer
 

Déjà tu te mélanges les pinceaux dans les doubles et simples quotes
par exemple :

Code :
  1. holderClass="\'custom\'",


devrait être :

Code :
  1. holderClass=\'custom\',


 
En gros :
-tu n'as pas besoin de double quote dans ce morceau de code (il n'y en a pas dans le code original en JS et tu te sert du simple quote pour délimiter ta chaîne de caractère.
- utilise \' quand il y a un simple quote dans le code original
- utilise ' lorsque tu veux utliser une variable php
 
Autre problème, tu fais 2 return ( 1 pour la fonction js l'autre pour le lien html). Sauf que par définition seul le premier sera exécuté.


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
n°2183548
kilgourpa
Posté le 02-04-2013 à 13:26:51  profilanswer
 

Merci beaucoup, je teste dès maintenant, et je reviens juste après

n°2183552
rufo
Pas me confondre avec Lycos!
Posté le 02-04-2013 à 13:37:00  profilanswer
 

C'est normal la balise <p> qui encapsule la balise <script> :??:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2183565
kilgourpa
Posté le 02-04-2013 à 13:52:39  profilanswer
 

OK, alors j'ai suivi tes conseils : plus de ", \' au lieu de ' en js, et plus de double return, ce qui donne :

Spoiler :

return '<script>$(function() {$(\'#show\').avgrund({  
   height=' . $height . ',  
   width=' . $width . ',  
   showClose=true,  
   holderClass=\'custom\',  
   enableStackAnimation=true,  
   showCloseText: \'Close\',  
   openOnEvent:' . $openOnEvent . ',  
   onBlurContainer: \'.container\',  
   template: \'<p>' . $content . '</p>\'  
   });});</script>
   <a href="#" id="show" class="button left">' . $title . '</a>';


 
Mais maintenant, nouveau problème :
Le code HTML s'écrit 2 fois au lieu d'une :

Spoiler :

<p><script>$(function() {$('#show').avgrund({  
   height=90,  
   width=50,  
   showClose=true,  
   holderClass='custom',  
   enableStackAnimation=true,  
   showCloseText: 'Close',  
   openOnEvent:,  
   onBlurContainer: '.container',  
   template: '<p></p>'  
   });});</script>
   <a href="#" id="show" class="button left">ca</a>eflzrtzzyvjthicb<script>$(function() {$('#show').avgrund({  
   height=,  
   width=,  
   showClose=true,  
   holderClass='custom',  
   enableStackAnimation=true,  
   showCloseText: 'Close',  
   openOnEvent:,  
   onBlurContainer: '.container',  
   template: '<p></p>'  
   });});</script>
   <a href="#" id="show" class="button left"></a></p>


Cependant, le lien apparaît bien qu'il n'aie pas d'effet  :??:

n°2183566
kilgourpa
Posté le 02-04-2013 à 13:54:03  profilanswer
 

@rufo : Euhh, non, la balise <p> n'encaspule pas <script>...

n°2183571
rufo
Pas me confondre avec Lycos!
Posté le 02-04-2013 à 13:57:44  profilanswer
 

kilgourpa a écrit :

@rufo : Euhh, non, la balise <p> n'encaspule pas <script>...


Code :
  1. <p><script>$(function() {$('#show').avgrund({ 
  2.    height=90, 
  3.    width=50, 
  4.    showClose=true
  5.    holderClass='custom', 
  6.    enableStackAnimation=true
  7.    showCloseText: 'Close', 
  8.    openOnEvent:, 
  9.    onBlurContainer: '.container', 
  10.    template: '<p></p>' 
  11.    });});</script>
  12.    <a href="#" id="show" class="button left">ca</a>eflzrtzzyvjthicb<script>$(function() {$('#show').avgrund({ 
  13.    height=, 
  14.    width=, 
  15.    showClose=true
  16.    holderClass='custom', 
  17.    enableStackAnimation=true
  18.    showCloseText: 'Close', 
  19.    openOnEvent:, 
  20.    onBlurContainer: '.container', 
  21.    template: '<p></p>' 
  22.    });});</script>
  23.    <a href="#" id="show" class="button left"></a></p>


 
Elles sont normales ces balises en gras :??:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2183577
kilgourpa
Posté le 02-04-2013 à 14:08:31  profilanswer
 

@rufo : Ahhhhh, pardon, j'avais pas vu. Alors non, elles ne sont pas normales, bien que ce soit exactement ce que je vois dans le code HTML.

n°2183580
x1fr
Posté le 02-04-2013 à 14:09:31  profilanswer
 

On dirait que $title contient lui même le contenu de la fonction (et si tu regarde dans le dernier bout de code de ton premier poste, il était déjà en double)
 
Problème au niveau du php je pense
 
edit : en fait non, y a bien la balise fermante </a> juste après le "ca"


Message édité par x1fr le 02-04-2013 à 14:10:57

---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
n°2183583
rufo
Pas me confondre avec Lycos!
Posté le 02-04-2013 à 14:17:56  profilanswer
 

kilgourpa a écrit :

@rufo : Ahhhhh, pardon, j'avais pas vu. Alors non, elles ne sont pas normales, bien que ce soit exactement ce que je vois dans le code HTML.


 
Je fais remarquer ça parce qu'il y a pas longtemps, j'avais implémenté une extension pour Mediawiki essentiellement à base de Javascript et le parser de contenu de Mediawiki, afin de protéger le contenu du wiki (entre autre empêcher des failles xss), rajoutait des balises <p>, <br/> et <pre> et ça empêchait l'exécution correct de mon code js... Du coup, j'ai été obligé d'encadre mon code JS avec une balise "spécial" pour dire au parser de Mediawiki de pas parser mon code JS. Et là, ça a marché nickel...


Message édité par rufo le 02-04-2013 à 14:18:49

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 02-04-2013 à 14:17:56  profilanswer
 

n°2183599
kilgourpa
Posté le 02-04-2013 à 14:41:31  profilanswer
 

@rufo : OK, mais malheureusement je n'ai aucune idée de ce qui provoque l'apparition des balise <p> :(

n°2183602
x1fr
Posté le 02-04-2013 à 14:46:29  profilanswer
 

j'ai trouvé le problème de doublon je pense
 

Code :
  1. [avgrund title=ca height=90 width=50]eflzrtzzyvjthicb[avgrund]


 
il manque le / dans la balise fermante


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
n°2183629
kilgourpa
Posté le 02-04-2013 à 15:43:10  profilanswer
 

@x1fr : Yeeaahhh ! Merci ! Le problème de doublon disparaôt, ainsi que les balises <p> en trop & le fait que le content soit à l'extérieur du code JS. Cependant, il ne se passe rien quand je clique :(
Je cherche :??:

n°2183632
x1fr
Posté le 02-04-2013 à 15:47:10  profilanswer
 

Ca donne quoi au niveau du code généré maintenant?
 
Il doit rester une petite erreur javascript pas méchante. La console js doit te donner des détails j'imagine?


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
n°2183641
kilgourpa
Posté le 02-04-2013 à 16:52:54  profilanswer
 

@x1fr : Ça donne ça :

Spoiler :

<script>$(function() {$('#show').avgrund({  
   height=90,  
   width=50,  
   showClose=true,  
   holderClass='custom',  
   enableStackAnimation=true,  
   showCloseText: 'Close',  
   openOnEvent:,  
   onBlurContainer: '.container',  
   template: '<p>eflzrtzzyvjthicb</p>'  
   });});</script>
<a href="#" id="show" class="button left">ca</a>


n°2183642
x1fr
Posté le 02-04-2013 à 16:58:15  profilanswer
 

Ça a l'air de coller à l'exemple, mis à part le paramètre openOnEvent qui est vide, ça vient peut-être de là


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
n°2183747
kilgourpa
Posté le 03-04-2013 à 08:54:15  profilanswer
 

Bon, alors comme je ne trouve pas, je met en résolu ici, et vais poster mon problème sur les forums de WordPress. En effet, je pense que le problème que je rencontre maintenant vient plutôt de WordPress que d'erreurs de code.
Alors merci BEAUCOUP à TOUS  :love:  :bounce:  
 
PS: @x1fr : même en le remplissant, rien ne se passe lors du clic.
PS2 : Allez voir ici pour le topic sur le forum WordPress en anglais : http://wordpress.org/support/topic [...] ?replies=1


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Renvoi de Javascript avec PHP [Résolu]

 

Sujets relatifs
[Résolu] Aide JavaScript - Des espaces en tropFormulaire de recherche avec champs vides en PHP
innertHML et variable de session PHPTransfert de paramètres en PHP !
Passage paramètre Cookie Javascript[PHP]paramètre pas fonctionnel dans une fonction
Fade-Out Popup javascriptContraintes Choco et PHP
problème script PHPExploitation du DOM avec JavaScript
Plus de sujets relatifs à : Renvoi de Javascript avec PHP [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR