web-dev-qa-db-fra.com

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

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?

16
Alex Weber

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.

7
user49

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

1