सामग्री गर्त AJAX के साथ एक थिकबॉक्स खोलें


11

मैंने TinyMCE संपादक में एक कस्टम बटन जोड़ा है, और जब मैं उस पर क्लिक करता हूं तो मैं WP का थिकबॉक्स खोलना चाहता हूं।

मैं इसे कैसे बना सकता हूं ताकि tb_show()फ़ंक्शन को उस सामग्री को लोड किया जाए जो मुझे अजाक्स के साथ चाहिए?

// 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जावास्क्रिप्ट फ़ंक्शन को वही करना चाहिए जो मुझे चाहिए:

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

admin_url ('admin-ajax.php') का उपयोग करें; यूआरएल के लिए
बैनेटर्न

मुझे एक खाली पृष्ठ मिलता है। भले ही मैं google.com दर्ज
करूं

जवाबों:


6

इसके लिए दूसरा पैरामीटर tb_showURL है, इसलिए आप कुछ का उपयोग करना चाहते हैं ..

<?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']क्योंकि वर्डप्रेस अजाक्स कॉल लगता है $_post['action']? या मैं गलत हूँ?
बैन्टर्नेट

यह हो जाएगा $_POSTया $_REQUESTअंदर एक ajax कॉलबैक आम तौर पर, जब तक आप स्पष्ट उपयोग करने के लिए अपने ajax अनुरोध समारोह सेट getके बजाय, एक thickbox कॉल के संदर्भ में, हम एक क्वेरी स्ट्रिंग, जो अभी भी में दिखाई देना चाहिए का उपयोग $_REQUEST(क्योंकि कि आम तौर पर रखती है दोनों $_GETऔर $_POST) ..
t31os

नहीं, मैं क्या पूछ रहा हूं कि क्या मैं उपयोग किए add_query_argगए आर्ग को पोस्ट के रूप में भेजा जाएगा या मिलेगा?
बैनटेनट

न तो, add_query_argक्वेरी मानकों के साथ एक स्ट्रिंग (एक यूआरएल के) को जोड़ता है, यह कोई भेजने नहीं करता है, इसलिए मुझे यकीन नहीं है कि मैं आपके प्रश्न को समझता हूं ..
t31os

मेरा उत्तर अपडेट किया गया ..
t31os

3

जावास्क्रिप्ट और PHP मेसिंग करना बहुत चालाक नहीं है। यह उत्तर केवल भ्रमित करता है।

tb_show जावास्क्रिप्ट 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
...

और जावास्क्रिप्ट में यह बिल्कुल भी मान्य नहीं है क्योंकि हम add_query_arg का उपयोग नहीं कर सकते हैं


यह उस समाधान से अलग है जहां से इसमें <?php ?>टैग हैं? यदि वह सब है जिसे आप इंगित करना चाहते हैं, तो कृपया इसे ठीक करने के लिए समाधान को संपादित करें। दूसरे उत्तर के साथ क्या गलत है, यह समझाने के लिए एक अलग उत्तर जोड़ने की आवश्यकता नहीं है। यही कारण है कि सामुदायिक संपादन की सराहना की जाती है।
केसर

@kaiser एक पोस्ट का अर्थ बदलने वाले संपादन आमतौर पर स्वागत योग्य नहीं होते हैं। एक अलग उत्तर के रूप में यह ठीक है।
FUXIA

@toscho और इसका अर्थ क्या है ? Imo यह सुधार कर रहा है या लापता बिट्स को जोड़ रहा है
केसर

बेयेन यहां गलती को इंगित करने के लिए सही था, मैं PHP और जावास्क्रिप्ट मिश्रण कर रहा था, मुझे वास्तव में जल्द ही स्पॉट करना चाहिए। मैंने अपने उत्तर के लिए आवश्यक बदलाव किए हैं, और प्रतिक्रिया के लिए धन्यवाद बयेन (मुझे यह जानना पसंद है कि मैं कब गलतियाँ करता हूँ)।
t31os
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.