Drupal является мощной платформой для создания веб-сайтов, и одним из инструментов, предоставленных Drupal, является модуль Webform. Webform позволяет создавать и управлять веб-формами на сайте. Один из вопросов, с которыми вы можете столкнуться при использовании модуля Webform, — как сохранять данные формы в текстовом документе? В этой статье мы рассмотрим этот вопрос и предоставим примеры программного кода для достижения данной функциональности.

Использование хука hook_webform_submission_insert()

Для сохранения полей веб-формы Drupal в текстовом документе мы можем использовать хук hook_webform_submission_insert(). Этот хук вызывается после успешного добавления новой записи веб-формы. Мы можем использовать этот хук для создания нового текстового документа и записи в него данных формы. Пример кода ниже показывает, как использовать этот хук для сохранения поля «message» в текстовом документе:

/**
 * Implements hook_webform_submission_insert().
 */
function mymodule_webform_submission_insert($node, $submission) {
  // Получение значения поля "message" из данных формы.
  $message = $submission->data[1]['value'][0];

  // Создание нового текстового документа.
  $file = file_save_data($message, 'public://form_data.txt', FILE_EXISTS_REPLACE);
}

Отправка данных формы по электронной почте с помощью хука hook_webform_submission_insert()

В некоторых случаях вам может потребоваться отправить данные формы по электронной почте, а не просто сохранить их в текстовом документе. Для этого мы можем использовать модуль Drupal Mail System и хук hook_webform_submission_insert(). Пример кода ниже показывает, как отправить значения полей «name» и «email» формы по электронной почте:

/**
 * Implements hook_webform_submission_insert().
 */
function mymodule_webform_submission_insert($node, $submission) {
  // Получение значений полей "name" и "email" из данных формы.
  $name = $submission->data[2]['value'][0];
  $email = $submission->data[3]['value'][0];

  // Отправка электронной почты с помощью модуля Mail System.
  $params['subject'] = t('New webform submission');
  $params['body'] = t('Name: @name\nEmail: @email', [
    '@name' => $name,
    '@email' => $email,
  ]);
  $module = 'mymodule';
  $key = 'webform_submission_email';
  $to = 'example@example.com';

  drupal_mail($module, $key, $to, language_default(), $params);
}

3 смежных вопроса и ответы

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

Вы можете использовать хук hook_webform_submission_presave() для добавления дополнительной проверки данных формы перед их сохранением. Внутри этого хука вы можете проверить и изменить значения полей формы или выполнить другие действия, если это необходимо. Пример кода ниже показывает, как использовать хук hook_webform_submission_presave():

/**
 * Implements hook_webform_submission_presave().
 */
function mymodule_webform_submission_presave($node, &$submission) {
  // Проверка значения поля "name".
  if ($submission->data[2]['value'][0] == 'admin') {
    // Если значение поля "name" равно 'admin', добавляем сообщение об ошибке и прерываем сохранение формы.
    form_set_error('name', t("You are not allowed to use 'admin' as your name."));
    return;
  }
}

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

Вы можете использовать хук hook_webform_submission_insert() для изменения форматирования данных перед их сохранением в текстовом документе. Внутри этого хука вы можете изменить значения полей формы или выполнить другие операции с данными перед их записью в текстовый документ. Пример кода ниже показывает, как изменить форматирование значения поля «message» перед сохранением его в текстовом документе:

/**
 * Implements hook_webform_submission_insert().
 */
function mymodule_webform_submission_insert($node, $submission) {
  // Получение значения поля "message" из данных формы.
  $message = $submission->data[1]['value'][0];
  
  // Изменение форматирования значения поля "message" перед сохранением его в текстовом документе.
  $formatted_message = '

' . $message . '

'; // Создание нового текстового документа. $file = file_save_data($formatted_message, 'public://form_data.txt', FILE_EXISTS_REPLACE); }

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

Вы можете использовать хук hook_webform_submission_insert() для добавления пользовательского заголовка в текстовый документ перед сохранением данных формы. Внутри этого хука вы можете изменить содержимое текстового документа, добавив пользовательские данные или создав новые поля заголовка. Пример кода ниже показывает, как добавить пользовательский заголовок «Webform Data» перед сохранением данных формы в текстовый документ:

/**
 * Implements hook_webform_submission_insert().
 */
function mymodule_webform_submission_insert($node, $submission) {
  // Получение значения поля "message" из данных формы.
  $message = $submission->data[1]['value'][0];

  // Создание пользовательского заголовка.
  $header = 'Webform Data' . PHP_EOL . PHP_EOL;

  // Создание нового текстового документа и добавление пользовательского заголовка и данных формы.
  $file = file_save_data($header . $message, 'public://form_data.txt', FILE_EXISTS_REPLACE);
}