엔터티 속성에 대한 필드 포맷터를 구현하는 방법


16

Entity API 를 사용하여 클래스를 확장하는 클래스 에 정의 된 특정 속성이 있는 사용자 지정 엔터티 를 만들었습니다 .hook_schema()entityPropertyInfo()EntityDefaultMetadataController

여태까지는 그런대로 잘됐다.

이제 사용자가 엔티티를 볼 때 이러한 속성이 표시되는지 여부와 방법을 사용자 정의하여 hook_field_extra_fields ()를 구현 하고 선언 할 수 있기를 바랍니다.

그런 다음 확장되는 컨트롤러 EntityAPIController에서 속성을 $ content 배열에 다음 buildContent()과 같이 추가 했습니다 .

실제로 잘 작동하고 속성이 렌더링되며 "디스플레이 관리"의 순서 및 가시성 설정을 준수합니다.

그러나 레이블 관리 ( inline/above/hidden) 를 사용자 지정하기 위해 디스플레이 관리에서 설정을 추가하는 방법 과 이러한 속성에 대해 사용자 지정 포맷터를 지정하는 방법을 파악할 수 없습니다.

단서가 있습니까?


1
속성도 포맷터를 지원합니까? "노드"에는 "디스플레이 관리"아래에 "제목"이 없으므로 첫 번째 추측은 '아니오'입니다. 좋은 질문은 +1입니다.
Letharion

엔터티 속성은 포맷터를 지원하지 않습니다. 전체 메커니즘을 직접 구현해야합니다.
Clive

나는 그것이 사실 인 것을 두려워했다
Alex Weber

답변:


7

" property"필드 유형을 제공하는 모듈을 작성할 수 있습니다 . 인스턴스 설정으로 서식을 지정할 속성을 저장 한 다음 포맷터를 적용하십시오. 비교적 간단해야합니다. 관계 모듈에는 더미 필드 모듈이 있으며이를 코딩하는 방법을 알아내는 데 도움이 될 수 있습니다.


1
엔티티 속성 필드 모듈은이 방법의 또 다른 시작 지점입니다.
andrewmacpherson

1

당신은에서 볼 수 있듯이 field_ui_display_overview_form에서 modules/field_ui/field_ui.admin.inc페이지 Display setting로 채울 것입니다 $instances$extra_fields:

$instances = field_info_instances($entity_type, $bundle);
$field_types = field_info_field_types();
$extra_fields = field_info_extra_fields($entity_type, $bundle, 'display');

이 함수에는 페이지를 생성하는 두 개의 루프가 있습니다.

foreach ($instances as $name => $instance) {
   ...
}

foreach ($extra_fields as $name => $extra_field) {
   ...
}

필드에서 반복되는 첫 번째 루프에서만 label및에 대한 옵션이 있습니다.formatter

따라서 @Clive가 말했듯이 속성 에이 기능을 원한다면 :

전체 메커니즘을 직접 구현해야합니다.

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