代码之家  ›  专栏  ›  技术社区  ›  alxp

提交操作前呈现的Drupal表单

  •  1
  • alxp  · 技术社区  · 15 年前

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

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

    处理这个问题的常见方法是什么?设置表单“重定向”到页面似乎不起作用。

    3 回复  |  直到 14 年前
        1
  •  3
  •   jacobangel    15 年前

    您可以修改表单,以便它保存有关表单状态的一些信息。然后在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上搜索多页表单。

        2
  •  1
  •   Eaton    15 年前

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

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

    This blog post 有一个关于在d6中进行多阶段表单的粗略教程,以及 Drupal 5 to 6 upgrade docs 在drupal.org上包含一个有用的概述,介绍$form_state的工作方式及其各种标志的用途。

        3
  •  0
  •   EricSchaefer    15 年前

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

    我不敢相信。确定吗?