Drupal 7 сохраняет загрузку файлов - PullRequest
1 голос
/ 12 октября 2011

У меня есть форма для загрузки файла

как я могу сохранить этот файл, когда есть другие ошибки проверки, чтобы пользователю больше не приходилось загружать файл?

Я пробовал это в моей функции проверки, но она не работает:

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

переменная $ form_state ["values"] недоступна в моей функции определения формы - mymodule_someform ($ form, & $ form_state)

Есть идеи?

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Просто используйте тип 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 голосов
/ 19 октября 2013

Пример формы администратора для тех, кто может искать:

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

}
...