Drupal форма в виде таблицы

Я пытаюсь отобразить табличный макет (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="">

В чем проблема, что атрибуты имени и значения не применяются к флажкам?


person Shoaib Nawaz    schedule 21.10.2010    source источник


Ответы (1)


Имя и значение нельзя установить с помощью атрибутов при использовании 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;

Делая что-то подобное, вы можете создать таблицу в функции темы для формы. Отрисовка элементов формы в функции темы даст им правильное имя.

person googletorp    schedule 21.10.2010