Drupal 7 предлагает множество возможностей для создания пользовательских форм. В этой статье мы рассмотрим основные шаги для создания своей формы в Drupal 7.

Шаг 1: Создание модуля

Первым шагом является создание модуля, который будет содержать нашу форму. Для этого нужно создать новую папку в директории «sites/all/modules», назвать ее в соответствии с именем модуля и создать два файлы: module_name.info и module_name.module. В файле module_name.info нужно указать основную информацию о модуле, а в файле module_name.module — код для создания формы.

Пример кода для module_name.info:

name = Module Name
description = A description of the module
core = 7.x
package = Custom
dependencies[] = block
dependencies[] = node
dependencies[] = views

Пример кода для module_name.module:

<?php
function module_name_menu() {
  $items = array();
  $items['form-page'] = array(
    'title' => 'My Form Page',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('module_name_my_form'),
    'access arguments' => array('access content'),
    'type' => MENU_NORMAL_ITEM,
  );
  return $items;
}

function module_name_my_form($form, &$form_state) {
  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Enter your name'),
    '#required' => TRUE,
  );
  $form['email'] = array(
    '#type' => 'textfield',
    '#title' => t('Enter your email'),
    '#required' => TRUE,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
  );
  return $form;
}

function module_name_my_form_submit($form, &$form_state) {
  drupal_set_message(t('The form has been submitted.'));
}

Шаг 2: Создание страницы для отображения формы

Вторым шагом является создание страницы, на которой будет отображаться наша форма. Для этого нужно определить путь к странице в функции module_name_menu и указать соответствующий обработчик формы, который будет вызываться при отображении этой страницы.

Пример кода для функции module_name_menu:

function module_name_menu() {
  $items = array();
  $items['form-page'] = array(
    'title' => 'My Form Page',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('module_name_my_form'),
    'access arguments' => array('access content'),
    'type' => MENU_NORMAL_ITEM,
  );
  return $items;
}

Шаг 3: Обработка данных формы

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

Пример кода для функции module_name_my_form_submit:

function module_name_my_form_submit($form, &$form_state) {
  drupal_set_message(t('The form has been submitted.'));
}

Дополнительные вопросы:

1) Как добавить дополнительные поля в форму?

Для добавления дополнительных полей в форму нужно просто использовать соответствующие области массива $form в функции module_name_my_form. Например, чтобы добавить поле для ввода пароля, можно использовать следующий код:

$form['password'] = array(
  '#type' => 'password',
  '#title' => t('Enter your password'),
  '#required' => TRUE,
);

2) Как настроить валидацию данных, введенных в форму?

Для настройки валидации данных, введенных в форму, нужно добавить функцию валидации в массив $form в функции module_name_my_form. Например, чтобы проверить, что введенное значение имеет определенную длину, можно использовать следующий код:

$form['name'] = array(
  '#type' => 'textfield',
  '#title' => t('Enter your name'),
  '#required' => TRUE,
  '#element_validate' => array('module_name_name_validate'),
);

function module_name_name_validate($element, &$form_state) {
  if (strlen($form_state['values']['name']) < 5) {
    form_set_error($element['#name'], t('The name must be at least 5 characters long.'));
  }
}

3) Как добавить пользовательскую обработку данных при отправке формы?

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

function module_name_my_form_submit($form, &$form_state) {
  drupal_mail('module_name', 'submit_form', $form_state['values']['email'], language_default(),
    array('name' => $form_state['values']['name'], 'email' => $form_state['values']['email']));
}