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?

Alex Weber
quelle
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.

DRUPWAY
quelle
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

Mohammad Ali Akbari
quelle