2011-10-12 7 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); 

} 
関連する問題