Jak zaimplementować formaterery pól dla właściwości encji

16

Utworzyłem encję niestandardową za pomocą interfejsu API jednostki, która ma określone właściwości zdefiniowane hook_schema()i zadeklarowane w entityPropertyInfo()klasie rozszerzającej EntityDefaultMetadataController.

Jak na razie dobrze.

Teraz chciałbym, aby użytkownicy mogli dostosować, czy i jak te właściwości będą wyświetlane podczas przeglądania encji, więc zaimplementowałem hook_field_extra_fields () i je zadeklarowałem.

Następnie w moim kontrolerze, który rozszerza EntityAPIController, dodałem właściwości do tablicy $ content w buildContent()as, jak tutaj opisano .

W rzeczywistości działa całkiem dobrze, a właściwości są renderowane i szanują ustawienia kolejności i widoczności w „Zarządzaj wyświetlaniem”.

Wydaje mi się jednak, że nie mogę wymyślić, jak dodać ustawienia w Zarządzaj wyświetlaniem, aby dostosować pozycjonowanie etykiet ( inline/above/hidden), a co ważniejsze, jak określić niestandardowe formatery dla tych właściwości.

Jakieś wskazówki?

Alex Weber
źródło
1
Czy właściwości obsługują nawet formatery? Ponieważ „Węzeł” nie ma „Tytuł” ​​w „Zarządzaj wyświetlaniem”, moje pierwsze przypuszczenie byłoby nie. +1 za dobre pytanie.
Letharion
Właściwości encji nie obsługują formatowania, nie. Musisz sam wdrożyć cały ten mechanizm
Clive
Obawiałem się, że tak jest
Alex Weber,

Odpowiedzi:

7

Możesz utworzyć moduł zapewniający propertypole typu „ ”. Zapisz właściwość do sformatowania jako ustawienie instancji, a następnie zastosuj do niej formatyzator. Powinno to być stosunkowo proste. Moduł relacji ma atrapę modułu polowego, który może pomóc w ustaleniu, jak to zakodować.

DRUPWAY
źródło
1
Podmiot Property Pole moduł jest inny punkt wyjścia dla tego podejścia.
andrewmacpherson,
1

jak widać field_ui_display_overview_formna modules/field_ui/field_ui.admin.incstronie Display settingwypełni się $instancesi $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');

w tej funkcji są dwie pętle, które tworzą stronę:

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

i

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

i tylko w pierwszej pętli, która iteruje w polach, są opcje dla labeliformatter

więc jeśli chcesz tę funkcjonalność w swoich właściwościach (jak powiedział @Clive):

Musisz sam wdrożyć cały ten mechanizm

Mohammad Ali Akbari
źródło