1

我有一个 Drupal 模块页面,我在其中填充了一个包含用户可以上传的一组文件的可用部分列表的下拉列表。一旦用户上传了某种类型的文件,它就会从列表中删除该选项,并且当所有可用文件都上传后,表单将不会被呈现。

问题是 Drupal 在执行提交操作之前正在绘制表单,因此在用户看来该操作在重新加载页面之前不起作用。

处理这种情况的常用方法是什么?将 form_state['redirect'] 设置为转到该页面似乎不起作用。

4

3 回答 3

3

您修改表单,以便保存有关表单状态的一些信息。然后在提交函数的开头添加一个新案例,如果您没有完成所有文件的上传,该函数会立即返回,并且它将重新绘制表单。

function modulename_uploader_form(&$form_stuff=null) {
//the function that sets your form array
$stuff = (isset($form_stuff['values'])) ? 
    $form_stuff['storage']['done_uploading'] : 
    false; //if values isnt set, this is the first visit. 
$form_stuff['storage']['done_uploading'] = done_uploading();
.... the rest of your form creation function.


function modulename_uploader_submit($form, &$form_stuff) {
    if($form_stuff['storage']['done_uploading']) {
return;
}
... rest of the function

确保在处理完表单后取消设置存储变量。您还可以在 drupal 中搜索多页表单。

于 2009-01-22T17:48:32.690 回答
1

在提交处理程序中设置 $form_state['redirect'] 只会导致表单重新加载,新鲜,没有旧数据。这是一种清除表单的方法,这样旧值就不会作为默认值存在。

您可能想要使用 $form_state['rebuild'],它使您的表单构建函数有机会在表单提交处理程序运行后重新构建表单的实际结构、添加更多字段或从其他字段中删除选项。

这篇博文有一个关于在 D6 中进行多阶段表单的粗略教程,Drupal.org 上的Drupal 5 到 6 升级文档包含对 $form_state 工作原理及其各种标志的有用概述。

于 2009-01-22T18:28:22.453 回答
0

问题是 Drupal 在执行提交操作之前正在绘制表单,因此在用户看来该操作在重新加载页面之前不起作用。

我不相信。确定吗?

于 2009-01-22T17:31:35.580 回答