Tại sao các widget trường không hình thành các yếu tố?


11

Các phần tử biểu mẫu thường tách biệt với các widget trường, nhưng chúng thực hiện chức năng rất giống nhau.

Đôi khi, chức năng của chúng cũng len lỏi qua hai apis, chẳng hạn như trong câu hỏi này: Có thể tự mình hiển thị Biểu mẫu Tiện ích Trường hoạt động không?

Đối với tôi có vẻ hợp lý rằng một widget trường có thể một thành phần của biểu mẫu, điều này cũng xảy ra để ánh xạ trực tiếp đến một số lưu trữ cơ bản, đặc biệt là khi api mẫu đã có sẵn khi api trường xuất hiện.

Tôi tự hỏi tại sao đây không phải là trường hợp.

Chỉnh sửa: Như được chỉ ra bởi kiamlaluno bên dưới, theo các tài liệu chính thức, các widget các thành phần API Form, có nghĩa là tôi cần chỉnh sửa câu hỏi của mình một chút.

Tôi đã tự hỏi về điều này, bởi vì tôi muốn sử dụng tiện ích gắn thẻ Core làm thành phần biểu mẫu. Theo hiểu biết tốt nhất của tôi, tuy nhiên, không có cách nào dễ dàng để làm điều đó. Mặc dù các tài liệu tuyên bố các vật dụng là các yếu tố, điều đó dường như không nhất thiết là đúng.

Nếu một widget được khai báo là

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

sau đó định nghĩa phần tử sẽ tách biệt với widget, để nó có thể được sử dụng trên cả hai cách, nhưng hiện tại đây không phải là trường hợp.

Chỉnh sửa 2: Yêu cầu tính năng đã mở .


Trong Drupal 8, các widget hiện được triển khai với các lớp; tiện ích cơ bản về cơ bản là lớp mà từ đó một lớp widget được bắt nguồn.
kiamlaluno

Câu hỏi tương tự sẽ là "Tại sao taxi không phải là xe hơi?" hoặc "Tại sao đường phố không phải là một mảnh nhựa đường?" hoặc "Tại sao một cuốn sách không phải là một cuốn tiểu thuyết?". Một cuốn sách có thể là một cuốn tiểu thuyết, nhưng cùng một cuốn tiểu thuyết cũng có thể tồn tại trên bộ lưu trữ kỹ thuật số. Hoặc nó có thể sống trong một cuốn sách lớn hơn cùng với các tiểu thuyết khác. Một cuốn sách, ngay cả khi nó chứa chính xác một cuốn tiểu thuyết, có một số tính chất vật lý độc lập với nội dung của nó.
donquixote

Câu trả lời:


11

Nó có vẻ hợp lý với tôi rằng một widget trường có thể là một thành phần của biểu mẫu, điều đó cũng xảy ra để ánh xạ trực tiếp đến một số lưu trữ cơ bản

Widgets là các yếu tố hình thức; họ chỉ có khả năng bổ sung mà một yếu tố hình thức không có. Tài liệu về API widget trường mô tả các widget bằng các từ sau:

Các widget là các thành phần API Form với khả năng xử lý bổ sung. Các hook widget thường được gọi bởi API Đính kèm trường trong khi tạo cấu trúc biểu mẫu trường với field_attach_form () .

Mọi widget đều được triển khai bằng ít nhất một phần tử biểu mẫu, nhưng một mô-đun triển khai một widget cần thực hiện một số hook không bắt buộc từ phần tử form:

Mặc dù cái đầu tiên có thể được coi là tương đương với hook_element_info () , hai cái còn lại là các hook bổ sung cần thiết cho các widget hoạt động. Nhờ thông tin được truyền đến hook_field_widget_form()mà một widget được hiển thị.

Drupal có thể đã triển khai các widget mở rộng các thuộc tính được trả về hook_element_info(), nhưng sự thật là một widget và phần tử biểu mẫu là hai thứ khác nhau được sử dụng trong các trường hợp khác nhau; xem xét một widget một loại phần tử biểu mẫu chuyên biệt hơn.
Nếu hook_element_info()cũng được sử dụng để trả về thông tin về các widget, mã tìm kiếm các widget sẽ cần lọc ra các thành phần của biểu mẫu để giữ thông tin của widget; ngược lại, mã tìm kiếm các thành phần của biểu mẫu sẽ lọc ra thông tin widget. Xem xét làm thế nào thay đổi thông tin đó là cần thiết, đó là lý do tại sao hai móc khác nhau là cần thiết.

Drupal có thể đã sử dụng một thuộc tính "phần tử cơ sở" được trả về từ đó hook_field_widget_info(). Nếu tài sản đó chưa được thực hiện, điều đó có nghĩa là không ai đề xuất nó, hoặc nó đã được đề xuất, nhưng nó đã được mặc dù có ích trong một số trường hợp hạn chế.

Đối với Drupal 8, mọi thứ thay đổi một chút và các phần tử biểu mẫu là đối tượng của các lớp thực hiện FormElementInterface, trong khi các widget trường là đối tượng của các lớp thực hiện WidgetInterface. Giao diện phổ biến giữa các giao diện đó là PluginInspectionInterface, không định nghĩa bất kỳ phương thức nào để hiển thị một phần tử biểu mẫu, thay vào đó được định nghĩa từ RenderElementmột lớp trừu tượng.
Vì bây giờ các widget được triển khai với các lớp, widget cơ bản là lớp cơ sở mà từ đó một lớp widget có nguồn gốc; không cần một thuộc tính để xác định widget cơ sở của widget.


Rất thú vị, tôi không biết điều này. +1. Tuy nhiên tôi đã cập nhật câu hỏi của mình, vì bạn làm tôi bối rối hơn;)
Letharion

Yêu cầu tính năng đã mở . :)
Letharion
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.