2011-07-20 7 views
2

フォームとリンクのリストを含むモジュール内のブロックをレンダリングしようとしています。私はどちらか一方を正しく表示することができますが、レンダリング配列フォーマットを理解していないと、両方とも同じブロック内で同時にレンダリングされます。リストを表示するには、ブロックコンテンツを設定するためのDrupal 7.4他のコンテンツと一緒にフォームをDrupal 7ブロックにレンダリングする

例を使用する:

$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; 

各ケースが私のために個別に正常に動作します。フォームとリストを1つのブロック['content']配列に結合して1つのブロックにレンダリングできるようにするにはどうすればよいですか?前もって感謝します。

+0

エラーがあります、2番目の前に$を'return $ block'。私はそれを編集することはできません、少なくとも6文字を変更する必要があります明らかに編集... – charliefortune

答えて

8

私は、これは動作するはずだと思う、私もテストしていない:

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

をそれは少し直感に反し、フォームは、配列、しかしtheme()リターンマークアップをレンダリング返すdrupal_get_formです。

あなたは、常にこの(ひどいソリューション)を行うことができますが、その非常に非効率的なよう助言とあなたがするためにDrupalが意図するすべてのものに反するされていない

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

おかげで、最初のソリューションはうまく動作し、私はレンダリング配列の詳細を読んだ後意味をなさない。私は、レンダリング配列またはマークアップ(または単に文字列)を返すことができ、すべて動作するという事実をレンダリング配列に結合しようとすると、 '#markup'型を使用する必要がありますすでにレンダリングされているもの(テーマ出力のようなもの)あなたのコードサンプルには、 "'form' = drupal_get_form" "form '=> drupal_get_form"という小さなタイプミスがあります。乾杯配列 – peetucket

+0

あなたのレンダー配列の例では、 'items'と' form'を指定する順序がレンダリングされたHTMLの上から下に表示される順序を決定することに注意してください。 –

関連する問題