J'ai créé un personnalisé entité en utilisant API d'entité qui a certaines propriétés définies dans hook_schema()
et également déclarées dans entityPropertyInfo()
, une classe étendant 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 étend EntityAPIController
j'ai ajouté les propriétés au tableau de contenu $ dans buildContent()
as, comme indiqué 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?
Vous pouvez créer un module fournissant un type de champ "property
". Stockez la propriété à mettre en forme en tant que paramètre d'instance, puis appliquez-y un formateur. Cela devrait être relativement simple. Relation module a un module de champ factice qui pourrait vous aider à comprendre comment coder cela.
comme vous pouvez le voir dans field_ui_display_overview_form
dans modules/field_ui/field_ui.admin.inc
la page Display setting
se remplira de $instances
et $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 label
et formatter
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