D6:表单中的drupal_render会导致各种问题(默认值,ID,date_select)

时间:2013-04-26 14:39:41

标签: drupal drupal-fapi drupal-render

我有一个drupal_render的问题(假设drupal_render是我获得我想要的正确方法 - 随意纠正我=。)

我正在建立一个表格。由于FAPI没有提供“表格”字段,我想自己制作一个。我的方法:使用theme() - function,特别是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-和名称 - 属性为空。我在drupal网站上找到了一些东西,并且用它做了我的和平(虽然我不明白),现在手动设置这些属性。
  • 忽略文本字段的默认值。这些字段是空的。当我让drupal_get_form呈现该字段时,default_value显示。这里的人建议改为设置#value-property,但我再次读到这是完全不同的东西,可能会导致问题。
  • date_select-Field未完整呈现。包装器在那里,然而选择字段出现在代码之外,就在表格之前(即它出现在代码中的位置)。

让我们希望它是=) 有人可以帮忙吗?我做错了什么?

1 个答案:

答案 0 :(得分:0)

我的一位同事指出,在表单函数中使用drupal_render并不是一个好主意,因为它会从整个验证和提交过程中删除部分表单。

因此,找出函数不能按预期工作的原因是徒劳的。更好的方法是简单地生成必要数量的表单字段,让它们在drupal_get_form()中呈现,然后使用表单主题 - 函数将它们放入表中。

愚蠢的我=)