Форма авторизации в модальном окне

Задача: При нажатии на пункт меню "Login", открывать модальное окно с формой авторизации. Пользователь должне остаться на той же странице.

  • Подключаем библиотеку core/drupal.dialog.ajax для неавторизированых пользователей;
  • добавляем к ссылке клас "use-ajax" и атрибут 'data-dialog-type' = 'modal';
  • добавляем get параметр "destination", для редиректа на страницу после сабмита формы.
<?php

use Drupal\Core\Url;

function login_popup_preprocess_page(array &$variables): void {
  $variables['#attached']['library'][] = 'login_popup/login_popup';
}

/**
 * Implements hook_preprocess_HOOK().
 */
function login_popup_preprocess_menu__account(&$variables) {
  $link_options = [
    'attributes' => [
      'class' => ['use-ajax'],
      'data-dialog-type' => 'modal',
    ],
    'query' => [
      'destination' => Url::fromRoute('<current>')->toString(),
    ]
  ];

  if(!$variables['logged_in']) {
    $variables['items']['user.logout']['url']->setOptions($link_options);
  }
}

 

login_popup.libraries.yml

login_popup:
  version: 1.x

  dependencies:
    - core/jquery
    - core/drupal.dialog.ajax