Saya mencoba membuat widget bidang yang mirip dengan widget referensi istilah normal dengan satu perbedaan utama. Pengguna harus dapat menambahkan beberapa istilah taksonomi baru pada saat yang sama, ini mungkin menunjukkan lebih baik:
Saya sampai pada titik di mana fungsinya mirip dengan apa yang disediakan modul taksonomi / opsi / daftar (mis. Kotak centang / radio ditampilkan, hemat, dll.)
Inilah sedikit kode penting yang saya gunakan di hook_field_widget_form()
:
$element += array(
'#type' => $multiple ? 'checkboxes' : 'radios',
'#default_value' => $multiple ? $default_value : reset($default_value),
'#options' => $options,
'#value_key' => $value_key,
'#element_validate' => array('options_field_widget_validate'),
'#properties' => $properties,
);
Apa yang melempar saya ke sini adalah $ element bukan array form seperti biasa, jadi saya tidak yakin bagaimana menambahkan textfield dan dan tombol - terutama karena nilainya tidak dimaksudkan untuk disimpan. Apa cara terbaik untuk menambahkan bidang ini ke widget saya?
Sedangkan untuk menambahkan Javascript diperlukan, apakah saya benar berpikir saya harus menggunakan #ajax yang memanggil fungsi yang membangun kembali #options untuk kotak centang?
Terima kasih sebelumnya!
EDIT - Pertanyaan awal saya cukup samar, berikut beberapa detail lebih lanjut tentang apa yang saya coba:
$element += array(
'#type' => 'fieldset',
'#delta' => $delta,
);
$element['value'] = array(
'#type' => $multiple ? 'checkboxes' : 'radios',
'#default_value' => $multiple ? $default_value : reset($default_value),
'#options' => $options,
'#value_key' => $value_key,
'#element_validate' => array('options_field_widget_validate'),
'#properties' => $properties,
);
$element['text'] = array(
'#type' => 'textfield',
'#title' => t('Add another'),
'#weight' => 5,
);
Ini adalah penggabungan dari berbagai contoh yang pernah saya lihat, dan sepertinya membuat saya lebih dekat. Masalahnya adalah ketika saya mengirimkan formulir entitas saya mendapatkan kesalahan berikut:
Pemberitahuan: Indeks tidak terdefinisi: tid di taxonomy_field_is_empty () (baris 1402 dari modul \ taxonomy \ taxonomy.module).
Saya telah melihat lebih dekat fungsi ini dan berharap $item
memiliki struktur $item = array('tid', 2)
. Ketika menggunakan kode di atas tampaknya ada delta yang datang dari suatu tempat dan struktur $item
akhirnya menjadi $item = array(0, array('tid', 2)
. Saya tidak tahu dari mana '0' berasal?
EDIT LAIN
Saya dapat memperbaiki kesalahan di atas dengan kode berikut dengan mengubah $ element seperti ini:
$element += array(
'#type' => 'fieldset',
'#process' => array('taxonomy_free_entry_ignore_parent'),
);
dan menambahkan fungsi:
function taxonomy_free_entry_ignore_parent(&$form, &$form_state, $complete) {
array_pop($form['#parents']);
return $form;
}
Ketika saya menyimpan entitas, saya menerima pesan yang mengatakan bahwa itu telah disimpan. Ketika saya memeriksa tabel untuk bidang, itu tidak disimpan. Apa yang saya lakukan salah?