2016-07-28 11 views
0

Мое требование - загружать файлы в определенные папки. Как я могу достичь этого, используя форму api. Как изменить код ниже, чтобы upload_location был динамическим. Загруженный файл должен быть сохранен в имени папки, предоставленном пользователем.
#подробный элемент не вызывает функцию custom_document_submit.Как передать динамическое расположение файлов в API форм?

$form['folder_name'] = array(
     '#type' => 'textfield', 
     '#title' => t('Folder Name'), 
); 
    $form['document'] = array(
    '#type' => 'managed_file', 
    '#upload_validators' => array('file_validate_extensions' => array('xml')), 
    '#upload_location' => 'public://', 
    '#submit' => array('custom_document_submit'), 
    ); 
function custom_document_submit($form, &$form_state){ 
    $destination = $form_state['values']['folder_name']; 
    $validators = array(); 
    $file = file_save_upload('document', $validators, 'public://'.$destination); 
} 

ответ

0

#submit property не может быть объявить на managed_file объекта формы ...

Вместо этого, вы должны добавить или изменить представить действие на форме (или кнопки).

$form['#submit'][] = 'custom_document_submit'; 

Если вы не хотите, чтобы изменить способ представить вашу форму, вы можете просто добавить валидатор (с #validate property), ведьма будет изменять свойство «#upload_location» вашего документа в зависимости от имя_папки.

Оба свойства #submit и #validate должны быть добавлены к самой форме.

0
<?php 

define('IMPORT_DIRECTORY_PATH', 'public://import'); 

$form['folder_name'] = array(
     '#type' => 'textfield', 
     '#title' => t('Folder Name'), 
); 


    form['document'] = array(
    '#title' => t('Upload .xml'), 
    '#type' => 'managed_file', 
    '#upload_validators' => array(
     'file_validate_extensions' => array('xml'), 
    ), 
    '#process' => array('import_document_element_process'), 
); 

$form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Upload'), 
    '#submit' => array('custom_document_submit'), 
); 

function custom_document_submit($form, &$form_state){ 

    // Validate extensions. 
    $validators = array(
     'file_validate_extensions' => array('xml'), 
    ); 
    $file = file_save_upload('document', $validators, FALSE, FILE_EXISTS_RENAME); 

    // If the file passed validation. 
    if ($file) { 
     // Rename uploaded file to prevent cache from remembering name file. 
     $directory = SCHEDULES_IMPORT_DIRECTORY_PATH; 
     if (file_prepare_directory($directory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS)) { 
     $uri = $directory . '/xml_' . $file->uid . '_' . $file->timestamp . '.xml'; 
     if ($file = file_move($file, $uri)) { 
      $form_state['values']['document'] = $file; 
     } 
     else { 
      form_set_error('document', t('The file could not be uploaded.')); 
     } 
     } 
     else { 
     form_set_error('document', t('The directory is not writable.')); 
     } 
    } 
    else { 
     form_set_error('document', t('The file extension is not correct.')); 
    } 
    // dpm($form_state['values']['document']); 
    // var_dump($form_state['values']['document']); 
} 


/** 
* Removing the upload button in managed files. 
*/ 
function import_document_element_process($element, &$form_state, $form) { 
    $element = file_managed_file_process($element, $form_state, $form); 
    $element['upload_button']['#access'] = FALSE; 

    return $element; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^