Cómo implementar formateadores de campo para propiedades de entidad

16

Creé una entidad personalizada usando Entity API que tiene ciertas propiedades definidas hook_schema()y también declaradas en entityPropertyInfo()una clase que se extiende EntityDefaultMetadataController.

Hasta aquí todo bien.

Ahora me gustaría que los usuarios puedan personalizar si estas propiedades se muestran y cómo se muestran al ver las entidades, así que implementé hook_field_extra_fields () y las declaró.

Luego, en mi controlador que se extiende EntityAPIController, agregué las propiedades a la matriz $ content buildContent()como se describe aquí .

Realmente funciona bastante bien y las propiedades se representan y respetan el orden y la configuración de visibilidad en "Administrar pantalla".

Sin embargo, parece que no puedo entender cómo agregar configuraciones en Administrar pantalla para personalizar el posicionamiento de la etiqueta ( inline/above/hidden) y, lo que es más importante, cómo especificar formateadores personalizados para estas propiedades.

¿Alguna pista?

Alex Weber
fuente
1
¿Las propiedades incluso admiten formateadores? Dado que "Nodo" no tiene "Título" en "Administrar pantalla", mi primera suposición sería no. +1 para una buena pregunta sin embargo.
Letharion
Las propiedades de la entidad no admiten formateadores, no. Debería implementar todo ese mecanismo usted mismo
Clive
Temía que ese fuera el caso
Alex Weber

Respuestas:

7

Puede crear un módulo que proporcione un " property" tipo de campo. Almacene la propiedad que se formateará como una configuración de instancia y luego aplique un formateador a eso. Debería ser relativamente sencillo. El módulo de relación tiene un módulo de campo ficticio que podría ayudarlo a descubrir cómo codificar esto.

DRUPWAY
fuente
1
El módulo Entity Property Field es otro punto de partida para este enfoque.
andrewmacpherson
1

como se puede ver en field_ui_display_overview_formen modules/field_ui/field_ui.admin.incla página Display settingllenará con $instancesy $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');

En esta función hay dos bucles que crean la página:

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

y

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

y solo en el primer ciclo que itera en los campos hay opciones para labelyformatter

así que si quieres esta funcionalidad en tus propiedades (como dijo @Clive):

Tendría que implementar todo ese mecanismo usted mismo

Mohammad Ali Akbari
fuente