Рейтинг:0

Используйте ajax для сохранения модальной/диалоговой формы вместо перезагрузки страницы

флаг kr

Я ищу способ сохранить модальные и диалоговые формы через ajax вместо перенаправления пользователя после отправки формы. «Аякс» для меня совершенно незнакомая территория.

Я уже нашел здесь несколько интересных тем:

Диалоговое окно пользовательского интерфейса jQuery пытается отправить форму с использованием AJAX, перенаправляет меня на фактическую страницу формы вместо отправки AJAX

Как закрыть модальное окно после отправки формы?

Я попробовал все ответы, показанные там, но безуспешно. Я использую Drupal 9, и кажется, что код может немного отличаться между версиями 8 и 9. Я пытался копаться на страницах документации на drupal.org, но не нашел ничего полезного для моего случая.

Рейтинг:0
флаг kr

Для всех, кому небезразлично, я заработал со следующим кодом в моем пользовательском модуле «cs_modals»:

 /**
 * Реализует hook_form_alter().
 */
function cs_modals_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
    $запрос = \Drupal::request();
    // Проверяем, есть ли запрос Ajax.
    если ($request->isXmlHttpRequest()) {
      $form['actions']['submit']['#ajax']['callback'] = '_cs_modals_id_submit_ajax_callback';
    }
}

/**
 * Пользовательский обратный вызов Ajax.
 */
функция _cs_modals_id_submit_ajax_callback (массив и $ форма, FormStateInterface $ form_state) {
  // Если форма действительна, закрываем диалог.
  если (!$form_state->hasAnyErrors()) {
    $response = новый \Drupal\Core\Ajax\AjaxResponse();
    $response->addCommand(new \Drupal\Core\Ajax\CloseDialogCommand());
    вернуть $ответ;
  }
  // В противном случае вызовите обратный вызов #ajax по умолчанию.
  $form_object = $form_state->getFormObject();
  $response = $form_object->submitAjaxForm($form, $form_state) ;
  вернуть $ответ;
}

Теперь каждая модальная форма отправляется через Ajax. Теперь я ищу способ автоматического закрытия модального окна при успешной отправке формы или отображения сообщения об ошибке через Ajax, когда одно или несколько обязательных полей не имеют значения. Любая помощь в этом будет оценена по достоинству!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.