同様の問題に対処する必要がありました。同じページに複数のフォームを配置する必要があったため、ID の重複を防ぐためにフォームとその要素の ID を変更する必要がありました。私は次のようなことをしました:
function voci_comment_form($form, &$form_state, $cid) {
$form['#attributes']['id'] = 'voci-comment-form-' . $cid;
$form['#attributes']['class'][] = 'voci-comment-form';
$form['body'] = array(
'#title' => 'Post a comment',
'#type' => 'textarea',
'#resizable' => FALSE,
'#rows' => 1,
);
$form['comment'] = array(
'#type' => 'submit',
'#value' => 'Comment',
);
foreach ($form as $k => &$element) {
$k = str_replace('_', '-', $k);
$element['#attributes']['id'] = "edit-$k-$cid";
$element['#attributes']['class'][] = "edit-$k";
}
return $form;
}
これは基本的に、渡された $cid に基づいて一意の ID を設定します。このコードでは、フォームの各要素にクラスも追加されるため、簡単にスタイルを設定できます。より堅牢なソリューションが可能であると確信していますが、これが基本的な考え方です。Drupal 7 でテスト済み。