Wydaje się, że Drupal nie zapobiega przesyłaniu wielu formularzy, nawet na stronach węzłów. Ta kontrola jakości sugeruje naprawienie go po stronie serwera.
Jak mogę wyłączyć przycisk przesyłania po kliknięciu?
Jakieś inne rozwiązania?
Wydaje się, że Drupal nie zapobiega przesyłaniu wielu formularzy, nawet na stronach węzłów. Ta kontrola jakości sugeruje naprawienie go po stronie serwera.
Jak mogę wyłączyć przycisk przesyłania po kliknięciu?
Jakieś inne rozwiązania?
Odpowiedzi:
Jest tylko w wersji deweloperskiej, ale moduł Ukryj wysyłanie wystarczy. Jedną z funkcji jest:
Właśnie zainstalowałem go na stronie deweloperskiej i wydaje się, że działa dobrze w przypadku formularzy dodawania węzłów; po kliknięciu przycisku Prześlij jest on ukryty i zastąpiony ładującym obrazem oraz komunikatem „Proszę czekać ...”, zanim formularz zostanie ostatecznie przesłany. Jednak nie próbowałem tego w żadnej innej formie.
źródło
hook_form_alter()
- jeśli używahook_form_FORMID_alter()
, przełącz go na ogólnyhook_form_alter()
. Jeśli to jest ogólne,hook_form_alter()
jeśli w środku, dodaj trochęor
w tymif
.Oto rozwiązanie dla Drupala 7. Kod jest uproszczoną wersją modułu Ukryj wysyłanie.
Ten kod działa dobrze nawet w przypadku przycisków „Dodaj więcej” i formularzy AJAX.
źródło
Najprościej jest zrobić oparte na motywach rozwiązanie javascript, aby wyłączyć przycisk po przesłaniu formularza. W pliku theme.info umieść plik javascript, aby można go było załadować za pomocą interfejsu API kompozycji.
Teraz w themename-script.js dodaj do sekcji Drupal.behaviors.themename, aby wyglądać następująco:
Więc przepływ jest następujący:
Jestem pewien, że istnieje pewne przetwarzanie ajax, że powyższe może być niebezpieczne, a przesłanie formularza nigdy nie będzie możliwe, jeśli zostanie wykryty błąd podczas sprawdzania poprawności form_api, więc przetestuj to i dostosuj do swoich potrzeb. Wyłączyłem oba przyciski, ponieważ nadal można było kliknąć przycisk podglądu, gdy przycisk przesyłania był wyłączony. Oczywiście twój przebieg może się różnić.
źródło
Drupal.behaviors
stylu deklaracji; to nie zadziała dla Drupala 7. Musiałoby tak byćDrupal.behaviors.themename = { attach: function (context, settings) { // ...
. Aby uzyskać więcej informacji, zobacz Zarządzanie JavaScript w Drupal 7