it-swarm-vi.com

Làm cách nào để ajaxify gửi biểu mẫu web trong Drupal 7?

Tôi đã cố gắng thay đổi kết xuất biểu mẫu web bằng cách sử dụng hook_form_alter()hook_node_view() trong một mô-đun tùy chỉnh để tôi có thể thêm '#ajax' ở đâu đó.

Có ai đã có một số kinh nghiệm làm việc với webform và ajax trên D6 hoặc D7 chưa? Tôi đoán logic sẽ giống nhau cho D6 và D7 sau đó chỉ là việc thực hiện thay đổi.

8
E. de Saint Chamas

Mô-đun Ajax hoạt động với tôi trong Drupal 6.

Cho 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;
      }
    }
8
Matthew Woodard

Một trong những cách dễ dàng nhất nếu bạn đang tìm cách ajaxify chỉ là một hình thức cụ thể sẽ là thêm plugin mẫu jquery . Nó khá thẳng về phía trước.

Thêm mã dưới đây cho bạn chức năng tiền xử lý trang trong tệp template.php.

  1. Trước tiên, hãy thêm plugin jquery với mã bên dưới.

    drupal_add_js (drupal_get_path ('chủ đề', 'your_theme'). "/js/jquery.form.js");

  2. Sau đó, thêm mã bên dưới, thay thế #your_form_ID với id mẫu của bạn

    drupal_add_js ('

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

Đó là tất cả những gì bạn đã làm. Có lẽ bạn muốn xem xét việc tải các tập lệnh chỉ các trang bạn cần.

0
esafwan