2010-10-21 77 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; 

做这样的事情,你可以为形式的主题函数创建表。在主题函数中渲染表单元素,会给它们正确的名称。