2011-10-12 1 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_STATUS_PERMANENT없이 file_managed 테이블의 모든 파일과 같이 몇 시간 후 자동으로 삭제됩니다. 유효성 검증이 실패하지 않으면 제출 핸들러가 실행되고 파일은 시스템에서 영구적으로 표시됩니다. 보고 할 수있다 다른 사람에 대한

+0

그래, 난 아마 기본 노드 양식을 사용합니다. 내가 아약스 파일 업로드와 노드의 양식을 사용자 싶지 않았기 때문에 나는 사용자 정의 양식을하고 싶었어요. 하지만 여전히 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); 

}