Alan widget'ları neden öğe oluşturmuyor?


11

Form öğeleri genellikle alan widget'larından ayrıdır, ancak çok benzer işlevler uygularlar.

Bazen, işlevleri şu soruda olduğu gibi iki API'de de sürünüyor: Çalışan bir Alan Widget Formunu tek başına görüntülemek mümkün müdür?

Olabilir Widget bir alanda bu bana mantıklı görünüyor olabilir bir form öğesi, o da saha api yaklaşık geldiğinde formu api yer zaten Çünkü özellikle bazı temel depolama doğrudan eşleme olur.

Neden böyle olmadığını merak ediyorum.

Düzenleme: As resmi dokümanlar göre, aşağıda kiamlaluno tarafından işaret, widget'lar şunlardır Ben düzenlemek için sorumu biraz ihtiyacım vasıta Formu API elemanları.

Bunu merak ettim, çünkü çekirdek etiketleme widget'ını bir form öğesi olarak kullanmak istedim. Ancak bilgim dahilinde bunu yapmanın kolay bir yolu yoktur. Widget'ları iddia eden dokümanlar öğelere rağmen , bu mutlaka doğru gibi görünmüyor.

Widget olarak bildirildiyse

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

öğe tanımı pencere öğesinden ayrı olur, böylece her iki yönde de kullanılabilir, ancak şu anda durum böyle değildir.

Düzenle 2: Özellik isteği açıldı .


Drupal 8'de, widget'lar artık sınıflarla birlikte uygulanmaktadır; temel widget temel olarak bir widget sınıfının türetildiği sınıftır.
kiamlaluno

Benzer sorular "Taksi neden araba değil?" veya "Bir sokak neden asfalt değil?" veya "Bir kitap neden roman değil?". Bir kitap bir roman olabilir, ancak aynı roman dijital depolamada da bulunabilir. Veya diğer romanlarla birlikte daha büyük bir kitapta yaşayabilir. Bir kitap, tam olarak bir roman içermesine rağmen, içeriğinden bağımsız bazı fiziksel özelliklere sahiptir.
donquixote

Yanıtlar:


11

Bir alan widget'ının bir form öğesi olabileceği mantıklı görünüyor, bu da doğrudan temeldeki bir depolama birimiyle eşleşiyor

Widget'lar form öğeleridir; bir form öğesinin sahip olmadığı ek yeteneklere sahiptirler. Alan widget'ı API'sı ile ilgili belgeler , aşağıdaki kelimeleri kullanarak widget'ları açıklar:

Pencere öğeleri, ek işleme yeteneklerine sahip Form API öğeleridir. Widget kancaları, field_attach_form () ile alan formu yapısının oluşturulması sırasında genellikle Alan Ekleme API'si tarafından çağrılır .

Her widget en az bir form öğesi kullanılarak uygulanır, ancak widget'ları uygulayan bir modülün bir form öğesinden gerekli olmayan bazı kancaları uygulaması gerekir:

Birincisi hook_element_info () eşdeğeri olarak kabul edilebilirken , diğer ikisi widget'ların çalışması için gerekli ek kancalardır. hook_field_widget_form()Bir widget'ın iletildiği bilgiler sayesinde .

Drupal, döndürülen özellikleri genişleten widget'lar uygulayabilirdi hook_element_info(), ancak gerçek şu ki, widget ve form öğesi farklı durumlarda kullanılan iki farklı şeydir; widget'ı daha özel bir form öğesi türü olarak kabul edin.
Eğer hook_element_info()aparatları hakkında bilgi dönmek için de kullanıldı, widget'lar arayan kod Widget bilgilerini tutmak için form öğeleri filtrelemek gerekir; Tersi durumda, form öğelerini arayan kodun widget bilgilerini filtrelemesi gerekir. Bu bilginin ne kadar gerekli olduğu göz önüne alındığında, iki farklı kancanın gerekli olmasının nedeni budur.

Drupal, döndürülen bir "temel öğe" özelliği kullanabilirdi hook_field_widget_info(). Böyle bir mülk uygulanmadıysa, kimse bunu teklif etmediği veya önerildiği anlamına gelir, ancak birkaç sınırlı durumda yararlı olduğu düşünülmektedir.

Drupal 8'e gelince, işler biraz değişti ve form öğeleri sınıfların uygulandığı nesnelerken, FormElementInterfacealan widget'ları sınıfların uygulandığı nesnelerdir WidgetInterface. Bu arabirimler arasında ortak PluginInspectionInterfaceolan arabirim, RenderElementsoyut bir sınıftan tanımlanmış bir form öğesini oluşturmak için herhangi bir yöntem tanımlamaz .
Widget'lar sınıflarla uygulandığından, temel widget temel olarak bir widget sınıfının türetildiği temel sınıftır; bir widget'ın temel widget'ini tanımlamak için bir özelliğe ihtiyaç yoktur.


Çok ilginç, bunu bilmiyordum. +1. Ancak beni daha karışık hale getirdiğim için sorumu güncelledim;)
Letharion

Özellik isteği açıldı . :)
Letharion
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.