Анатомия форм в друпал 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-функция qr_code() в Drupal: простой плагин с использованием Endroid QR Code

Октябрь 23, 2025 г.

Иногда в шаблоне Drupal удобно вывести QR-код прямо по месту — без внешних файлов, без рендеринга через отдельный контроллер и без подключения сторонних ...

Читать

Пакетная загрузка картинок в поле типа ImageField CCK (Drupal)

Декабрь 17, 2011 г.

В wordpress, к примеру, такая возможность уже есть в базовой комплектации движка. А что касается drupal-a, в 7й версии хоть и интегрировали в движок что ...

Читать

Импортируем изображения через wysiwyg

Декабрь 27, 2014 г.

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

Читать

Создание связи во Views, используя поле entity_reference

Октябрь 24, 2017 г.

Модуль View, Drupal 7. Задача: в контексте публикации (находясь на странице публикации) вывести с помощью модуля views публикации, связанные с текущей ...

Читать
 

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

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



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