Làm thế nào để ajaxify gửi biểu mẫu web trong Drupal 7?


8

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.


1
D6 và D7 có các khung Ajax rất khác nhau.
Jeremy Pháp

Có họ làm, nhưng nó không phải là một vấn đề. Vấn đề thực sự tôi gặp phải là tôi không thể tìm thấy một cái móc để thay đổi biểu mẫu Webform và thêm một sự kiện ajax thông qua API biểu mẫu Drupal.
E. de Saint Chamas

Bạn có câu hỏi cụ thể nào về Ajax không? Điều này nghe có vẻ đàm thoại. Ngoài ra, chỉ để tham khảo: api.drupal.org/api/drupal/includes--ajax.inc/group/ajax/7
Citricguy

Tôi thực sự không thích đăng câu trả lời chỉ với các liên kết đến "cách" bài đăng trên blog mà không có bất kỳ lời giải thích nào của riêng tôi vì vậy tôi sẽ chỉ thêm câu này dưới dạng nhận xét: envisioninteractive.com/drupal/, - nếu việc này kết thúc, chúng ta có thể xem xét thêm nó như một câu trả lời có lẽ. Có vẻ như đây là những gì bạn có thể cần.
Daniel Englander

Câu trả lời:


8

Các mô-đun Ajax làm việc cho tôi trong Drupal 6.

Đối với 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;
      }
    }

Chính xác thì mã này phải làm gì? Tôi đã thêm nó vào chủ đề của mình (sau khi thay đổi tên của hook để phù hợp với chủ đề của tôi), nhưng tôi không nhận thấy bất kỳ tác động nào.
John Slegers

Nó đi vào một mô-đun tùy chỉnh trong chủ đề của bạn.
neelmeg

0

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 hình thức 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. Đầu tiên 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ã dưới đây, thay thế #your_form_IDbằng 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.


Tôi đã xem xét nó. Bây giờ tôi đang nghĩ đến việc làm cho nó một mô-đun với một trang cấu hình để tất cả có thể có lợi. Có bất cứ điều gì như thế tồn tại?
esafwan

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.