【问题标题】:Drupal 7 retain file uploadDrupal 7 保留文件上传
【发布时间】:2011-10-12 11:27:56
【问题描述】:

我有一个文件上传表单

当出现其他验证错误时如何保留此文件,以便用户不必再次上传文件?

我在我的验证功能中尝试了这个,但它不起作用:

function mymodule_someform_validate($form, &$form_state) {
  $form_state["values"]["some_field"] = some_value;
}

$form_state["values"] 变量在我的表单定义函数中不可用 - mymodule_someform($form, &$form_state)

有什么想法吗?

【问题讨论】:

    标签: drupal file-upload drupal-7 form-api


    【解决方案1】:

    只需使用managed_file 类型,它就会为您完成:

    $form['my_file_field'] = array(
      '#type' => 'managed_file',
      '#title' => 'File',
      '#upload_location' => 'public://my-folder/'
    );
    

    然后在您的提交处理程序中:

    // Load the file via file.fid.
    $file = file_load($form_state['values']['my_file_field']);
    
    // Change status to permanent.
    $file->status = FILE_STATUS_PERMANENT;
    
    // Save.
    file_save($file);
    

    如果验证失败并且用户离开表单,该文件将在几个小时后自动删除(就像file_managed 表中没有FILE_STATUS_PERMANENT 的所有文件一样)。如果验证没有失败,则提交处理程序将运行并且文件将在系统中被标记为永久。

    【讨论】:

    • 是的,我可能只使用默认节点形式。我想做一个自定义表单,因为我不想通过它的 ajax 文件上传来使用节点的表单。但我仍然不知道为什么传递给表单定义函数的 form_state 没有设置“值”...
    【解决方案2】:

    可能正在寻找的其他人的管理表单示例:

    function example_admin_form(){  
    
      $form = array();  
    
      $form['image'] = array(
          '#type' => 'managed_file',
          '#name' => 'image',
          '#title' => t('upload your image here!'),
          '#default_value' => variable_get('image', ''),
          '#description' => t("Here you can upload an image"),
          '#progress_indicator' => 'bar',
          '#upload_location' => 'public://my_images/'
      );
    
      // Add your submit function to the #submit array
      $form['#submit'][] = 'example_admin_form_submit';
    
      return system_settings_form($form);
    }
    
    function example_admin_form_submit($form, &$form_state){
    
      // Load the file
      $file = file_load($form_state['values']['image']);
    
      // Change status to permanent.
      $file->status = FILE_STATUS_PERMANENT;
    
      // Save.
      file_save($file);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      相关资源
      最近更新 更多