2010-10-21 65 views
0

我想呈現一個表格佈局(html表格),使第一個單元格包含一個複選框。表格式佈局的Drupal表格

$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=""> 

那是什麼名稱和值的屬性沒有得到複選框上應用的問題?

回答

2

當使用表單API時,您可以使用屬性設置名稱和值。所以,如果你有

$form['pony'] = $checkbox; 
$form['yes'] = $checkbox; 

的第一個複選框將有pony的名字,而第二個將有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; 

做這樣的事情,你可以爲形式的主題函數創建表。在主題函數中渲染表單元素,會給它們正確的名稱。