Renvoi de Javascript avec PHP [Résolu]

Renvoi de Javascript avec PHP [Résolu] - PHP - Programmation

Marsh Posté le 02-04-2013 à 11:43:30    

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
Reply

Marsh Posté le 02-04-2013 à 11:43:30   

Reply

Marsh Posté le 02-04-2013 à 12:26:45    

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
Reply

Marsh Posté le 02-04-2013 à 13:26:51    

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

Reply

Marsh Posté le 02-04-2013 à 13:37:00    

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
Reply

Marsh Posté le 02-04-2013 à 13:52:39    

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  :??:

Reply

Marsh Posté le 02-04-2013 à 13:54:03    

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

Reply

Marsh Posté le 02-04-2013 à 13:57:44    

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
Reply

Marsh Posté le 02-04-2013 à 14:08:31    

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

Reply

Marsh Posté le 02-04-2013 à 14:09:31    

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
Reply

Marsh Posté le 02-04-2013 à 14:17:56    

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
Reply

Marsh Posté le 02-04-2013 à 14:17:56   

Reply

Marsh Posté le 02-04-2013 à 14:41:31    

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

Reply

Marsh Posté le 02-04-2013 à 14:46:29    

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
Reply

Marsh Posté le 02-04-2013 à 15:43:10    

@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 :??:

Reply

Marsh Posté le 02-04-2013 à 15:47:10    

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
Reply

Marsh Posté le 02-04-2013 à 16:52:54    

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


Reply

Marsh Posté le 02-04-2013 à 16:58:15    

Ç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
Reply

Marsh Posté le 03-04-2013 à 08:54:15    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed