필드 위젯이 요소를 형성하지 않는 이유는 무엇입니까?


11

양식 요소는 종종 필드 위젯과 분리되어 있지만 매우 유사한 기능을 구현합니다.

때때로,이 질문에서와 같이 그들의 기능도 두 가지 API에 영향을 미칩니다 . 작동하는 필드 위젯 양식을 자체적으로 표시 할 수 있습니까?

수있는 위젯 필드 나에게 논리적 보인다 양식 요소, 즉 또한 필드 API에 대한 왔을 때 폼 API를 자리에 이미 특히 이후, 몇 가지 기본 스토리지에 직접 매핑 발생합니다.

왜 이것이 사실이 아닌지 궁금합니다.

편집 : 공식 문서에 따르면 아래의 kiamlaluno가 지적한 것처럼 위젯 Form API 요소이므로 질문을 조금 편집해야합니다.

Core tagging widget을 폼 요소로 사용하고 싶었 기 때문에 이것에 대해 궁금해했습니다. 그러나 내가 아는 한, 쉬운 방법은 없습니다. 문서가 위젯 이라고 주장 하는 요소 에도 불구하고 반드시 사실 인 것처럼 보이지는 않습니다.

위젯이 다음과 같이 선언 된 경우

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

그러면 요소 정의가 위젯과 분리되어 두 가지 방식으로 사용될 수 있지만 현재는 그렇지 않습니다.

편집 2 : 기능 요청이 열립니다 .


Drupal 8에서 위젯은 이제 클래스로 구현됩니다. 기본 위젯은 기본적으로 위젯 클래스가 파생 된 클래스입니다.
kiamlaluno

비슷한 질문은 "왜 택시가 자동차가 아닌가?" 또는 "거리가 왜 아스팔트가 아닌가?" 또는 "책은 왜 소설이 아닌가?" 책은 소설 일 수 있지만 디지털 저장소에도 같은 소설이있을 수 있습니다. 아니면 다른 소설과 함께 더 큰 책에 살 수도 있습니다. 책은 소설이 정확히 하나라도 포함되어 있지만 그 내용과 무관 한 물리적 성질을 가지고 있습니다.
donquixote

답변:


11

필드 위젯이 양식 요소가 될 수 있으며 기본 저장소에 직접 매핑되는 것이 논리적 인 것 같습니다.

위젯은 양식 요소입니다. 양식 요소에없는 추가 기능 만 있습니다. 필드 위젯 API에 대한 문서 는 다음 단어를 사용하여 위젯을 설명합니다.

위젯은 추가 처리 기능 이있는 Form API 요소입니다. 위젯 후크는 일반적으로 field_attach_form () 을 사용하여 필드 양식 구조를 작성하는 동안 Field Attach API에 의해 호출됩니다 .

모든 위젯은 하나 이상의 양식 요소를 사용하여 구현되지만 위젯을 구현하는 모듈은 양식 요소에 필요하지 않은 일부 후크를 구현해야합니다.

첫 번째는 hook_element_info () 와 동등한 것으로 간주되지만 다른 두 개는 위젯이 작동하는 데 필요한 추가 후크입니다. hook_field_widget_form()위젯이 렌더링되었다는 정보가 전달 되었기 때문입니다.

Drupal은에서 반환 된 속성을 확장하는 위젯을 구현할 수 hook_element_info()있지만 사실은 위젯과 양식 요소가 서로 다른 경우에 사용되는 두 가지 요소라는 것입니다. 위젯을보다 특수한 유형의 양식 요소로 간주하십시오. 위젯에 대한 정보를 리턴하는데도 사용 된
경우 hook_element_info()위젯을 찾는 코드는 위젯 정보를 유지하기 위해 양식 요소를 필터링해야합니다. 반대로 양식 요소를 찾는 코드는 위젯 정보를 필터링해야합니다. 정보가 얼마나 자주 요구되는지를 고려할 때 두 가지 다른 후크가 필요한 이유입니다.

Drupal은에서 반환 된 "기본 요소"속성을 사용할 수 있습니다 hook_field_widget_info(). 그러한 재산이 이행되지 않았다면, 아무도 그것을 제안하지 않았거나 제안 된 것을 의미하지만, 제한된 경우에 유용 할 것입니다.

Drupal 8의 경우 상황이 약간 바뀌었고 양식 요소는 클래스를 구현 FormElementInterface하는 객체이고 필드 위젯은 클래스를 구현하는 객체입니다 WidgetInterface. 이 인터페이스들 사이에서 공통적 인 인터페이스는입니다 PluginInspectionInterface. 이것은 폼 RenderElement클래스 를 렌더링하기위한 메소드를 정의하지 않으며, 대신 추상 클래스 에서 정의됩니다 .
이제 위젯이 클래스로 구현되므로 기본 위젯은 기본적으로 위젯 클래스가 파생 된 기본 클래스입니다. 위젯의 기본 위젯을 정의하기 위해 특성이 필요하지 않습니다.


매우 흥미로워, 나는 이것을 몰랐다. +1. 그러나 나는 당신이 나를 더 혼란스럽게 만들면서 내 질문을 업데이트했습니다.)
Letharion

기능 요청이 열렸습니다 . :)
Letharion
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.