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

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

node_save в hook_node_insert

Апрель 13, 2021 г.

Рассмотрим технику того, как выполнить node_save во время hook_node_insert. Проблема в том, что во время данного хука мы еще находимся в транзакции и выполнить сохранение ноды прямо тут коде функции - не получится. Т.е. следующий код работать не ...

Читать

Как добавить поле "количество" для кнопки add to cart в Drupal Commerce

Июль 13, 2023 г.

Кнопка выводится как элемент product.variations, а вот настройки полей, которые выводятся в этой сущности довольно глубоко зарыты. [crayon-691c9ef85aecb538256356/] Поле "кол-во товара в корзине" не является частью сущности product variation, ...

Читать

Проброс переменных из PHP в JS (в Drupal) с использованием js_settings_alter

Ноябрь 14, 2025 г.

В этой статье мы рассмотрим, как пробросить данные из PHP в JavaScript в Drupal 11 с использованием js_settings_alter(). Этот метод позволяет изменять или добавлять переменные в объект drupalSettings, который доступен в JavaScript на всех страницах. ...

Читать

Powered by Drupal - что это и как убрать?

Апрель 25, 2017 г.

Блок с текстом "создано на drupal" - объявляется модулем system. Ссылка с названия движка ведет на сайта drupal.org. Для чего этот блок? Возможно, ...

Читать
 

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

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



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