代码之家  ›  专栏  ›  技术社区  ›  Shoaib Nawaz

表格格式的Drupal窗体

  •  0
  • Shoaib Nawaz  · 技术社区  · 14 年前

    我正在尝试呈现表单的表格布局(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="">
    

    什么是名称和值属性未应用于复选框的问题?

    1 回复  |  直到 12 年前
        1
  •  2
  •   googletorp    14 年前

    使用表单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;
    

    执行类似的操作时,可以在表单的主题函数中创建表。在主题函数中呈现表单元素,将为它们提供正确的名称。