2012-08-02 6 views
5

Mam formularz z tylko jednym polem. To pole jest typu "managed_field". Po kliknięciu przycisku "Prześlij" pasek postępu pokaże postęp przesyłania pliku. Następnie należy przesłać formularz, aby zapisać plik.Drupal 7 - automatycznie przesłać formularz po przesłaniu pliku z manage_file typ

Ponieważ pasek postępu nie pojawi się po wybraniu pliku, a następnie kliknij przycisk przesyłania formularza zamiast przycisku "Prześlij". Chciałbym wyzwolić formularz przesłany po przesłaniu (za pomocą przycisku "Prześlij").

Moja obecna forma wygląda następująco:

$form['#attributes'] = array('enctype' => "multipart/form-data"); 

$form['pdf_upload'] = array(
    '#title' => t('Upload PDF'), 
    '#type' => 'managed_file', 
    '#required' => TRUE, 
    '#progress_message' => t('Please wait...'), 
    '#progress_indicator' => 'bar', 
    '#upload_validators' => array(
     'file_validate_extensions' => array('pdf'), 
    ) 

); 

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

Moduł plik obsługuje pliki za pośrednictwem zwrotnego ajax do pliku/ajax/* Uri. Callback zwraca polecenia ajax.

Zasadniczo chcę dodać dodatkowe polecenie ajax, które wyzwala formularz przesłać po zakończeniu przesyłania pliku.

+1

To może być trudne. Alternatywą jest automatyczne przesłanie pliku przy wyborze, więc użytkownik musi tylko kliknąć jeden przycisk. Zobacz http://drupal.stackexchange.com/questions/31121 – Clive

Odpowiedz

2

@Clive Nie była to opcja dla mnie, ponieważ chciałem, aby użytkownicy sami rozpoczęli przesyłanie. Odpowiedź dała mi kilka pomysłów i wymyśliłem następujące rozwiązanie.

Drupal.behaviors.fileUpload = { 
    attach: function(context, settings) { 
     jQuery("body").ajaxComplete(function(event,request, settings){ 
      // Only do something when on the orders page of a user 
      // This is where I use the upload functionality 
      if(window.location.pathname.match(/user\/\d+\/orders/)) { 
       // Check if the AjaxComplete was triggered by the managed file upload 
       // pdf_upload_XXX is my form name 
       // Get the form-build-id from the URL 
       if (form_build_id = settings.url.match(/file\/ajax\/pdf_upload_\d*\/(.*)$/)) { 
        // Check if the upload has completed by checking if there is a Delete button in the form that has the form-build-id 
        if(jQuery('[value="'+form_build_id[1]+'"]').closest('form').find('[id$=remove-button]').length) { 
         // Click the submit button 
         jQuery('[value="'+form_build_id[1]+'"]').closest('form').find('[id^=edit-submit]').click(); 
        } 
       } 
      } 
     }); 

    } 
} 

Mam nadzieję, że jest to przydatne także dla innych użytkowników.

Thnx Clive za ustawienie mnie na właściwej ścieżce.

Powiązane problemy