Иногда возникает задача: отобразить контент на странице редактирования ноды в административной части, который взаимодействует только с 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.