ওয়েবফর্ম - ড্রুপাল 7 থেকে বহির্মুখী ইউআরএলে মান জমা দিন


11

আমি দ্রুপালে ফর্ম তৈরির এক স্ব-ঘোষিত নবাগত। আমার একটি ফর্ম একটি ড্রুপাল 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

দ্রুপাল ফর্মগুলিতে, ফর্ম_ল্টার হুকগুলি ফর্মের প্রায় কোনও কিছু পরিবর্তনের জন্য ব্যবহার করা যেতে পারে। অতিরিক্ত সাবমিট হ্যান্ডলারগুলি পরিচালনা করা যায়, বৈধতা দেওয়া যায়, উপাদান যুক্ত করা যায় ইত্যাদি etc.

তবে এই সমস্ত কাজ করার জন্য, ফর্ম বিল্ড ফেজ এবং ফর্ম জমা ফেজ উভয় ক্ষেত্রেই দ্রুপালকে দায়িত্বশীল পক্ষ হতে হবে।

যখন আপনি সেট করেন $form['#action'] = url('https://[url path to external site]');, আপনি আসলে সেই উত্তর দায়িত্ব থেকে দ্রুপালকে সরিয়ে দিচ্ছেন।

পরিবর্তিত ফর্মটি পরীক্ষা করুন - আপনি দেখতে পাবেন যে ফর্ম ট্যাগটি actionবাহ্যিক সাইটে সেট করা আছে। ফর্মটি জমা দেওয়া হলে, ব্রাউজারটি তার সমস্ত ডেটা সেই বাহ্যিক সাইটে প্রেরণ করে এবং দ্রুপাল আর ফর্মের জমা ফাংশনগুলিকে বৈধতা বা সম্পাদন করতে পারে না । আমি মনে করি এটিই ভুল ধারণা।

আপনি যদি না চান যে দ্রুপাল ফর্মটি বৈধতা দেয়, ওয়েবফর্ম জমাটি রেকর্ড করে বা ফর্ম জমা দেওয়ার পরে কিছু করতে এবং দূরবর্তী সাইটটিকে সেই জমা দেওয়ার জন্য সমস্ত কিছু করতে দেয়, আপনার কোডটি ঠিকঠাক কাজ করবে। আপনি $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

আমি এই সমস্যাটি মোকাবেলার জন্য একটি উপায় অনুসন্ধান করার চেষ্টা করেছি এবং অবশেষে আমি ওয়েবফর্ম রিমোট পোস্ট মডিউলটি পেয়েছি

ওয়েবফর্ম রিমোট পোস্ট একটি মডিউল যা ওয়েবফর্ম মডিউল ধরে কাজ করে । এটি ওয়েবফর্ম এবং অন্যান্য ওয়েব অ্যাপ্লিকেশনগুলির মধ্যে সংযুক্তিকে সহজ করে দেয় (সেলসফোর্স এবং এলোকার মতো সিস্টেম সহ)।

আশা করি এটি কারও দেখার সময় বাঁচায়!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.