表形式のレイアウトのDrupalフォーム
-
10-10-2019 - |
質問
First Cellにチェックボックスが含まれるように、フォームの表形式レイアウト(HTMLテーブル)をレンダリングしようとしています。
$form = array();
$res = query('SELECT * FROM {mytable}');
$rows = array();
while($row = db_fetch_array($res)){
$record = array();
$checkbox = array(
'#type' => 'checkbox',
'#attributes' => array(
'value' => $row['id'],
'name' => 'myrecord[]',
),
);
$record[] = drupal_render($checkbox);
$record[] = $row['other_field_1'];
$record[] = $row['other_field_2']
$rows[] = $record;
}
$form['records'] = array(
'#value' => theme('table', array(), $rows);
);
return $form;
しかし、レンダリングされたすべてのチェックボックスには出力があります
<input type="checkbox" class="form-checkbox" name="" value="1" id="">
<input type="checkbox" class="form-checkbox" name="" value="1" id="">
<input type="checkbox" class="form-checkbox" name="" value="1" id="">
<input type="checkbox" class="form-checkbox" name="" value="1" id="">
名前と値の属性がチェックボックスに適用されていない問題は何ですか?
解決
名前と値は、フォームAPIを使用する場合、属性を使用して設定できるものではありません。名前はフォームアイテムのキーに関連しているので、持っていた場合
$form['pony'] = $checkbox;
$form['yes'] = $checkbox;
最初のチェックボックスには名前が表示されます pony
2番目にはその名前があります yes
. 。チェックボックスの値は常に1ですが、100%確信がないと思います。
このフォームを適切に作成するためにすべきことは、フォーム定義でフォームのみを作成することです。このようなことをする:
$form = array();
$res = query('SELECT * FROM {mytable}');
while($row = db_fetch_array($res)){
$form[$row['id']] = array('#tree' => TRUE);
$form[$row['id']]['checkbox'] = array('#type' => 'checkbox');
$form[$row['id']]['other_field_1'] = array('#value' => $row['other_field_1']);
$form[$row['id']]['other_field_2'] = array('#value' => $row['other_field_1']);
}
return $form;
このようなことをすると、フォームのテーマ関数でテーブルを作成できます。テーマ関数のフォーム要素をレンダリングすると、正しい名前が付けられます。
所属していません StackOverflow