Bagaimana cara mengajukan formulir webform di Drupal 7?

8

Saya telah mencoba mengubah rendering formulir web menggunakan hook_form_alter()dan hook_node_view()dalam modul khusus sehingga saya dapat menambahkan '#ajax' di suatu tempat.

Adakah yang sudah memiliki pengalaman bekerja dengan webform dan ajax pada D6 atau D7? Saya kira logikanya akan sama untuk D6 dan D7 kemudian hanya perubahan implementasinya.

E. de Saint Chamas
sumber
1
D6 dan D7 memiliki kerangka kerja Ajax yang sangat berbeda.
Jeremy French
Ya, tapi itu bukan masalah. Masalah sebenarnya yang saya alami adalah bahwa saya tidak dapat menemukan kait untuk mengubah formulir Webform dan menambahkan acara ajax melalui API formulir Drupal.
E. de Saint Chamas
Apakah Anda memiliki pertanyaan spesifik tentang Ajax? Ini terdengar percakapan. Juga, hanya untuk referensi: api.drupal.org/api/drupal/includes--ajax.inc/group/ajax/7
Citricguy
Saya tidak terlalu suka memposting jawaban hanya dengan tautan ke posting blog "bagaimana" tanpa penjelasan saya sendiri jadi saya hanya akan menambahkan ini sebagai komentar: envisioninteractive.com/drupal/… - jika ini akhirnya berhasil, kita mungkin mempertimbangkan untuk menambahkannya sebagai jawaban. Sepertinya inilah yang mungkin Anda butuhkan.
Danny Englander

Jawaban:

8

The Ajax Modul bekerja untuk saya di Drupal 6.

Untuk Drupal 7:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
      // see if webform_client_form_ is in the form_id
      if(strstr($form_id, 'webform_client_form_')) {
        // get the nid so we can use it in the wrapper value
        $nid = $form['#node']->nid;
        // add the ajax properties to the submit button
        $form['actions']['submit']['#ajax'] = array(
          'callback' => 'mymodule_webform_js_submit',
          'wrapper' => 'webform-client-form-' . $nid,
          'method' => 'replace',
          'effect' => 'fade',
        );
      }
    }

function mymodule_webform_js_submit($form, $form_state) {
      // define the $sid variable (submission id from webform)
      $sid = $form_state['values']['details']['sid'];
      // if we have a sid then we know the form was properly submitted, otherwise, we'll just return the existing $form array
      if ($sid) {
        // first we have to load up the webform node object
        $node = node_load($form_state['values']['details']['nid']);
        // create an array up with the confirmation message, retreived from the webform node
        $confirmation = array(
          '#type' => 'markup',
          '#markup' => check_markup($node->webform['confirmation'], $node->webform['confirmation_format'], '', TRUE),
        );
        // return the confirmation message
        return $confirmation;
      }
      else {
        // return the form
        return $form;
      }
    }
Matthew Woodard
sumber
Apa sebenarnya yang seharusnya dilakukan kode ini? Saya menambahkannya ke tema saya (setelah mengubah nama pengait agar sesuai dengan tema saya), tetapi saya tidak melihat adanya dampak apa pun.
John Slegers
Ini masuk ke modul khusus dalam tema Anda.
neelmeg
0

Salah satu cara mudah jika Anda ingin ajaxify hanya formulir tertentu akan menambahkan plugin jquery form . Cukup lurus ke depan.

Tambahkan kode di bawah ini ke fungsi preproses halaman Anda di file template.php.

  1. Pertama tambahkan plugin jquery dengan kode di bawah ini.

    drupal_add_js (drupal_get_path ('tema', 'tema_Anda'). "/js/jquery.form.js");

  2. Kemudian Tambahkan kode di bawah ini, ganti #your_form_IDdengan id formulir Anda

    drupal_add_js ('

                (function($){ 
    $(document).ready(function() { 
    
                $("#your_form_ID").ajaxForm(function() { 
                    alert("Thank you for your comment!"); 
                }); 
    });     }(jQuery));;
    
           ', 'inline');

Itu semua sudah selesai. Mungkin Anda ingin mempertimbangkan memuat skrip hanya halaman yang Anda butuhkan.

esafwan
sumber
Saya telah mempertimbangkannya. Sekarang saya berpikir untuk menjadikannya modul dengan halaman konfigurasi sehingga semua bisa mendapat manfaat. Apakah ada yang seperti itu?
esafwan
-1

Lihat apakah modul Ajax dapat membantu Anda dengan itu. Lihat dokumentasi juga

pal4life
sumber
1
Dia meminta Drupal 7, modul itu belum tersedia untuk D7.
Danny Englander
1
Agar adil, meskipun pertanyaan ditandai sebagai 7, pertanyaan itu secara eksplisit menanyakan apakah ada yang punya pengalaman dengan ajax di D6 atau D7.
EmmyS