Drupal 6 Работа с файлами - PullRequest
       3

Drupal 6 Работа с файлами

1 голос
/ 04 декабря 2010

Я обрабатываю поле загрузки файла в форме, используя API форм Drupal 6. Поле файла помечено как обязательно . Я делаю все правильно, чтобы сохранить и переименовать файлы в нужных местах.

Форма загрузки

$form = array();
....
$form['image'] = array(
    '#type' => 'file',
    '#title' => t('Upload photo'),
    '#size' => 30,
    '#required' => TRUE,
);
$form['#attributes'] = array('enctype' => "multipart/form-data");
...

обработчик проверки формы

$image_field = 'image';

if (isset($_FILES['files']) && is_uploaded_file($_FILES['files']['tmp_name'][$image_field])) {
    $file = file_save_upload($image_field);
    if (!$file) {
        form_set_error($image_field, t('Error uploading file'));
        return;
    }
    $files_dir = file_directory_path();
    $contest_dir = 'contest';

    if(!file_exists($files_dir . '/' . $contest_dir) || !is_dir($files_dir . '/' . $contest_dir))
        mkdir($files_dir . '/' . $contest_dir);


    //HOW TO PASS $file OBJECT TO SUBMIT HANDLER
    $form_state['values'][$image_field] = $file;
    file_move($form_state['values'][$image_field], $files_dir."/" . $contest_dir . "/contest-". $values['email']. "-" . $file->filename);
}
else {
    form_set_error($image_field, 'Error uploading file.');
    return;
}

При отправке формы

Форма всегда сообщает об ошибке Upload photo field is required., хотя файлы загружаются. Как бороться с этим вопросом?

Как передать информацию о файле для отправки обработчику?

Ответы [ 3 ]

2 голосов
/ 22 декабря 2010

Я думаю, вы захотите использовать модуль filefield и добавить его в форму, как описано в:

Drupal Imagfield / Filefield в пользовательской форме

Вопрос имеет ссылку на решение:

http://sysadminsjourney.com/content/2010/01/26/display-cck-filefield-or-imagefield-upload-widget-your-own-custom-form

2 голосов
/ 22 декабря 2010

Ваш обработчик неверен. Вы никогда не должны касаться переменных $ _FILES или $ _POST в drupal, вместо этого вы должны использовать только инструменты drupal. Сказал, что реализация, которую вы должны сделать, выглядит так:

function my_form_handler(&$form,&$form_state){/** VALIDATION FILE * */
 $extensions = 'jpeg jpg gif tiff';
 $size_limit = file_upload_max_size(); 
 $validators = array(
      'my_file_validate_extensions' => array($extensions),
      'my_file_validate_size' => array($size_limit),
  );

 $dest = file_directory_path();
 if ($file = file_save_upload('image', $validators, $dest)) {
  //at this point your file is uploaded, moved in the files folder and saved in the DB table files
 }
}
1 голос
/ 03 апреля 2013

Из документов Drupal 6 API API :

"Примечание: свойство #required не поддерживается (установка его в значение true всегда приведет к ошибке проверки). Вместо этого вы можетеВы хотите использовать свою собственную функцию проверки для проверки массива $ _FILES с параметром #required, установленным в false. Вам также потребуется добавить собственную звездочку, если она вам нужна. "

Старая запись, но яищу что-то похожее и решил добавить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...