Drupal 7 hook_node_view добавляет форму к содержимому узла

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 => «Что-то», и он работает.

Возврат из 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); 

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

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

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

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