Ouvrir une Thickbox avec contenu via AJAX

10

J'ai ajouté un bouton personnalisé à l'éditeur TinyMCE et je souhaite ouvrir Thickbox de WP lorsque je clique dessus.

Comment puis-je faire en sorte que la fonction tb_show() charge le contenu que je souhaite avec ajax?

// the ajax
add_action('wp_ajax_getTheContent', 'getTheContent');
function getTheContent(){
  echo 'weqwtegeqgr'; // <- this should be displayed in the TB
  die();
}

Voici une partie du code de plug-in d'éditeur que j'utilise:

init : function(ed, url) {
  ed.addButton('do_stuff', {
    title : 'Do Stuff',
    image : url + '/icon.gif',
    onclick : function() {
        OpenMyThickbox('do_stuff');
    }
  });
...

La fonction OpenMyThickbox javascript doit donc faire ce que je veux:

function OpenMyThickbox(tag){
  tb_show(tag, '...'); // <- how to load content trough ajax here ?
}
    
posée onetrickpony 18.04.2011 - 06:44

2 réponses

6

Le deuxième paramètre de tb_show est l'URL. Vous voudrez donc utiliser quelque chose comme ..

<?php 
$ajax_url = add_query_arg( 
    array( 
        'action' => 'getTheContent', 
        'query_var1' => 'value1', 
        'query_var2' => 'value2' 
    ), 
    admin_url( 'admin-ajax.php' ) 
); 
?>
tb_show(tag, <?php echo $ajax_url; ?> ); 

Je suppose que vous devez transmettre l'action et tous les vars de requête supplémentaires manuellement (voir ci-dessus). Sinon, votre demande concerne simplement admin-ajax.php , lorsque ce que vous recherchez correspond à quelque chose de similaire à ... admin-ajax.php?action=getTheContent&someothervar=someothervalue , d’où l'utilisation de add_query_arg ci-dessus ..

Pour plus de précision:

L'appel suivant à add_query_arg ...

add_query_arg( 
    array( 
        'action' => 'getTheContent', 
        'query_var1' => 'value1', 
        'query_var2' => 'value2' 
    ), 
    admin_url( 'admin-ajax.php' ) 
);

Est équivalent à et produira ...

http://example.com/wp-admin/admin-ajax.php?action=getTheContent&query_var1=value1&query_var2=value2

Cependant!

Maintenant que je me suis expliqué, je me suis rendu compte que nous ne voulions pas l’URL absolue et n’avions donc pas besoin de l’appel à admin_url . Le code devrait plutôt être.

<?php 
$ajax_url = add_query_arg( 
    array( 
        'action' => 'getTheContent', 
        'query_var1' => 'value1', 
        'query_var2' => 'value2' 
    ), 
    'admin-ajax.php'
); 
?>
tb_show(tag, <?php echo $ajax_url; ?>); 

L'URL résultante ressemble à ceci:

admin-ajax.php?action=getTheContent&query_var1=valu1&query_var2=value2

Fonctions référencées dans les exemples de code ci-dessus:

réponse donnée t31os 18.04.2011 - 13:35
3

Il n’est pas très malin de javascript et de PHP. Cette réponse ne fait que dérouter.

tb_show est javascript add_query_arg est PHP

donc cette solution est uniquement valide en PHP et le code approprié est

...
?>
tb_show(
  'whatever',
  <?php echo add_query_arg( array(
    'action' => 'getTheContent',
    'query_var1' => 'value1',
    'query_var2' => 'value2',
  ), 'admin-ajax.php'); ?>
);
<?php
...

Et en javascript, le logiciel n'est pas valide car nous ne pouvons pas utiliser add_query_arg

    
réponse donnée bayen 05.12.2012 - 13:32

Lire d'autres questions sur les étiquettes