Caselle di controllo: come posso impostare i valori predefiniti o mostrare i valori definiti dall'utente usando l'API Form? [chiuso]


7

Sto usando un elemento checkboxes all'interno di un modulo nel modulo che ho iniziato a sviluppare per Drupal 7. Questo è il mio primo tentativo di sviluppo del modulo e utilizzo dell'API del modulo. Sto creando un elenco di caselle di controllo che elencano tutti i tipi di contenuto di un sito specifico. Un array di tutti i tipi di contenuto può essere ottenuta utilizzando la seguente: $nodeTypesRaw=node_type_get_names();. Si ottiene una matrice con i nomi macchina dei tipi di contenuto come chiavi e i nomi leggibili umani come valori.

Per impostazione predefinita, desidero selezionare tutte le caselle di controllo e quando viene inviato il modulo. Come ci riesco? Le pagine API del modulo sul sito drupal non sono molto utili per quanto riguarda l'impostazione dei valori predefiniti per le caselle di controllo.

$nodeTypesRaw=node_type_get_names();
$nodeMachineNames=array_keys($nodeTypesRaw);
$form['process_comments']['custommod_published_comments_select_node_types']['custommod_published_comments_node_types_checkboxes']=array(
          '#deafult_value'=>$nodeMachineNames,
          '#options'=>$nodeTypesRaw,
          '#type'=>'checkboxes',
);

Inizialmente ho iniziato con il codice sopra, ma non funzionerà. Visualizza l'elenco delle caselle di controllo, ma non sono selezionate per impostazione predefinita. Tuttavia, la variabile ottiene l'invio del modulo (controllato tramite drush e var_dump).


2
Non lo #default_valueè #deafult_value. FA non AF.
Mołot,

Risposte:


16

Da Drupal.org :

$form['element_id'] = array(
  '#type' => 'checkboxes',
  '#options' => array(1 => "One", 2 => "Two", 3 => "Three"),
  '#default_value' => array(1, 3),
);

Il valore predefinito è impostato come un array che rappresenta le chiavi delle opzioni selezionate.

Guardando il codice nella tua domanda, il problema è con l'ortografia. stai impostando '#deafult_value'quando vuoi impostare '#default_value'.


Un array di tutti i tipi di contenuto può essere ottenuta utilizzando la seguente: $nodeTypesRaw=node_type_get_names();. Si ottiene una matrice con i nomi macchina dei tipi di contenuto come chiavi e i nomi leggibili umani come valori. Quando imposto '# default_value` usando la variabile $nodeMachineNames=array_keys($nodeTypesRaw);, le caselle di controllo rimangono deselezionate.
bcosynot,

1
@ vr3690 No, non hai impostato il valore predefinito. Vedi il commento sotto la tua domanda o aggiorna alla mia risposta.
Mołot,

10

È necessario fornire una matrice di tasti opzione (non valori) come valore predefinito, ad es

$options = array(
  'option_1' => t('Option 1'),
  'option_2' => t('Option 2'),
  'option_3' => t('Option 3'),
);

$defaults = array_keys($options);

$form['checkboxes'] = array(
  '#type' => 'checkboxes',
  '#title' => t('Something'),
  '#options' => $options,
  '#default_value' => $defaults,
);

Ciao, sto già usando un codice simile. Ho modificato la mia risposta e aggiunto la stessa ad essa. Questo non funziona.
bcosynot,

1
Funziona bene per me in un'installazione vuota, sei sicuro di non avere un refuso #default_valuecome suggerisce @ Mołot
Clive

Mi chiedevo, è cambiato ad un certo punto? Perché sto guardando ora form_process_checkboxe form_process_checkboxessu Drupal 7 e non esiste alcun meccanismo che permetta che funzioni, e ovviamente non funziona per me. github.com/drupal/drupal/blob/7.x/includes/form.inc#L3270-L3351
Łukasz Zaroda

Non che io conosca @ ŁukaszZaroda ... se guardi ad user_account_formesempio, lo stesso metodo viene usato lì per i ruoli
Clive
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.