Comment implémenter des formateurs de champ pour les propriétés d'entité

16

J'ai créé une entité personnalisée à l' aide de l' API d'entité qui a certaines propriétés définies hook_schema()et également déclarées dans entityPropertyInfo(), une extension de classe EntityDefaultMetadataController.

Jusqu'ici tout va bien.

Maintenant, j'aimerais que les utilisateurs puissent personnaliser si et comment ces propriétés s'affichent lors de la visualisation des entités, j'ai donc implémenté hook_field_extra_fields () et les ai déclarées.

Ensuite, dans mon contrôleur qui s'étend, EntityAPIControllerj'ai ajouté les propriétés au tableau $ content en buildContent()tant que, décrites ici .

Cela fonctionne plutôt bien et les propriétés sont rendues et respectent l'ordre et la visibilité dans "Gérer l'affichage".

Cependant, je n'arrive pas à comprendre comment ajouter des paramètres dans Gérer l'affichage pour personnaliser le positionnement de l'étiquette ( inline/above/hidden) et, plus important encore, comment spécifier des formateurs personnalisés pour ces propriétés.

Des indices?

Alex Weber
la source
1
Les propriétés prennent-elles même en charge les formateurs? Puisque "Node" n'a pas "Title" sous "Manage display", ma première supposition serait non. +1 pour une bonne question.
Letharion
Les propriétés d'entité ne prennent pas en charge les formateurs, non. Vous devez implémenter vous
Clive
Je craignais que ce soit le cas
Alex Weber

Réponses:

7

Vous pouvez créer un module fournissant un propertytype de champ " ". Stockez la propriété à mettre en forme en tant que paramètre d'instance, puis appliquez un formateur à cela. Cela devrait être relativement simple. Le module de relation a un module de champ factice qui pourrait vous aider à comprendre comment coder cela.

DRUPWAY
la source
1
Le module Entity Property Field est un autre point de départ pour cette approche.
andrewmacpherson
1

comme vous pouvez le voir field_ui_display_overview_formsur modules/field_ui/field_ui.admin.incla pageDisplay setting remplira avec $instanceset $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');

dans cette fonction il y a deux boucles qui créent la page:

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

et

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

et seulement dans la première boucle qui itère dans les champs, il y a des options pour labeletformatter

donc si vous voulez cette fonctionnalité sur vos propriétés (comme l'a dit @Clive):

Vous devrez implémenter vous-même tout ce mécanisme

Mohammad Ali Akbari
la source