Загрузка файлов средствами Form API
Пример загрузки картинки с помощью Form API:
/**
* Form builder
*/
function mymodule_myform() {
$form['file'] = array(
'#type' => 'file',
'#title' => 'Картинка',
'#description' => 'Выберите файл с расширением jpg, jpeg, png или gif',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Отправить',
);
return $form;
}
/**
* Form validate callback
*/
function mymodule_myform_validate($form, &$form_state) {
$validators = array(
'file_validate_is_image' => array(), // Проверка, действительно ли файл является изображением
'file_validate_extensions' => array('png gif jpg jpeg'), // Проверка на расширения
'file_validate_size' => array(1 * 1024 * 1024), // Проверка на размер файла (максимум 1mb)
);
// Загружаем файл в sites/default/files (по умолчанию)
if ($file = file_save_upload('file', $validators, 'public://')) {
$form_state['values']['file'] = $file; // передаём информацию о файле в ф-ю mymodule_form_submit()
}
else {
form_set_error('file', 'Файл не был загружен');
}
}
/**
* Form submit callback
*/
function mymodule_myform_submit($form, &$form_state) {
$file = $form_state['values']['file'];
$file->status = FILE_STATUS_PERMANENT; // Изменяем статус файла на "Постоянный"
file_save($file); // Сохраняем новый статус
drupal_set_message('Картинка загружена');
}
Важно помнить, что ф-я file_save_upload() загружает файл и помечает его как "Временный", поэтому в submit-е формы нужно всегда изменять статус файла на "Постоянный" (FILE_STATUS_PERMANENT) и вызывать file_save().
Написанное актуально для
Drupal 7
Комментарии:
Нету комментариев для вывода...