Làm cách nào để in kết quả sau khi gửi biểu mẫu Drupal?


9

Tôi có một thiết lập Mô-đun Drupal đơn giản có một hộp văn bản.

Tôi có thể trả về những gì đã gõ trong hộp văn bản bằng cách sử dụng drupal_set_message():

function firstmodule_form1_submit($form, &$form_state) {
    drupal_set_message(t("The user is $username"));
}

Tuy nhiên echo $username;sẽ không làm việc cho tôi, không có gì được in. Làm thế nào tôi có thể trả lại kết quả mà không cần sử dụng drupal_set_message()?

Câu trả lời:


7

Cách thông thường để xử lý việc này là thực hiện quy trình làm việc nhiều bước. Xem drupal_rebuild_form()để biết thêm thông tin, nhưng về cơ bản, bạn đã thiết lập $form_state['rebuild'] = TRUE;trình xử lý trình của mình và trong hàm biểu mẫu gốc thêm một kiểm tra để xem nếu biểu mẫu đã được gửi. Nếu có, bạn có quyền truy cập vào các giá trị được gửi và có thể thao tác biểu mẫu khi bạn thấy phù hợp.

Một ví dụ rất cơ bản:

function MYMODULE_some_form($form, &$form_state) {
  // If the form has been submitted, output something related to the submission
  if (!empty($form_state['values']['some_field'])) {
    $form['submission'] = array(
      '#markup' => function_to_get_markup_from_value($form_state['values']['some_field'])
    );
  }
  else {
    // Otherwise build the normal form
    $form['some_field'] = array(
      '#type' => 'textfield',
      // ...
    );
  }

  return $form;
}

function MYMODULE_some_form_submit($form, &$form_state) {
  $form_state['rebuild'] = TRUE;
}

2

Trình xử lý gửi biểu mẫu chỉ có thể in một tin nhắn bằng cách sử dụng drupal_set_message()hoặc viết một tin nhắn trong nhật ký với watchdog().

Phương án thay thế là lưu dữ liệu cần thiết trong phiên và chuyển hướng người dùng (sử dụng $form_state['redirect'] = 'page path';) đến trang hiển thị nội dung của phiên.

function firstmodule_menu() {
  $items['the path for your page'] = array(
    'page callback' => 'firstmodule_show_submitted_data';
    // ...
  );

  return $items;
}

function firstmodule_form1_submit($form, &$form_state) {
  $_SESSION['firstmodule_username'] = $username;
  // ...

  $form_state['redirect'] = 'the path for your page';
}

function firstmodule_show_submitted_data() {
  // Populate $result with the string to show.

  return $result;
}

Như lưu ý phụ, đối số đầu tiên t()phải là một chuỗi bằng chữ, không phải là một chuỗi có được nối hai chuỗi, như trong trường hợp của bạn. Bạn nên sử dụng trình giữ chỗ, như trong đoạn mã sau.

drupal_set_message(t("The user is %username", array('%username' => $username)));

Trong Drupal 7, thay vì trả về một chuỗi, bạn có thể trả về một mảng kết xuất .


1

Tất cả dữ liệu đã gửi được lưu trữ trong $form_state, nếu bạn muốn xem điều gì xảy ra cài đặt mô-đun phát và sau khi bạn luôn có thể làm như thế này:

Bên trong firstmodule_form1_submitchức năng của bạn để in tất cả các $form_stateloại mảng - dpm($form_state)- và bạn sẽ thấy đầu ra, nơi bạn có thể tìm thấy tên người dùng hộp văn bản của mình hoặc bất kỳ loại nào khác, sẽ tương tự như thế này$form_state['values']['username']

Và sau đó bạn có thể in nó drupal_set_message(t($form_state['values']['username']);


Cảm ơn, tôi có phần đó tuy nhiên drupal_set_message trả lại nó dưới dạng điều "Thông báo trợ giúp". Tôi muốn trả lại nhiều nội dung trên trang đó.
h00j

0

Những gì bạn cần làm là có một menu gọi lại, về cơ bản đó sẽ là một trang bạn thiết lập và hiển thị thông tin trên đó.

Thông tin thêm có sẵn ở đây: http://api.drupal.org/api/drupal/includes!menu.inc/group/menu/7 và bạn cần đọc thêm về hook_menu ()

Hy vọng rằng sẽ giúp, cho tôi biết nếu bạn cần một ví dụ.

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.