Implementieren von Feldformatierern für Entitätseigenschaften


16

Ich habe eine benutzerdefinierte Entität mithilfe der Entitäts-API erstellt , in der bestimmte Eigenschaften definiert hook_schema()und auch deklariert sind entityPropertyInfo(), eine Klasse, die erweitert wird EntityDefaultMetadataController.

So weit, ist es gut.

Jetzt möchte ich, dass Benutzer anpassen können, ob und wie diese Eigenschaften beim Anzeigen der Entitäten angezeigt werden. Deshalb habe ich hook_field_extra_fields () implementiert und deklariert.

Dann habe EntityAPIControllerich in meinem Controller, der erweitert wird, die Eigenschaften zum Array $ content in buildContent()as hinzugefügt , wie hier beschrieben .

Es funktioniert tatsächlich ziemlich gut und die Eigenschaften werden gerendert und die Reihenfolge und Sichtbarkeitseinstellungen in "Anzeige verwalten" werden beachtet.

Ich kann jedoch nicht herausfinden, wie Einstellungen in "Anzeige verwalten" hinzugefügt werden müssen, um die Etikettenpositionierung anzupassen ( inline/above/hidden) und, was noch wichtiger ist, wie benutzerdefinierte Formatierer für diese Eigenschaften angegeben werden.

Irgendwelche Hinweise?


1
Unterstützen Eigenschaften überhaupt Formatierer? Da "Node" unter "Manage display" kein "Title" hat, wäre meine erste Vermutung "no". +1 für eine gute Frage.
Letharion

Entitätseigenschaften unterstützen keine Formatierer, nein. Sie müssten den gesamten Mechanismus selbst implementieren
Clive

Ich befürchtete, dass dies der Fall ist
Alex Weber

Antworten:


7

Sie können ein Modul mit einem Feldtyp " property" erstellen . Speichern Sie die zu formatierende Eigenschaft als Instanzeinstellung und wenden Sie darauf einen Formatierer an. Es sollte relativ einfach sein. Das Beziehungsmodul verfügt über ein Dummy-Feldmodul, mit dessen Hilfe Sie möglicherweise herausfinden, wie dies codiert werden kann.


1
Das Entity Property Field- Modul ist ein weiterer Ausgangspunkt für diesen Ansatz.
Andrew Macpherson

1

Wie Sie field_ui_display_overview_formauf modules/field_ui/field_ui.admin.incder Seite sehen Display settingkönnen, füllen Sie diese mit $instancesund $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');

In dieser Funktion gibt es zwei Schleifen, die die Seite erstellen:

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

und

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

und nur in der ersten Schleife, die in Feldern iteriert, gibt es Optionen für labelundformatter

Also, wenn Sie diese Funktionalität in Ihren Eigenschaften haben möchten (wie @Clive sagte):

Sie müssten diesen ganzen Mechanismus selbst implementieren

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.