Главная/Статьи/Как добавить псевдо поле в форму редактирования ноды
Drupal

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

Иногда возникает задача: отобразить контент на странице редактирования ноды в административной части, который взаимодействует только с backend-функциональностью и не сохраняется в базе данных и не отображается на странице ноды для посетителей.

Решение — псевдо поля через кастомный модуль. Два варианта реализации в зависимости от задачи.

Вариант 1 — Отображение только в форме редактирования

Через hook_form_node_form_alter():

function MYMODULE_form_node_form_alter(&$form, $form_state) {
  $form['my_custom'] = array(
    '#type' => 'container',
    '#access' => TRUE,
    '#title' => 'Title',
    '#weight' => 5,
    'my_markup' => array(
      '#markup' => '
ВАША РАЗМЕТКА
', ), ); }

Вариант 2 — Отображение только на странице ноды

Через два хука — hook_field_extra_fields() для объявления поля и hook_node_view() для рендеринга:

function MYMODULE_field_extra_fields() {
  $extra['node']['NODE_TYPE'] = array( // Машинное имя типа ноды
    'display' => array(
      'mysuper_form' => array(
        'label' => t('My field'),
        'weight' => -5,
      ),
    ),
  );
  return $extra;
}

function MYMODULE_node_view($node, $view_mode, $langcode) {
  // Ограничение на тип ноды и режим отображения
  if ($view_mode == 'full' && $node->type == 'NODE_TYPE') {
    $node->content['mysuper_form'] = array(
      '#markup' => '
ВАША РАЗМЕТКА
', ); } }

Первый вариант удобен для служебной информации в форме редактирования. Второй — для вывода дополнительного контента на странице ноды без сохранения в базу данных. Оба подхода экономят время и не требуют создания реальных полей через Field API.