Как добавить псевдо поле в форму редактирования ноды
Недавно мне было необходимо реализовать весьма нетипичный проект, где на странице редактирования нужно было отобразить некий контент взаимодействующий только с содержимым админской части, но при этом не сохраняющийся ни в БД ни отображающийся на странице материала. Честно говоря у меня ушло слишком много времени, что бы реализовать даную задачу, по этому на будущее делюсь полученным опытом, создания псевдо полей, возможно это сэкономит кому то время. Выполнять данный код будем в кастомном модуле. Вот таким образом мы можем вывести поле в админской части:
function MYMODULE_form_node_form_alter(&$form, $form_state) {
print $form->nodeform[1];
$form['my_custom'] = array(
'#type' => 'container',
'#access' => TRUE,
'#title' => 'Title',
'#weight' => 5,
'barclays_epdq_active' => array(
'#markup' => '
ВАША РАЗМЕТКА
',
),
);
}
И наоборот, вариант отображения поля только в самой ноде:
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,$form, &$form_state) {
if ($view_mode == 'full' && $node->type == 'NODE_TYPE') { // Здесь так же можно сделать ограничение на тип ноды по желанию
$node->content['mysuper_form'] = array(
'#markup' => '
ВАША РАЗМЕТКА
',
);
}
}
Вот и всё волшебство! Если у вас есть идеи как улучшить или оптимизировать данный подход, присылайте ваши варианты.