0

フォームの配列をテンプレートに送信していますが、個々のフォーム要素をレンダリングする場合にフォームの開始タグと終了タグを印刷する方法を理解するのに苦労しています。

テーマ関数に送信される構造のアイデアを示す例を次に示します。

function mymodule_page_callback() {
  ...
  $i = 0;
  foreach ($widgets as $widget) {
    $forms[] = drupal_get_form('my_renderable_form_' . $i, $widget);
    $i++;
  }
  return theme('my_theme_function', array('forms' => $forms));
}

私のテンプレートでは、行ごとに 1 つのフォームを持つテーブルを作成しています。これが私がそれを機能させる唯一の方法です:

$header = array('field 1', 'field 2', '');
foreach ($variables['forms'] as $form) {
  $row = array(
    drupal_render($form['field1']),
    drupal_render($form['field2']),
    // Manually set the closing form tag
    drupal_render($form['submit']) . drupal_render_children($form) . '</form>'
  );
  // Now drupal_render($form) to get the opening/closing form tags
  // and stuff it at the beginning of the 1st column.
  // This has to be done last so the rest of the form doesn't render with it.
  $row[0] = str_replace('</form>', '', drupal_render($form)) . $row[0];
  $rows[] = $row;
}
print theme('table', array('header' => $header, 'rows' => $rows);

ここで各フォームの開閉をレンダリングする適切な方法はありますか?

4

1 に答える 1

-2

drupal_render個々のフォーム要素で使用する代わりに、renderフォーム全体で使用します。

$header = array('field 1', 'field 2', '');
foreach ($variables['forms'] as $form) {
  $rows[] = array(array('data' => render($form), 'colspan' => 3));
}
print theme('table', array('header' => $header, 'rows' => $rows);

おそらくtableselectForm API 要素の使用を検討する必要があります。

theme_table編集:ドキュメントで指定されているように $rows[] 割り当てを更新しました。

于 2013-05-24T01:06:24.083 に答える