Question

Je suis en train de rendre une disposition tabulaire (tableau html) pour une forme telle que la première cellule contient une case à cocher.

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

Mais la case a rendu sortie

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

Quelle est la question que les attributs de nom et la valeur ne sont pas appliqués se sur les cases à cocher?

Était-ce utile?

La solution

Le nom et la valeur ne sont pas quelque chose que vous pouvez définir à l'aide des attributs, lorsque vous utilisez l'API de formulaire. Le nom est lié à la clé de l'élément de forme, donc si vous aviez

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

La première case aura le nom de pony alors que le second aura le nom de yes. Je crois que la valeur est toujours 1 cases, mais je ne suis pas sûr à 100%.

Ce que vous devez faire, pour faire de cette forme correctement, est de créer seulement la forme, dans la définition de la forme. Faire quelque chose comme ceci:

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

Faire quelque chose comme ça, vous pouvez créer la table en fonction de thème pour la forme. Le rendu des éléments de formulaire dans la fonction thème, leur donnera le nom correct.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top