По какой-то причине моя форма ломается, когда я пытаюсь сделать загрузку файла необходимой. Вот код для него:
$form_id = "upload_form"; $form[$form_id] = array ( '#type' => 'fieldset', '#description' => t('This is a utility to import nodes from a Comma Separated Value file. To begin, pick a node type, and upload a CSV.'), ); $form[$form_id]['type'] = array( '#title' => t('Enter node type'), '#type' => 'textfield', // '#autocomplete_path' => '', TODO: autocomplete for node types '#required' => TRUE, '#description' => t('This node type should already exist. If it doesn\'t, create it first.'), ); $form[$form_id]['upload'] = array( '#type' => 'file', '#title' => t('Upload CSV file'), // '#size' => 40, '#description' => t('This will not work for a non-CSV file.'), // '#required' => TRUE, TODO: breaks it. why? ); $form[$form_id]['submit'] = array( '#type' => 'submit', '#value' => t('Submit'), ); $form['#attributes'] = array('enctype' => 'multipart/form-data');
На сайте поддержки Drupal кто-то говорит, что невозможно выполнить загрузку файлов. Это правда?
Это мое обходное решение для создания необходимого поля:
<? // A piece of form that defines the file field $form['attachment'] = array( '#type' => 'file', '#title' => t('Title'), //'#required' => TRUE, // check this manually ); // Form validation hook function yourformname_validate($form, &$form_state) { // Validate file $validators = array( 'file_validate_extensions' => array('doc txt pdf'), // does not work for user 1 'file_validate_size' => array(1000000, 0), ); $file = file_save_upload('attachment', $validators, file_directory_path()); if ($file) { $form_state['values']['attachment'] = $file; // drupal file object } else{ form_set_error('attachment', "File is required"); } } ?>
Я не эксперт Drupal, но вы можете проверить, существует ли переменная $_FILES
, нет?