Рендеринг формы вместе с другим контентом в блок Drupal 7 - PullRequest
2 голосов
/ 21 июля 2011

Я пытаюсь отобразить блок в моем модуле, который содержит форму и список ссылок.Я могу отображать одно или другое правильно, но, видимо, недостаточно хорошо понимаю формат массива рендеринга, чтобы они оба отображались одновременно (один над другим) в одном и том же блоке.Использование Drupal 7.4

Пример настройки содержимого блока для отображения списка:

$block['subject']='Title';
$items= // code that generates a list of links into an array
$theme_args=array('items'=>$items,'type'=>'ul');
$block['content']=theme('item_list',$theme_args);
return $block;

Пример настройки содержимого блока для отображения формы:

$block['subject']='Title';
$block['content']=drupal_get_form('mymodule_myform_function'); 
// call function that returns the usual form array  
return $block;

Каждый случай работаетхорошо индивидуально для меня.Как я могу объединить форму и список в один блок ['content'], чтобы он мог отображаться в одном блоке?Заранее спасибо.

1 Ответ

8 голосов
/ 22 июля 2011

Я думаю, что это должно работать, хотя я не проверял:

$block = array(
  'items' = array(
    '#markup' => theme('item_list', $theme_args);
  ),
  'form' = drupal_get_form('mymodule_myform_function');
);
$block['content'] = $block;

Это немного нелогично, drupal_get_form возвращает массив визуализации формы, однако theme() возвращает разметку.

Вы всегда можете сделать это (ужасное решение), но это не рекомендуется, так как оно крайне неэффективно и идет вразрез со всем, что Drupal намеревается сделать:

$block['content'] = theme('item_list', $theme_args) . render(drupal_get_form('myform'));
...