процесс конфигурации модуля drupal загруженный файл - PullRequest
0 голосов
/ 07 октября 2011

Как я могу обработать загрузку файла в разделе конфигурации модуля?Вот что у меня есть.

<?php
function dc_staff_directory_admin_settings() 
{
  $form['dc_staff_directory_upload_file'] = array(
    '#type' => 'file',
    '#title' => t('Upload staff directory excel (.xls) file'),
    '#description' => t('Uploading a file will replace the current staff directory'),
  );
  $form['#submit'][] = 'dc_staff_directory_process_uploaded_file';
  return system_settings_form($form);
}

function dc_staff_directory_process_uploaded_file($form, &$form_state)
{
   //What can I do here to get the file data?
}

1 Ответ

4 голосов
/ 07 октября 2011

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

function dc_staff_directory_admin_settings() {
  $form['dc_staff_directory_upload_file'] = array(
    '#type' => 'managed_file',
    '#title' => t('Upload staff directory excel (.xls) file'),
    '#description' => t('Uploading a file will replace the current staff directory'),
    '#upload_location' => 'public://path/'
  );

  $form['#submit'][] = 'dc_staff_directory_process_uploaded_file';
  $form['#validate'][] = 'dc_staff_directory_validate_uploaded_file';
  return system_settings_form($form);
}

function db_staff_directory_validate_uploaded_file($form, &$form_state) {
  if (!isset($form_state['values']['dc_staff_directory_upload_file']) || !is_numeric($form_state['values']['dc_staff_directory_upload_file'])) {
    form_set_error('dc_staff_directory_upload_file', t('Please select an file to upload.'));
  }
}

function dc_staff_directory_process_uploaded_file($form, &$form_state) {
   if ($form_state['values']['dc_staff_directory_upload_file'] != 0) {
      // The new file's status is set to 0 or temporary and in order to ensure
      // that the file is not removed after 6 hours we need to change it's status
      // to 1.
      $file = file_load($form_state['values']['dc_staff_directory_upload_file']);
      $file->status = FILE_STATUS_PERMANENT;
      file_save($file);
   }

}

Функция проверки, вероятно, также является хорошей идеей, очевидно, она вам не понадобится, если файл не является обязательным полем.

В основном это модуль image_example, часть модуля примеров . Если вы действительно не хотите использовать тип managed_file, взгляните на модуль file_example в той же коллекции, у него есть примеры загрузки неуправляемого файла.

Надеюсь, это поможет

...