/ / Drupal 7 - форма автоматичного подання після завантаження файлу з керованим_файлом - drupal, file-upload, drupal-7

Drupal 7 - автоматична форма відправки після завантаження файлу з файлом managed_file - drupal, file-upload, drupal-7

Я отримав форму лише з одним полем. Це поле типу "кероване поле". Після натискання кнопки "Завантажити" панель прогресу покаже вам хід завантаження файлу. Після цього вам потрібно буде надіслати форму для збереження файлу.

Оскільки панель прогресу не з’явиться, коли вивиберіть файл, а потім натисніть кнопку подання форми замість кнопки «Завантажити». Я хотів би запустити форму надсилання після завантаження (за допомогою кнопки "Завантажити").

Моя поточна форма виглядає приблизно так:

$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"),
);

Файловий модуль обробляє файли за допомогою зворотного дзвінка ajax до файлу / ajax / * uri. Зворотний виклик повертає команди ajax.

В основному я хочу додати додаткову команду ajax, яка запускає форму надсилання після завантаження файлу.

Відповіді:

2 для відповіді № 1

@Clive Це не було для мене варіантом, оскільки я хотів, щоб користувачі самі розпочали завантаження. Ти відповів, мені дали кілька ідей, і я придумав таке рішення.

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();
}
}
}
});

}
}

Сподіваюся, це корисно і для інших користувачів.

Thnx Clive для встановлення мене на правильний шлях.