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

Создание кастомной формы редактирования ноды

Для создания кастомной формы редактирования ноды можно воспользоваться хуком hook_form_alter().


/**
 * Implements hook_form_alter().
 */
function custom_module_form_alter(&$form, &$form_state, $form_id) {
  // Проверяем, что форма относится к редактированию ноды.
  if ($form_id == 'node_edit_form') {
    // Добавляем новое поле в форму.
    $form['field_custom_field'] = array(
      '#type' => 'textfield',
      '#title' => t('Custom Field'),
      '#default_value' => isset($node->field_custom_field['und'][0]['value']) ? $node->field_custom_field['und'][0]['value'] : '',
      '#weight' => 10,
    );
  }
}

В приведенном выше примере мы добавляем новое текстовое поле с названием «Custom Field» в форму редактирования ноды. Мы также устанавливаем значение этого поля, если оно уже существует в редактируемой ноде.

Настройка кастомной формы

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

Добавление нового элемента формы и обработка его значений


/**
 * Implements hook_form_alter().
 */
function custom_module_form_alter(&$form, &$form_state, $form_id) {
  // Проверяем, что форма относится к редактированию ноды.
  if ($form_id == 'node_edit_form') {
    // Добавляем новое текстовое поле.
    $form['field_custom_field'] = array(
      '#type' => 'textfield',
      '#title' => t('Custom Field'),
      '#default_value' => isset($node->field_custom_field['und'][0]['value']) ? $node->field_custom_field['und'][0]['value'] : '',
      '#weight' => 10,
    );

    // Добавляем обработчик значения поля при отправке формы.
    $form['#submit'][] = 'custom_module_form_submit';
  }
}

/**
 * Обработчик значения поля при отправке формы.
 */
function custom_module_form_submit(&$form, &$form_state) {
  // Получаем значение поля.
  $custom_field_value = $form_state['values']['field_custom_field'];

  // Делаем что-то с полученным значением.
  // Например, сохраняем в базу данных или выводим на экран.
  drupal_set_message(t('Custom field value: @value', array('@value' => $custom_field_value)));
}

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

Добавление нового положения для элемента формы


/**
 * Implements hook_form_alter().
 */
function custom_module_form_alter(&$form, &$form_state, $form_id) {
  // Проверяем, что форма относится к редактированию ноды.
  if ($form_id == 'node_edit_form') {
    // Перемещаем поле "Custom Field" внизу формы.
    $form['field_custom_field']['#weight'] = 100;
  }
}

В этом примере мы переносим поле «Custom Field» внизу формы, установив для него значение ‘#weight’ равное 100.

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

1. Как сделать поле обязательным для заполнения?

Для того чтобы сделать поле обязательным для заполнения, вы можете добавить в его определение значение ‘#required’ равное TRUE:


$form['field_custom_field'] = array(
  '#type' => 'textfield',
  '#title' => t('Custom Field'),
  '#required' => TRUE,
);

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

Для того чтобы добавить предупреждение при заполнении поля, вы можете использовать опцию ‘#description’. Например:


$form['field_custom_field'] = array(
  '#type' => 'textfield',
  '#title' => t('Custom Field'),
  '#description' => t('Please enter a value for this field.'),
);

3. Как изменить стиль элемента формы с использованием CSS?

Для изменения стиля элемента формы с использованием CSS, вы можете добавить класс элемента формы с использованием опции ‘#attributes’. Например:


$form['field_custom_field'] = array(
  '#type' => 'textfield',
  '#title' => t('Custom Field'),
  '#attributes' => array('class' => array('custom-class')),
);

В приведенном выше примере мы добавляем класс «custom-class» к полю «Custom Field».

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