表格布局中的Drupal形式
-
10-10-2019 - |
题
我正在尝试为一个表格渲染表格布局(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
第二个将有名字 yes
. 。我相信复选框的价值始终为1,但我不确定。
正确使此形式正确,您应该做的是仅在表单定义中创建表单。做这样的事情:
$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