Відкрийте товщик із вмістом через AJAX


11

Я додав спеціальну кнопку до редактора TinyMCE, і я хочу відкрити WP's Thickbox, коли натискаю на нього.

Як я можу зробити так, щоб tb_show()функція завантажувала потрібний вміст за допомогою ajax?

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

Ось декілька кодів плагіну редактора, який я використовую:

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

Отже, OpenMyThickboxфункція javascript повинна робити те, що я хочу:

function OpenMyThickbox(tag){
  tb_show(tag, '...'); // <- how to load content trough ajax here ?
}

використовувати admin_url ('admin-ajax.php'); для URL
Bainternet

Я отримую порожню сторінку. навіть якщо я входжу на google.com
onetrickpony

Відповіді:


6

Другий параметр для tb_show- це URL-адреса, тому ви хочете використовувати щось на зразок ..

<?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; ?>' );

Я думаю, вам потрібно передати дію та будь-який додатковий запит вручну (як зазначено вище), інакше ваш запит - це просто admin-ajax.php, коли те, що ви шукаєте, є чимось за принципом ... admin-ajax.php?action=getTheContent&someothervar=someothervalue, отже, add_query_argвикористання вище. .

Для уточнення:

Наступний дзвінок на add_query_arg...

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

Еквівалентний і буде виробляти ...

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

Однак!

Пояснивши себе, я зрозумів, що ми не хочемо абсолютної URL-адреси, і тому нам не потрібен дзвінок admin_url. Натомість код повинен бути.

<?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; ?>'); 

Тож отримана URL-адреса виглядає приблизно так.

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

Функції, на які посилаються вищевказані зразки коду:


Хіба це не буде, $_get['action']тому що виклик WordPress ajax шукає $_post['action']? чи я помиляюся?
Bainternet

Це буде $_POSTабо $_REQUESTв зворотному getзвороті ajax, як правило, якщо ви явно не встановили функцію запиту ajax використовувати замість цього, в контексті виклику товстої скриньки ми використовуємо рядок запитів, який все-таки повинен відображатися $_REQUEST(тому що зазвичай містить $_GETі $_POST) ..
t31о

Ні, про що я запитую, чи використовую, add_query_argчи додані аргументи будуть надіслані як повідомлення чи отримані?
Bainternet

Ні, add_query_argдодає рядок (URL) з параметрами запиту, він не надсилає жодної інформації, тому я не впевнений, що я розумію ваше запитання ..
t31os

Оновлено мою відповідь ..
t31о

3

Плутати Javascript і PHP не дуже розумно. Ця відповідь лише бентежить.

tb_show is javascript add_query_arg - це PHP

тому це рішення дійсне лише в PHP, і належний код є

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

І в JavaScript взагалі недійсний, оскільки ми не можемо використовувати add_query_arg


Чим він відрізняється від рішення, окрім нього, що має <?php ?>в ньому теги? Якщо це все, що ви хочете вказати, то будь ласка, внесіть зміни до рішення, щоб виправити його. Не потрібно додавати окремої відповіді, щоб пояснити, що не так з іншою відповіддю. Ось чому правки в громаді високо оцінені.
кайзер

@kaiser Правки, що змінюють значення публікації, зазвичай не вітаються. Як окрему відповідь це нормально.
фуксія

@toscho І як саме це змінюється значення ? Imo це виправлення або додавання відсутніх бітів .
кайзер

Байєн був правильним, щоб вказати на помилку тут, я змішував PHP і Javascript, я дійсно повинен був помітити це раніше. Я внесла необхідні зміни у свою відповідь, і дякую за відгук (я люблю знати, коли я роблю помилки).
t31os
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.