Nilai kosong "- Pilih -" tidak muncul untuk bidang pilih dengan persyaratan status

8

Ketika saya membuat kotak pilih standar menggunakan Drupal 7 form API, nilai pertama (juga yang dipilih pada 'formulir kosong') adalah <option selected="selected" value="">- Select -</option>. Nilai ini tidak ditentukan dalam definisi bentuk dan saya tidak mengubah bentuk. (Ini baik-baik saja)

Namun, ketika saya membuat kotak pilih kedua yang tergantung pada penggunaan pertama #states, itu tidak memiliki nilai default seperti itu. Untuk bentuk kompleks dengan banyak dependensi, inkonsistensi ini merupakan masalah.

Contoh definisi bentuk adalah sebagai berikut:

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

Dalam contoh sederhana ini, kami memiliki 2 kotak pilih dan tombol kirim. Dua kotak pilih ditampilkan sebagai:

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

(Karena #statespengaturan, kotak pilih kedua hanya muncul ketika kotak pilih pertama memiliki "Ketiga" dipilih)

Ketidakkonsistenan ini menyebabkan masalah dalam situasi di mana kita menghasilkan bentuk dinamis yang kompleks dengan bidang yang saling bergantung.

Adakah yang tahu mengapa ladang diberi opsi yang tidak konsisten dan apa pendekatan terbaik untuk mengatasi masalah tersebut?

Adamnfish
sumber

Jawaban:

20

Untuk memaksa "opsi kosong", tetapkan dengan sesuatu seperti:

"#empty_option"=>t('- Select -'),
doterobcn
sumber
Terima kasih atas jawabannya. Saya tidak punya Drupal mengatur di mana saja untuk memeriksa ini jadi saya harus mengambil kata-kata Anda untuk itu dan mengawasi suara dari orang lain!
adamnfish
Perbaikan ini juga berfungsi untuk Drupal 8
Scott Joudry
2

Anda perlu mengubah ini:

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

pilih untuk : input

kode yang benar adalah:

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

Untuk memperluas jawaban doterobcn Anda juga dapat mengatur nilai kosong (kunci) dari opsi kosong Anda.

Dalam 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',
];

Yang akan memberi:

<option value="_none">- None -</option>
romain ni
sumber