Mengapa widget bidang tidak membentuk elemen?


11

Elemen formulir sering terpisah dari widget bidang, namun mereka menerapkan fungsi yang sangat mirip.

Kadang-kadang, fungsionalitasnya juga merayap di kedua apis, seperti dalam pertanyaan ini: Apakah menampilkan Formulir Widget Bidang yang berfungsi mungkin?

Tampaknya logis bagi saya bahwa widget bidang bisa menjadi elemen bentuk, yang juga memetakan langsung ke beberapa penyimpanan yang mendasarinya, terutama karena bentuk api sudah ada di tempat ketika api bidang muncul.

Saya bertanya-tanya mengapa ini tidak terjadi.

Sunting: Seperti yang ditunjukkan oleh kiamlaluno di bawah ini, menurut dokumen resmi, widget adalah elemen Form API, yang berarti saya perlu sedikit mengedit pertanyaan saya.

Saya jadi bertanya-tanya tentang ini, karena saya ingin menggunakan widget penandaan Core sebagai elemen bentuk. Namun sejauh pengetahuan saya, tidak ada cara mudah untuk melakukan itu. Meskipun dokumen mengklaim widget adalah elemen, itu tampaknya tidak selalu benar.

Jika widget dinyatakan sebagai

function hook_widget_info() {
  return array('my_widget' => array(
    'base element' => 'some_form_element_machine_name',
  ))
}

maka definisi elemen akan terpisah dari widget, sehingga dapat digunakan dengan dua cara, tetapi saat ini tidak demikian.

Sunting 2: Permintaan fitur dibuka .


Di Drupal 8, widget sekarang diimplementasikan dengan kelas; widget dasar pada dasarnya adalah kelas dari mana kelas widget diturunkan.
kiamlaluno

Pertanyaan serupa adalah, "Mengapa taksi bukan mobil?" atau "Mengapa jalanan bukan sepotong aspal?" atau "Mengapa buku bukan novel?". Sebuah buku bisa menjadi novel, tetapi novel yang sama juga bisa ada di penyimpanan digital. Atau bisa hidup dalam buku yang lebih besar bersama novel-novel lain. Sebuah buku, walaupun hanya memuat satu novel, memiliki sifat fisik yang tidak tergantung pada isinya.
donquixote

Jawaban:


11

Tampaknya logis bagi saya bahwa widget bidang bisa menjadi elemen bentuk, yang juga terjadi memetakan langsung ke beberapa penyimpanan yang mendasarinya

Widget adalah elemen formulir; mereka hanya memiliki kemampuan tambahan yang tidak dimiliki elemen bentuk. Dokumentasi tentang API widget bidang menjelaskan widget menggunakan kata-kata berikut:

Widget adalah elemen API Formulir dengan kemampuan pemrosesan tambahan. Kait widget biasanya disebut oleh API Lampirkan Bidang selama pembuatan struktur formulir bidang dengan field_attach_form () .

Setiap widget diimplementasikan menggunakan setidaknya satu elemen formulir, tetapi modul yang mengimplementasikan widget perlu menerapkan beberapa kait yang tidak diperlukan dari elemen formulir:

Sementara yang pertama dapat dianggap setara dengan hook_element_info () , dua lainnya adalah pengait tambahan yang diperlukan agar widget berfungsi. Ini berkat informasi yang diteruskan ke hook_field_widget_form()widget yang diberikan.

Drupal bisa menerapkan widget yang memperluas properti yang dikembalikan hook_element_info(), tetapi kenyataannya adalah widget dan elemen bentuk adalah dua hal berbeda yang digunakan dalam kasus yang berbeda; anggap widget jenis elemen bentuk yang lebih khusus.
Jika hook_element_info()digunakan juga untuk mengembalikan informasi tentang widget, kode yang mencari widget perlu menyaring elemen formulir untuk menyimpan informasi widget; sebaliknya, kode yang mencari elemen formulir harus menyaring informasi widget. Mempertimbangkan seberapa sering informasi itu diperlukan, itulah alasan mengapa dua kait berbeda diperlukan.

Drupal bisa menggunakan properti "elemen dasar" yang dikembalikan hook_field_widget_info(). Jika properti semacam itu belum diimplementasikan, itu berarti tidak ada yang mengusulkannya, atau telah diusulkan, tetapi itu tetap berguna pada beberapa kasus terbatas.

Adapun Drupal 8, hal-hal berubah sedikit, dan elemen bentuk adalah objek implementasi kelas FormElementInterface, sedangkan widget lapangan adalah objek implementasi kelas WidgetInterface. Antarmuka yang umum di antara antarmuka itu adalah PluginInspectionInterface, yang tidak mendefinisikan metode apa pun untuk merender elemen bentuk, yang sebaliknya didefinisikan dari RenderElement, kelas abstrak.
Karena sekarang widget diimplementasikan dengan kelas, widget dasar pada dasarnya adalah kelas dasar dari mana kelas widget diturunkan; tidak perlu properti untuk menentukan widget dasar dari widget.


Sangat menarik, saya tidak tahu ini. +1. Namun saya telah memperbarui pertanyaan saya, karena Anda membuat saya lebih bingung;)
Letharion

Permintaan fitur dibuka . :)
Letharion
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.