Answers:
解决此问题的通常方法是实施多步骤工作流。请参阅参考资料,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;
}
表单提交处理程序只能使用来打印消息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数组,而不是返回字符串。
所有提交的数据存储在中$form_state
,如果您想查看会发生什么情况,请安装devel模块,之后您始终可以执行以下操作:
在firstmodule_form1_submit
函数内部 以打印所有数组$form_state
类型-- dpm($form_state)
您将看到输出,您可以在其中找到您的文本框用户名或其他名称,这类似于$form_state['values']['username']
然后就可以打印了 drupal_set_message(t($form_state['values']['username']);