2012-11-17 10 views
9

मुझे अपने गुरुत्वाकर्षण फॉर्म फॉर्म में कुछ समस्याएं आ रही हैं। यह एक बहु पृष्ठ प्रपत्र है, और मुझे पृष्ठ 1 से पोस्ट मानों का उपयोग करके पेज 2 पर एक फ़ील्ड पॉप्युलेट करने की आवश्यकता है। लेकिन यह काम नहीं कर रहा है। निस्संदेह पेज 2 पर फ़ील्ड को "क्षेत्र को गतिशील रूप से पॉप्युलेट करने की अनुमति दें" के लिए कॉन्फ़िगर किया गया है और फ़ील्ड का पैरामीटर "नाम" पर सेट है।गुरुत्वाकर्षण फॉर्म प्लगइन - गतिशील रूप से पॉपुलटिंग फॉर्म फ़ील्ड काम नहीं कर रहा है

add_filter('gform_field_value_name', 'name_population_function'); 
function name_population_function($value){ 
    $name = $_POST['input_2'] . ' ' . (! empty($_POST['input_3']) ? ($_POST['input_3'] . ' ') : NULL) . $_POST['input_1']; 
    return $name; 
} 

जब मैं var_dump($name); का उपयोग कर $name चर के मूल्य प्रिंट यह वास्तव में सही है: यहाँ मेरी कोड है।

यदि मैं $name से $name = 'Last Middle First'; बदलता हूं तो यह फ़ील्ड को पॉप्युलेट कर रहा है जैसा इसे करना चाहिए।

आपकी मदद के लिए धन्यवाद।

संपादित करें: परीक्षण प्रयोजनों के लिए मैं अपने कोड बदल दिया है:

add_filter('gform_field_value_name', 'name_population_function'); 
function name_population_function($value){ 
    $name = 'Test'; 
    if (! empty($_POST['input_1']) && ! empty($_POST['input_2'])) { 
     $name = $_POST['input_2'] . ' ' . (! empty($_POST['input_3']) ? ($_POST['input_3'] . ' ') : NULL) . $_POST['input_1']; 
    //var_dump($name); 
    } 
    return $name; 
} 

अगर मैं var_dump चर $name का मूल्य फिर से ठीक से सेट है, लेकिन पृष्ठ 2 पर क्षेत्र के साथ पॉप्यूलेट है के साथ लाइन uncomment मूल्य Test। शायद इस फ़िल्टर को पृष्ठ 1 पर भी कहा जाता है, इसलिए क्या यह संभव है कि प्लगइन इस मान को कैश करे? मैं एक कैशिंग प्लगइन का उपयोग नहीं करता, इसलिए यह नहीं पता कि यह क्यों काम नहीं कर रहा है।

+1

जब आप var डंप करते हैं, तो क्या आप इसे दूसरे पृष्ठ पर या पहले पृष्ठ पर कर रहे हैं? –

+0

var_dump को name_population_function में function.php फ़ाइल में 'वापसी' से ठीक पहले रखा गया था और पहला पृष्ठ पहले से ही भेजा गया था। – user1832297

+4

देर से पोस्ट करने के लिए खेद है, लेकिन अगर किसी और को यह समस्या है तो मुझे पता चला है कि AJAX पोस्टिंग का उपयोग वास्तव में पृष्ठ से पृष्ठ पर सामग्री पोस्ट नहीं करता है बल्कि पृष्ठों की उपस्थिति देने के लिए फ़ॉर्म के हिस्सों को दिखाता/छुपाता है। AJAX पोस्टिंग को अक्षम करने से मुझे फ़ील्ड को एक पृष्ठ से बाद के पृष्ठ पर पॉप्युलेट करने की अनुमति मिली। यदि आपको वास्तव में AJAX पोस्टिंग सक्षम करने की आवश्यकता है तो आपको इसे काम करने के लिए जावास्क्रिप्ट हुक का उपयोग करने की आवश्यकता हो सकती है। – mj7

उत्तर

-1

इसके बजाए इस gform_pre_render फ़िल्टर को आज़माएं। यह आईडी 7 बनाने के लिए एक फ़िल्टर जोड़ता है। 7 को अपने गुरुत्वाकर्षण फॉर्म आईडी के साथ बदलें।

add_filter('gform_pre_render_7', 'populate_form_pre_render'); 

function populate_form_pre_render($form){ 
    $name =''; 
    foreach ($form['fields'] as &$field) 
    { 
    // replace 2 with the actual ID of your form field 
    if (2 == $field['id']){ 
     if (! empty($_POST['input_1']) && ! empty($_POST['input_2'])) { 
     $name = $_POST['input_2'] . ' ' . (! empty($_POST['input_3']) ? ($_POST['input_3'] . ' ') : NULL) . $_POST['input_1']; 
     //var_dump($name); 
     } 
     $field['defaultValue']=$name; 
    echo '<pre>'; 
    print_r($field); 
    echo '</pre>'; 
    }  

} 

return $form; 
} 
+0

क्यों foreach ($ form ['field'] के रूप में और $ फ़ील्ड में) क्या आप संदर्भ द्वारा $ फ़ील्ड पास कर रहे हैं? मैं बस सोच रहा हूं कि ऐसा क्यों? – therons

+0

फ़िल्टर काम नहीं करता है – EHerman

0

आप एक क्वेरी स्ट्रिंग का उपयोग डेटा जारी रहती है और गतिशील क्षेत्र को भरने के लिए कर सकता है।

http://siteurl.com/form-url/?your_parameter=value

add_filter('gform_field_value_author_email', 'populate_post_author_email'); 
function populate_post_author_email($value){ 
global $post; 

$author_email = get_the_author_meta('email', $post->post_author); 

return $author_email; 
} 
1

बल्कि एकाधिक पृष्ठों से अधिक फार्म की तुलना में, आप jQuery का उपयोग .hide या .slideToggle साथ एकाधिक पृष्ठों का प्रभाव पैदा करने के लिए कर सकता है। यह आपकी समस्या का समाधान करेगा और फ़ॉर्म डेटा जमा करने को अधिक आसान बना देगा। फिर बस पिछले इनपुट से मूल्य को कॉल करें।

संबंधित मुद्दे