Il valore vuoto “- Seleziona -” non viene visualizzato per i campi di selezione con requisito di stati


8

Quando creo una casella di selezione standard utilizzando l'API del modulo Drupal 7, il primo valore (anche quello selezionato in un nuovo "modulo vuoto") è <option selected="selected" value="">- Select -</option>. Questo valore non è specificato nella definizione del modulo e non sto modificando il modulo. (Questo va bene)

Tuttavia, quando creo una seconda casella di selezione che dipende dal primo utilizzo #states, non ha alcun valore predefinito. Per le forme complesse con dipendenze multiple questa incoerenza è un problema.

Una definizione del modulo di esempio è la seguente:

function sb_quickquote_test_form($form, &$form_state, $post=array()) {

  $fields['first_select'] = array(
    '#type'             => 'select',
    '#title'            => 'First select box',
    '#options'          => Array('First', 'Second', 'Third'),
    '#required'         => TRUE,
  );

  $fields['dependent_delect'] = array(
    '#type'             => 'select',
    '#title'            => 'Dependent select box',
    '#options'          => Array('Something', 'Another thing', 'Something else', 'Final thing'),
    '#states'           => Array(
      'visible' => Array('select[name=first_select]' => array('value' => '2')),
      'required' => Array('select[name=first_select]' => array('value' => '2')),
    ),
  );

  $fields['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
  );
  return $fields;
}

In questo semplice esempio, abbiamo 2 caselle di selezione e un pulsante di invio. Le due caselle selezionate vengono visualizzate come:

 ______________      ________________
| - Select - |v|    | Something    |v|
`--------------'    `----------------'
| - Select -   |    | Something      | <- no empty option
| First        |    | Another thing  |
| Second       |    | Something else |
| Third        |    | Final thing    |
 --------------      ----------------

(A causa #statesdell'impostazione, la seconda casella di selezione appare solo quando la prima casella di selezione ha "Terzo" selezionato)

Questa incoerenza sta causando problemi in una situazione in cui stiamo generando forme dinamiche complesse con campi interdipendenti.

Qualcuno ha idea del perché ai campi vengano offerte opzioni incoerenti e quale sia l'approccio migliore per aggirare il problema?

Risposte:


20

Per forzare l '"opzione vuota", assegnala con qualcosa del tipo:

"#empty_option"=>t('- Select -'),

Grazie per la risposta. Non ho Drupal installato da nessuna parte per verificarlo, quindi dovrò prendere la tua parola e tenere d'occhio i voti degli altri!
Adamnfish,

Questa correzione funziona anche per Drupal 8
Scott Joudry,

2

è necessario modificare questo:

 'visible' => Array('select[name=first_select]' => array('value' => '2')),
 'required' => Array('select[name=first_select]' => array('value' => '2')),

seleziona : input

il codice corretto è:

 'visible' => Array(':input[name="first_select"]' => array('value' => '2')),
 'required' => Array(':input[name="first_select"]' => array('value' => '2')),

1

Per estendere la risposta doterobcn puoi anche impostare il valore vuoto (la chiave) dell'opzione vuota.

In Drupal 8:

$form['country'] = [
  '#type' => 'select',
  '#multiple' => FALSE,
  '#title' => t('Country:'),
  '#required' => FALSE,
  '#options' => $countries,
  '#default_value' => 'FR',
  '#empty_option' => t('- None -'),
  '#empty_value' => '_none',
];

Che darà:

<option value="_none">- None -</option>
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.