Domanda

Sto cercando di rendere un layout tabulare (tabella HTML) per una forma tale che la prima cella contiene una casella di controllo.

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

Ma la casella di controllo reso dispone di uscita

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

Qual è il problema che nome e valore attributi non sono sempre applicati su caselle di controllo?

È stato utile?

Soluzione

Il nome e il valore non è qualcosa che si può impostare utilizzando attributi, quando si utilizza il modulo API. Il nome è relativo alla chiave della voce modulo, quindi se si ha

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

La prima casella di controllo avrà il nome del pony mentre il secondo avrà il nome di yes. Credo che il valore per le caselle di controllo è sempre 1, ma non sono sicuro al 100%.

Che cosa si dovrebbe fare, per rendere questa forma correttamente, è quello di creare solo la forma, nella definizione del modulo. Fare qualcosa di simile:

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

fare qualcosa di simile, è possibile creare la tabella in una funzione tema per il modulo. Rendering gli elementi del modulo nella funzione tema, darà loro il nome corretto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top