我有一个Drupal模块页面,我在其中填充一个带有下拉列表的表单,该下拉列表包含用户可以上载的一组文件的可用部分列表。用户上传某种类型的文件后,会从列表中删除该选项,并且当上传所有可用文件时,不会呈现该表单。
问题是Drupal在执行提交操作之前正在绘制表单,因此对用户来说,操作在重新加载页面之前不起作用。
解决这个问题的常用方法是什么?将form_state ['redirect']设置为转到页面似乎不起作用。
答案 0 :(得分:3)
您修改表单,以便保存表单状态的一些信息。然后在submit函数的开头添加一个新的case,如果你没有上传所有的文件,它会立即返回,它将重绘表单。
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中谷歌多页表单。
答案 1 :(得分:1)
在提交处理程序中设置$ form_state ['redirect']只会导致表单重新加载,没有旧数据。这是一种清除表单的方法,以便旧值不会作为默认值挂起。
您可能希望使用$ form_state ['rebuild'],这为您的表单构建函数提供了重建表单实际结构,添加更多字段或在表单提交处理程序运行后从其他字段中删除选项的机会。
This blog post有关于在D6中执行多阶段表单的粗略教程,Drupal.org上的Drupal 5 to 6 upgrade docs包含有关$ form_state如何工作以及其各种标志的用途的有用概述。 / p>
答案 2 :(得分:0)
问题是Drupal在执行提交操作之前正在绘制表单,因此对用户来说,操作在重新加载页面之前不起作用。
我无法相信。确定吗?