Drupal 7 hook_node_view добавить форму к содержимому узла - PullRequest
8 голосов
/ 25 октября 2011
function example_module_node_view($node, $view_mode, $langcode)
{   
    $f =  drupal_get_form('example_module_form', $node);
    $node->content['data_collection_form'] = array('#value' => $f, '#weight' => 1); 
}

Почему форма не отображается? Я делаю что-то неправильно? Объект формы заполняется. Я могу сделать #markup => «Что-то», и это работает.

Ответы [ 2 ]

9 голосов
/ 26 октября 2011

Возвращение drupal_get_form на самом деле представляет собой сам массив рендеринга, поэтому вы можете просто сделать это:

$f = drupal_get_form('example_module_form', $node);
$f['#weight'] = 1;
$node->content['data_collection_form'] = $f;

Если вы хотите сделать это иначе, хотя форма должна быть визуализируемым элементом', поэтому ключ не должен начинаться с префикса #:

$f = drupal_get_form('example_module_form', $node);
$node->content['data_collection_form'] = array(0 => $f, '#weight' => 1);

Все записи в массиве рендеринга с ключом с префиксом # считаются свойствами, тогда как те, которые не являются, рассматриваются'children' и отображаются рекурсивно.

5 голосов
/ 27 марта 2012

Клайв ответ не работает в моем случае. Мне нужно было вызвать drupal_render и передать его как разметку.

$form = drupal_get_form('example_module_form', $node);
$node->content['data_collection_form'] = array(
  '#markup' => drupal_render($form),
  '#weight' => 10,
);

Это работает, но я не уверен, что это правильный путь.

...