web-dev-qa-db-ja.com

テーブルレイアウトでフォームをレンダリングする方法

Drupalで複数行、複数列のモジュールデータをユーザーに提示する方法Drupal 6?APIドキュメントでは何も飛び出していません。Iいくつかの答えをググってみましたが、それらはすべて以前のバージョンに適用されるか、参照されていないデッドモジュールです。

フォームAPIのすぐに使える機能は基本的にkey :: value編集インターフェースであると私は思っていますか?それが事実である場合、これを行うための最新のよく管理されたモジュールはありますか、またはこのデータをユーザーに別の方法で表示する必要があります-おそらくビューですか?

編集挿入、セルデータの変更など、データを編集するためのフォーム機能をこのテーブルに設定したいのです。そのため、モジュールの設定に常駐させるのは当然だと思いましたが、そのテーブル機能は存在しないようです。

3
user1359

少しトリッキー

function your_form(){
  $form = array();
  ...
  $record_ids = array();

  foreach($record_set as $record){
      $record_ids[$record['id']] = ''; // Collect ids of your record as index
      $form['column1'][$record['id']] = array('#value' => $record['field1']);
      $form['column2'][$record['id']] = array('#value' => $record['field2']);
      $form['column3'][$record['id']] = array('#value' => $record['field3']);
  }

  $form['select'] = array(
      '#type' => 'checkboxes',
      '#options' => $item_ids,
  );

  $form['#theme'] = 'render_your_form'; // Theme registry function to render this form
}

Theme_registryを定義する

function your_module_theme(){
   ...
   $theme['render_your_form'] = array(
       'arguments' => array('form' => array()),
   );
   return $theme;
}

次に、テーマハンドラーを記述します。

function theme_render_your_form($form=array()){
   $head = array('Select', 'Title Col 1', 'Title Col 2','Title Col 3');
   $rows = array();
   foreach(element_children($form['select']) as $id){
       $fields = array();
       $fields[] = drupal_render($form['select'][$id]); //This will render a checkbox, omit if not required
       $fields[] = drupal_render($form['column1'][$id]);
       $fields[] = drupal_render($form['column2'][$id]);
       $fields[] = drupal_render($form['column3'][$id]);
       $rows[] = $fields;
   }
   $output = theme('table', $head, $rows); // Theme as table output
   $output .= drupal_render($form); // Render rest of form components. (For D6)
   $output .= drupal_render_children($form); // Render rest of form components (For D7)
   return $output;
}
8
Shoaib Nawaz