Kotak centang: bagaimana cara menetapkan nilai default atau menunjukkan nilai yang ditentukan pengguna menggunakan API Formulir? [Tutup]

7

Saya menggunakan elemen kotak centang dalam formulir di modul yang saya mulai kembangkan untuk Drupal 7. Ini adalah upaya pertama saya pada pengembangan modul dan menggunakan API Formulir. Saya membuat daftar kotak centang yang mencantumkan semua jenis konten situs tertentu. Array dari semua jenis konten dapat diperoleh dengan menggunakan berikut: $nodeTypesRaw=node_type_get_names();. Array dengan nama mesin dari tipe konten sebagai kunci dan nama yang dapat dibaca manusia saat nilainya diperoleh.

Secara default, saya ingin semua kotak centang dipilih dan ketika formulir dikirimkan. Bagaimana saya mencapainya? Halaman Form API di situs drupal tidak terlalu membantu dalam hal pengaturan nilai default untuk kotak centang.

$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',
);

Saya awalnya mulai dengan kode di atas, tetapi tidak akan berhasil. Itu memang menampilkan daftar kotak centang, tetapi mereka tidak dicentang secara default. Variabel tidak mendapatkan pengiriman formulir (diperiksa melalui drush dan var_dump).

bcosynot
sumber
2
Ini #default_value, tidak #deafult_value. FA bukan AF.
Mołot

Jawaban:

16

Dari Drupal.org :

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

Nilai default ditetapkan sebagai array yang mewakili kunci opsi yang dipilih.

Melihat kode dalam pertanyaan Anda, masalahnya ada pada ejaan. Anda mengatur '#deafult_value'kapan Anda ingin mengatur '#default_value'.

Mołot
sumber
Array dari semua jenis konten dapat diperoleh dengan menggunakan berikut: $nodeTypesRaw=node_type_get_names();. Array dengan nama mesin dari tipe konten sebagai kunci dan nama yang dapat dibaca manusia saat nilainya diperoleh. Ketika saya mengatur '# default_value` menggunakan variabel $nodeMachineNames=array_keys($nodeTypesRaw);, kotak centang tetap tidak dicentang.
bcosynot
1
@ vr3690 Tidak, Anda tidak menetapkan nilai default. Lihat komentar di bawah pertanyaan Anda, atau perbarui jawaban saya.
Mołot
10

Anda perlu memberikan larik kunci opsi (bukan nilai) sebagai nilai default, mis

$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,
);
Clive
sumber
Hai, saya sudah menggunakan kode yang sama. Saya telah mengedit jawaban saya dan menambahkan hal yang sama padanya. Ini tidak bekerja.
bcosynot
1
Bekerja dengan baik untuk saya dalam instalasi kosong, apakah Anda yakin Anda tidak mendapatkan kesalahan ketik #default_valueseperti yang disarankan @ Mołot
Clive
Hanya ingin tahu, apakah itu berubah di beberapa titik? Karena saya sedang melihat pada form_process_checkboxdan di form_process_checkboxesDrupal 7 dan tidak ada mekanisme yang memungkinkan ini bekerja, dan tentu saja itu tidak bekerja untuk saya. github.com/drupal/drupal/blob/7.x/includes/form.inc#L3270-L3351
Łukasz Zaroda
Bukannya saya tahu tentang @ ŁukaszZaroda ... jika Anda melihat user_account_formmisalnya, metode yang sama digunakan untuk peran
Clive