Pregunta

Estoy tratando de hacer un diseño tabular (tabla html) de una forma tal que la primera célula contiene una casilla de verificación.

$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;

Pero toda la casilla rendido tiene salida

<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="">

¿Cuál es el problema que de nombre y valor atributos no están siendo aplicadas en las casillas de verificación?

¿Fue útil?

Solución

El nombre y el valor no es algo que se puede establecer mediante atributos, cuando se utiliza el formulario de API. El nombre está relacionado con la clave del elemento de formulario, así que si tenía

$form['pony'] = $checkbox;
$form['yes'] = $checkbox;

La primera casilla de verificación tendrá el nombre de pony mientras que el segundo tendrá el nombre de yes. Creo que el valor de casillas de verificación siempre es 1, pero no estoy seguro al 100%.

Lo que debe hacer, para hacer de este formulario correctamente, es crear sólo la forma, en la definición del formulario. Hacer algo como esto:

$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;

Hacer algo como esto, se puede crear la tabla en función tema de la forma. Haciendo que los elementos del formulario en la función de tema, les dará el nombre correcto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top