Drupal 7 предлагает универсальный метод сохранения кастомной формы в содержимом после отправки. Ниже представлено подробное объяснение процесса.

Шаг 1: Создание кастомной формы в Drupal 7

Прежде чем начать сохранять кастомную форму, необходимо создать ее. Введите следующий код в файле custom_form.module:


/**
 * Implements hook_menu().
 */
function custom_form_menu() {
  $items['custom-form'] = array(
    'title' => 'Кастомная форма',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('custom_form_form'),
    'access callback' => TRUE,
  );
  return $items;
}

/**
 * Custom form.
 */
function custom_form_form($form, &$form_state) {
  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => 'Имя',
  );
  $form['email'] = array(
    '#type' => 'textfield',
    '#title' => 'Email',
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Отправить',
  );
  return $form;
}

Шаг 2: Создание обработчика формы

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


/**
 * Implements hook_form_submit().
 */
function custom_form_form_submit($form, &$form_state) {
  $name = $form_state['values']['name'];
  $email = $form_state['values']['email'];
  
  // Сохранение данных в содержимом.
  $node = new stdClass();
  $node->type = 'article';
  node_object_prepare($node);
  $node->title = $name;
  $node->body['und'][0]['value'] = $email;
  node_save($node);
  
  drupal_set_message('Форма успешно отправлена и сохранена в содержимом.');
}

Шаг 3: Тестирование

Теперь, когда форма и обработчик созданы, вы можете протестировать их. Перейдите на страницу вашего сайта, добавьте /custom-form к URL и заполните форму. После отправки формы данные будут сохранены в содержимом Drupal 7.

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

1. Как изменить тип содержимого для сохранения кастомной формы?

Чтобы изменить тип содержимого, используемый для сохранения формы, в функции custom_form_form_submit замените ‘article’ на нужный тип содержимого.


$node->type = 'новый_тип_содержимого';

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

Чтобы добавить дополнительные поля в форму, отредактируйте функцию custom_form_form и добавьте новые элементы в массив $form.


$form['new_field'] = array(
  '#type' => 'textfield',
  '#title' => 'Новое поле',
);

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

Чтобы добавить проверку данных перед сохранением формы, отредактируйте функцию custom_form_form_validate и добавьте необходимые проверки.


/**
 * Custom form validation.
 */
function custom_form_form_validate($form, &$form_state) {
  $email = $form_state['values']['email'];
  
  if (!valid_email_address($email)) {
    form_set_error('email', 'Некорректный адрес электронной почты.');
  }
}