2011-10-12 58 views
1

我有一个文件上传表格Drupal 7保留文件上传

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

我想这在我的验证功能,但它不工作:

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

的$ form_state [“值”]变量不可在我的表单定义功能 - mymodule_someform($形式,& $ form_state)

任何想法?

回答

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的所有文件都是)。如果验证没有失败,则提交处理程序将运行并且该文件将在系统中标记为永久。

+0

是的,我可能就使用默认的节点形式。我想做一个自定义表单,因为我不想用它的ajax文件上传来使用节点的表单。 但我仍然不知道为什么传递给表单定义函数的form_state没有设置“值”... –

0

他人管理形式例如谁可能会寻找:

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); 

}