form api

Добавление E-mail поля в форму

При создании своей формы с помощью Form API в Drupal 7 нету возможности добавить элемент типа email в отличие от Drupal 8. Для решения подобной задачи можно использовать элемент типа textfield и ему добавить функцию валидации для проверки на корректность ввода адреса электронной почты. Валидацию можно выполнить функцией ядра друпала valid_email_address().

Темизация формы комментариев в Drupal 7

Форма комментариев в друпале для большинства случаев избыточна. Посетителям сайта не нужны подсказки к форматам ввода, как и сама возможность выбирать какие то ему неизвестные форматы. Когда человек видит кучу полей , которые ему нужно заполнить, чтобы оставить комментарий, у него сразу же отпадает желание что-либо комментировать. Но по-умолчанию форма комментариев в друпал 7 не имеет ни своего шаблона, ни функции темизации. Чтобы это исправить, нужно в hook_theme() добавить темизацию формы комментариев.

Добавление HTTP заголовков с помощью #attached

Для добавления заголовков HTTP в Drupal 7 используется функция drupal_add_http_header. Но также имеется возможность добавить header в рендерном массиве с помощью свойства #attached. Для этого добавляем в attached элемент с ключом drupal_add_http_header.

Для примера добавим заголовок к форме и таким образом при обращении к страницам с данной формой будут отдаваться необходимые заголовки:

Вывод формы в модальном окне (Dialog | jQuery UI) в Drupal 8

Создадим простенькую форму в Drupal 8 и затем будем выводить ее в модальном окне.
Форма будет выводиться по клику на ссылке, которая будет располагаться на созданной программно странице с урлом /custom-page.

Использование регулярных выражений для #states в Form API

В друпал 7 в Form API появилось новое свойство #states. Оно делает возможным изменять состоянии элементов форм (unchecked, visible, enabled и т.д.) в зависимости от состояния других элементов.

Это позволяет обходится без написания кастомного javascript кода. Можно в зависимости от конкретного значения поля изменить состояние другого. Но #states не умеет работать с регулярными выражениями.

С помощью небольшого js файла сделаем возможность в качестве значения поля выбирать regex.

Отмена валидации для ajax сабмита

При добавлении ajax для submit кнопки формы , после нажатия на нее выполняется submit и validation функции . При этом потребуется вводить все обязательные поля во избежании появления ошибок .Для тестирования ajax функционала на время разработки можно временно убрать выполнение валидации. Для этого достаточно в параметр #limit_validation_errors записать пустой массив . Также пустой массив запишем и в параметр #submit:

Обновление формы с помощью AJAX button в Drupal 8

Для обновления всей формы в Drupal 8 нужно:

  • Описать класс , расширяющий базовый класс FormBase для создания форм .
  • В методе getFormId() нужно вернуть id формы , в методе buildForm() описать саму форму создаваемую.
  • В параметре #ajax для кнопки указать имя callback функции , которая является публичным методом описанным в этом же классе .
  • В callback методе вернуть форму.