Вы здесь

Форму в поле, а поле в ноду

0

Приветствую.

Есть форма atata_form, её надо поместить в ноды, вместе с основными полями, но не через блок. Но так, чтобы не переписывать *.tpl.php и вообще не трогать шаблон.
Что-то вроде Entityform самопального.

Думается мне, что самый нормальный способ - это сделать эту форму полем (вопрос 1), и это поле как-то привязать к ноде на вывод (вопрос 2).

Версия Drupal: 
7.x
Категория: 
File APIForm API
Вопрос задан 10.08.2015 - 06:46
Аватар пользователя SAM
SAM
212

Ответы

1

Если без полей, то как-то так:

function MODULE_node_view($node, $view_mode, $langcode) {
  if ($node->type == 'TYPE') {
    $node->content['atata_form'] = drupal_get_form('atata_form');
  }
}

Можно сделать доп. полем (hook_field_extra_fields), чтобы управлять положением через настройки отображения:
http://xandeadx.ru/blog/drupal/615

Ответ дан 10.08.2015 - 09:27

Точно, а я всё на preprocess зарился, там-то никак.
Интересно, а можно сделать такое псевдо-поле, доступное для всех сущностей

Комментарий оставлен 10.08.2015 - 09:49

Точно, а я всё на preprocess зарился, там-то никак

На препроцессе сможете только задать содержимое, как и в MODULE_node_view.

Интересно, а можно сделать такое псевдо-поле, доступное для всех сущностей

Я думаю в цикле для каждой массив генерировать.

Комментарий оставлен 10.08.2015 - 10:05

Как в восьмерке:

...
foreach (node_type_get_types() as $bundle) {
    if ($bundle->has_title) {
      $extra['node'][$bundle->type]['form']['title'] = array(
        'label' => $bundle->title_label, 
        'description' => $description, 
        'weight' => -5,
      );
    }
    ...
}

В цикле перебираются типы нод и для каждой генерируется массив.
Правда, это, кажется, для поля тайтл в форму, но идею вы поняли :-)

Комментарий оставлен 10.08.2015 - 10:18