提交Drupal表单后如何打印结果?


9

我有一个简单的Drupal模块设置,其中只有一个文本框。

我可以使用以下命令返回在文本框中键入的内容drupal_set_message()

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

但是echo $username;对我不起作用,什么也没打印。不使用该如何返回结果drupal_set_message()

Answers:


7

解决此问题的通常方法是实施多步骤工作流。请参阅参考资料,drupal_rebuild_form()以获取更多信息,但是基本上是$form_state['rebuild'] = TRUE;在提交处理程序中进行设置的,并且在原始表单函数中添加了检查表单是否已提交的检查。如果有的话,您可以访问提交的值,并可以根据自己的意愿操作表单。

一个非常基本的例子:

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

表单提交处理程序只能使用来打印消息drupal_set_message(),或使用来在日志中写入消息watchdog()

另一种方法是在会话中保存必要的数据,然后(使用$form_state['redirect'] = 'page path';)将用户重定向到显示会话内容的页面。

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;
}

另外,您的第一个参数t()必须是文字字符串,而不是将两个字符串连接在一起的字符串。您应该使用占位符,如以下代码所示。

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

在Drupal 7中,您可以返回render数组,而不是返回字符串。


1

所有提交的数据存储在中$form_state,如果您想查看会发生什么情况,请安装devel模块,之后您始终可以执行以下操作:

firstmodule_form1_submit函数内部 以打印所有数组$form_state类型-- dpm($form_state)您将看到输出,您可以在其中找到您的文本框用户名或其他名称,这类似于$form_state['values']['username']

然后就可以打印了 drupal_set_message(t($form_state['values']['username']);


谢谢,我有那部分,但是drupal_set_message将其作为“帮助消息”类型的东西返回。我想在页面本身上返回很多内容。
h00j 2012年

0

您需要做的是有一个菜单回调,基本上就是您设置并显示信息的页面。

此处提供更多信息:http : //api.drupal.org/api/drupal/includes!menu.inc/group/menu/7,您需要阅读有关hook_menu()的更多信息。

希望能对您有所帮助,请告诉我。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.