वेबफॉर्म - ड्रुपल 7 से बाहरी यूआरएल में मान जमा करें


11

मैं ड्रुपल में रूप बनाने के लिए एक स्व-घोषित नौसिखिया हूं। मेरे पास एक Drupal 7 वेबसाइट (वेबफॉर्म मॉड्यूल का उपयोग करके) पर होस्ट किया गया एक फॉर्म है और बाहरी यूआरएल को फॉर्म वैल्यू सबमिट करने की आवश्यकता है। मैं अब थोड़ी देर के लिए इस पर शोध कर रहा हूं और एक कस्टम मॉड्यूल लिखा है जो वेबफॉर्म मॉड्यूल का उपयोग हुक_फॉर्म_लेटर और कस्टम सबमिट हैंडलर / फ़ंक्शन (नीचे चिपकाए गए कोड) का उपयोग करके प्रस्तुत करने के लिए करता है।

मैं निम्नलिखित पृष्ठों को मार्गदर्शक के रूप में उपयोग कर रहा हूं, लेकिन मुझे काम करने के लिए फॉर्म नहीं मिला है: https://drupal.org/node/1357136 drupal_http_post () का उपयोग करके बाहरी साइट पर सबमिट करें: मैं क्या कर रहा हूं गलत?

क्या कोई मुझे बता सकता है कि क्या मैं सही रास्ते पर हूँ? कोई भी मार्गदर्शन सहायक होगा!

<?php
function webform_extra_form_alter(&$form, &$form_state, $form_id)                 
{
   //only want form with nid 1171 to submit externally 
   //Note that "webform_client_form_1171" means modify the Webform form for the node with NID "1171". Adjust to match whichever webform node's form you're modifying
   if($form_id == 'webform_client_form_1171') 
       {
            $form['#action'] = url('https://[url path to external site]');
            $form['#attributes'] = array('enctype' => "application/x-www-form-urlencoded");
            $form['#submit'][] = 'webform_extra_submit';    
       }
}

// Adds a submit handler/function for the app signup form (Webform ID #1171) 

function webform_extra_submit($form, &$form_state) 
{
     // Changes can be made to the Webform node settings by modifying this variable
    //$form['#node']->webform;

    // Insert values into other database table using same input IDs as external db
    $option['query'] = array(
        $firstName => $form_state['values']['firstName'],
        $lastName => $form_state['values']['lastName'],
        $email => $form_state['values']['email'],
        $name => $form_state['values']['name'],
        $phone => $form_state['values']['phone'],
    );
    $url = url('https://[url path to external site]', $option); 
    $form_state['redirect'] = $url;
   //$form['#action'] = url('https:[url path to external site]');
   //$url = 'https://[url path to external site]';
   //$headers = array('Content-Type' => 'application/x-www-form-urlencoded',);
   //$response = drupal_http_request($url, $headers, 'POST', http_build_query($form_state['values'], '', '&'));
}
?>

जवाबों:


15

Drupal रूपों में, form_alter हुक का उपयोग फ़ॉर्म में लगभग कुछ भी बदलने के लिए किया जा सकता है। अतिरिक्त जमा हैंडलर को संभाला जा सकता है, सत्यापन किया जा सकता है, तत्वों को जोड़ा जा सकता है, आदि।

लेकिन इन सभी कार्यों के लिए, Drupal को फॉर्म बिल्ड फेज और फॉर्म सबमिट चरण दोनों में जिम्मेदार पार्टी होने की आवश्यकता है।

जब आप सेट $form['#action'] = url('https://[url path to external site]');करते हैं, तो आप वास्तव में Drupal को उस बाद की जिम्मेदारी से हटा रहे हैं।

परिवर्तित रूप की जाँच करें - आप देखेंगे कि प्रपत्र टैग actionबाहरी साइट पर सेट है। जब फ़ॉर्म सबमिट किया जाता है, तो ब्राउज़र अपना सारा डेटा उस बाहरी साइट पर भेजता है , और Drupal अब फ़ॉर्म में सबमिट फ़ंक्शंस को सत्यापित या निष्पादित नहीं कर सकता है । मुझे लगता है कि यह गलत धारणा है।

यदि आप नहीं चाहते हैं कि ड्रुपल फॉर्म को मान्य कर दे, तो फॉर्म सबमिट करने के बाद वेबफॉर्म सबमिशन को रिकॉर्ड करें या कुछ भी करें और उस सबमिशन के लिए रिमोट साइट को सबकुछ करने दें, आपका कोड ठीक काम करेगा। आप $form['#submit'][] = 'webform_extra_submit';भाग और webform_extra_submitफ़ंक्शन को स्वयं हटा सकते हैं ।

हालाँकि, यदि आप सबमिशन रिकॉर्ड करना चाहते हैं और डेटा को उस दूरस्थ साइट पर भी जमा करना चाहते हैं , तो आप इसे इस तरह कर सकते हैं:

function webform_extra_form_alter(&$form, &$form_state, $form_id)                 
{
   //only want form with nid 1171 to submit externally 
   //Note that "webform_client_form_1171" means modify the Webform form for the node with NID "1171". Adjust to match whichever webform node's form you're modifying
   if($form_id == 'webform_client_form_1171') 
       {
            $form['#submit'][] = 'webform_extra_submit';    
       }
}

// Adds a submit handler/function for the app signup form (Webform ID #1171) 

function webform_extra_submit($form, &$form_state) {

    $options = array();
    // Array keys are matching the key that the remote site accepts. URL encoding will be taken care later.
    $options['data'] = array(
        'firstName' => $form_state['values']['firstName'],
        'lastName' => $form_state['values']['lastName'],
        'email' => $form_state['values']['email'],
        'name' => $form_state['values']['name'],
        'phone' => $form_state['values']['phone'],
    );
    $options['data'] = http_build_query($options['data']);
    $options['method'] => 'POST';
    $url = 'https://[url path to external site]'; 

    // Put your additional headers here. Cookie can be set as well. 
    $headers = array('Content-Type' => 'application/x-www-form-urlencoded');

    $options['headers'] => $headers;

    // Submits data to the remote server from the drupal server. User will remain in the Drupal form submission chain.
    $response = drupal_http_request($url, $options);

}

स्पष्ट करने के लिए समय निकालने के लिए धन्यवाद !! बेहद मददगार और मैं वास्तव में इसकी सराहना करता हूं।
फॉरनविन

+1, लेकिन क्या होगा यदि मेरे पास ड्रुपल में गणना है और फिर से रिमोट पर पोस्ट करें?
निकम्माक

अंतिम पंक्ति निष्पादित होने के बाद, क्या उपयोगकर्ता को $ url में उल्लिखित साइट पर भेजा जाएगा?
नीलमेग

3

मैं इस समस्या से निपटने का एक तरीका खोजने की कोशिश कर रहा हूं और आखिरकार मुझे वेबफॉर्म रिमोट पोस्ट मॉड्यूल मिला

वेबफॉर्म रिमोट पोस्ट एक मॉड्यूल है जो वेबफॉर्म मॉड्यूल के साथ काम करता है । यह वेबफॉर्म और अन्य वेब एप्लिकेशन (सेल्सफोर्स और एलोक्वा जैसी प्रणालियों सहित) के बीच एकीकरण को आसान बनाता है।

आशा है कि यह किसी को देखने के घंटे बचाता है!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.