Анатомия форм в друпал 6 (forms in drupal 6)

Захотелось немного обобщить и так уже известные всем вещи. Но для, тех кто только начал знакомить с формами drupal (Forms API), материал будет полезен.

Вместо введения

Любая форма, созданная в drupal методом drupal_get_form, становится благодаря зацепкам в каком то смысле общедоступным объектом. Возможна произвольная модификация начального объявления, добавление обработчиков событий, добавление полей и т.п.

Типично, форма объявляется в виде некой функции, которая возвращает массив описания этой формы. Пример можно посмотреть тут. Вы можете, зная имя функции формы, объявленной в любом установленном модуле, собрать HTML код этой формы, вызвав drupal_get_form(‘имя функции-конструктора формы’). Нужно всего лишь вставить вызов этой функции в нужное место вашего кода.

Конструктор формы

Для создания собственной формы, её описание нужно выполнить в виде функции. В этой функции вы составляете массив описания формы, а в конце возвращаете этот массив как результат работы. Каждое свойство формы, её элементы — это отдельные поля массива. При этом элементы формы — тоже описываются массивом свойств.

Свойства формы и свойства полей начинаются с символа #. Описание допустимых имен свойств и случаи их применения детально описаны здесь. А я расскажу о наиболее интересных моментах (с моей точки зрения).

Вставка произвольного кода HTML. Все элементы формы (в том числе и сама форма) может иметь свойства — #prefix и #suffix. Их значение можно установить строкой с произвольным HTML кодом. Помимо этого, элементы формы неопределенного типа (когда не задано свойство ‘#type’) принимают тип по умолчанию — markup, значение (#value) которого передаётся напрямую в HTML в том месте, где расположен элемент на форме.

Загрузка списка автозаполнения. Некоторыми полями поддерживается свойство -‘#autocomplete_path’. Здесь можно указать путь до ajax функции (страницы на сайте), которая возвращает набор вариантов для автозаполнения. Простейший пример — показать список подходящих названий публикаций при заполнении текстового поля.

Использование fieldset. У некоторых вызывает сложность объявить в своей форме fieldset. Достаточно посмотреть один пример объявления, чтобы понять как это делается.

События формы

В друпале можно установить обработчик(и) для проверки данных формы и обработчик(и), выполняющийся после всех проверок при окончательной отправке данных. Имя соответствующих функций добавляется в массив обработчиков при описании формы.

$form[‘#submit’] = array(‘demo_form_submit’);
$form[‘#validate’]= array(‘demo_form_validate’);

Обработчики можно добавить и позднее, перехватив объявление формы с помощью зацепки hook_form_alter(&$form, $form_state, $form_id); есть также зацепка по имени определенной формы hook_form_FORMID_alter, где FORMID — это имя функции-конструктора формы.

Мало букафф? Читайте есчо !

Проверить роль пользователя в twig

Август 16, 2023 г.

Многие стандартные шаблоны в Drupal содержат вывод переменной пользователя (user), что делает возможным реализацию различной логики, в том числе и проверку роли пользователя. Например, вы желаете показывать какой-то элемент шаблона, только для ...

Читать

Добавляем настройки к js плагину CKEditor 5 в Drupal

Март 19, 2024 г.

Когда вы настраиваете форматы текстов, то кроме добавления иконок в toolbar wysiwyg, вы можете видеть набор настроек для разных плагинов CKEditor. Посмотрим ...

Читать

Настраиваем мета информацию о картинке для соц. сетей в Drupal 7

Сентябрь 27, 2016 г.

Когда посетители делятся ссылкой на ваш сайт в какой нить соц.сети, то программа со стороны соц. сети (Facebook или вКонтакте) пытается собрать информацию ...

Читать

Ctools modal закрытие при клике вне модального окна

Июнь 28, 2019 г.

Привычное для пользователей поведение модального окна изначально не реализовано в ctools. Давайте добавим немного js, реализующего нужный функционал. Код универсален для модального окна создаваемого ctools, т.к. привязан к верстке окна: [crayon-69e9167e54b53826205711/] ...

Читать
 

Комментарии к «Анатомия форм в друпал 6 (forms in drupal 6)»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: