Form con campi orizzontali e array di valori
Buonasera,
sto realizzando una form estendendo la classe FormBase..
Dato che la form mette ogni campo su una nuova riga, se io volessi mettere 2 o 3 campi
sulla stessa riga come devo fare ?
Grazie mille
Risposte
Potresti organizzarti con le
Potresti organizzarti con le classi css o anche aggiungerle agli elementi una classe e poi formattandola (se usi bootstrap o un framework css puoi iniettare le sue classi).
...
$form['nome_elemento']['#attributes']['class'][] = 'col-md-4';
...
oppure usando le chiavi #prefix / #suffix
...
$form['nome_elemento_1']['#prefix'] = '<table><tr><td>';
$form['nome_elemento_1']['#suffix'] = '</td>';
$form['nome_elemento_2']['#prefix'] = '<td>';
$form['nome_elemento_2']['#suffix'] = '</td></tr></table>';
...
Alla fine ho fatto con il
Alla fine ho fatto con il table come hai detto tu..
Nella form ho un campo cosi dichiarato
$form['standard'] = [
'#type' => 'textfield',
'#prefix' => '<tr><td style="width:10%;">',
'#suffix' => '</td>',
'#attributes' => array(
'style'=>'height:2%'
),
];
avrei necessità di dichiarloo come un array... normalmente in html farei cosi
<input type="text" id="testo" name="testo[]" value="" />
Per farlo con le api form di drupal come devo fare?
Nella form ho un campo e l'utente ne può aggiungere n di questi, quindi li voglio memorizzare in un vettore di campi di testo in modo tale che quando faccio submit poi ciclo ed elaboro ....
come devo fare con drupal ?
Puoi provare ad usare la key
Puoi provare ad usare la key #tree di un contenitore dei campi multipli. Un esempio pratico:
<?php
...
$form['utenti'] = [
'#type' => 'container',
'#tree' => TRUE
];
for ($i=0; $i<4; $i++) {
$form['utenti'][$i]['nome'] = ['#type' => 'textfield', '#title' => "Nome utente $i", '#default_value' => "Nome utente $i"];
$form['utenti'][$i]['cognome'] = ['#type' => 'textfield', '#title' => "Cognome utente $i", '#default_value' => "Cognome utente $i"];
}
...
?>
nel submit avrai un array
<?php
...
foreach($form_state->getValue('utenti') as $i => $utente) {
$this->messenger()->addMessage("Utente $i " . $utente['nome'] . " " . $utente['cognome']);
}
...
?>