我有一个问题与drupal_render(假设drupal_render是正确的方式为我得到我想要的-随时纠正我=)。
我正在构建一个表单。由于FAPI没有提供"table"字段,所以我想自己创建一个。我的方法是:使用theme()函数,特别是theme('table',…)或theme_table(),并用各自的表单字段填充它(稍后添加AHAH功能的意图)。这迫使我使用drupal_render作为表格单元格的值,这会导致表单元素出现一些问题。
表收集用户当前正在编辑的组织按年的员工人数。代码如下所示:
$form['employees'] = array(
'#type' => 'fieldset',
'#title' => t('Employees'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$employee_query = db_query("SELECT * FROM {employees} WHERE id_organisation = %d", $org['idoOrganisation']);
$employee = array();
while ($row = db_fetch_array($employee_query)) {
$employee[] = $row;
}
$header = array(
t('Year'),
t('Total'),
t('Internal'),
t('External'),
t('Aerospace')
);
$em_delta = 0;
$rows = array();
foreach($employee as $em_delta => $value) {
$form['employees'][$em_delta]['year'] = array(
'#title' => '',
'#type' => 'date_select', // Comes with the date module
'#date_format' => $format_year,
'#date_label_position' => 'within',
'#date_year_range' => '-50:+3',
'#default_value' => $value[$em_delta]['year'],
'#id' => 'edit-employees-' . $em_delta . '-year', // Allready a quickfix, since the form is rendered without id
'#name' => 'employees['.$em_delta.'][year]', // Same here
);
$form['employees'][$em_delta]['total'] = array(
'#type' => 'textfield',
'#title' => '',
'#default_value' => $value['total'],,
'#size' => 1,
'#id' => 'edit-employees-' . $em_delta . '-total',
'#name' => 'employees['.$em_delta.'][total]'
);
$form['employees'][$em_delta]['internal'] = array(
'#type' => 'textfield',
'#title' => '',
'#default_value' => $value[$em_delta]['internal'],
'#size' => 1,
'#id' => 'edit-employees-' . $em_delta . '-internal',
'#name' => 'employees['.$em_delta.'][internal]',
);
$form['employees'][$em_delta]['external'] = array(
'#type' => 'textfield',
'#title' => '',
'#default_value' => $value[$em_delta]['external'],
'#size' => 1,
'#id' => 'edit-employees-' . $em_delta . '-external',
'#name' => 'employees['.$em_delta.'][external]',
);
$form['employees'][$em_delta]['aero'] = array(
'#type' => 'textfield',
'#title' => '',
'#default_value' => $value[$em_delta]['aero'],
'#size' => 1,
'#id' => 'edit-employees-' . $em_delta . '-aero',
'#name' => 'employees['.$em_delta.'][aero]',
);
$rows[] = array(
drupal_render($form['employees'][$em_delta]['year']),
drupal_render($form['employees'][$em_delta]['total']),
drupal_render($form['employees'][$em_delta]['internal']),
drupal_render($form['employees'][$em_delta]['external']),
drupal_render($form['employees'][$em_delta]['aero']),
);
}
$form['employees']['table'] = array (
'#value' => theme('table', $header, $rows, array(), NULL)
);
以下是我遇到的问题:
- 表单元素的ID-和name -属性为空。我在drupal网站上找到了一些关于这个的东西,并与它和平(尽管我不明白),现在手动设置这些属性。
- 忽略文本字段的默认值。田地是空的。当我让drupal_get_form呈现字段时,显示default_value。这里有人建议设置#value-property,但我又读到这是完全不同的东西,可能会导致问题。
- date_select-Field不是完整呈现的。包装器在那里,选择字段出现在代码之外,就在表之前(即它出现在代码中的地方)。
让我们希望是它=)有人能帮忙吗?我做错了什么?
我的一位同事指出,在表单函数中使用drupal_render根本不是一个好主意,因为它从验证和提交的整个过程中删除了部分表单。
因此,找出函数没有按预期工作的原因是徒劳的。更好的方法是简单地生成必要数量的表单字段,让它们在drupal_get_form()中呈现,然后使用forms theme-function将它们放入表中。
愚蠢的我=)