Анатомия форм в друпал 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 — это имя функции-конструктора формы.

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

Превышение лимитов памяти при запросе перевода в модуле tmgmt

Октябрь 1, 2024 г.

Это проблема рекурсии при сборе информации о статье. Модуль сканирует ссылочные поля (reference entity fields) и может попасть в своеобразную рекурсивную петлю. К примеру, статья ссылается на параграф, а тот ссылается на эту же статью. Т.к. глубина ...

Читать

Изменения настроек поля программно Drupal 7

Май 27, 2020 г.

Если вам программно нужно изменить настройки поля в Drupal, то на помощь приходит Field CRUD API. Это набор функций из файла modules/field/field.crud.inc. ...

Читать

Drupal: шаблоны для taxonomy_term и view mode — как добавить?

Июль 19, 2025 г.

При работе с таксономией в Drupal нередко возникает потребность отображать термины по-разному в зависимости от контекста. Например, один и тот же термин в режиме teaser должен выводиться компактно, а в режиме full — с подробным описанием. Если вы используете ...

Читать

Заполнение поля формы через GET в Drupal 7

Июнь 23, 2011 г.

Рассмотрим случай, когда нужно предварительно заполнить поле (ряд полей) формы при переходе на страницу с этой формой в Drupal. Данные для инициализации передаём как часть uri (т.е. метод GET). Подход проверен для Drupal 7. [crayon-6a5dd2553a3f6855567500/]

Читать
 

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

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



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