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?


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ć.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.