Actualmente estoy tratando de implementar un campo de imagen de referencia de nodo en mi sitio Drupal 7 que cambiará su 'modo de vista' dependiendo de la lógica programática justo antes del render. El campo se está representando actualmente en varios tipos de contenido a través de su configuración de modo de visualización, cada uno de los cuales está utilizando el formateador de campo 'Nodo representado'.
primer intento
Mi primera idea fue implementar lo siguiente, considerando que un gancho es un gancho es un gancho:
function HOOK_field_formatter_view( $entity_type, $entity, $field ... ){
switch ($display['type']) {
case 'node_reference_node':
/* Programatical logic here to modfy field render settings */
break;
}
}
Obviamente intercambiando GANCHO por el nombre de mi módulo.
En realidad no importa si lo anterior habría disparar antes o después de la función original node_reference_field_formatter_view
en node_reference.module
porque me anular o bien de salida en su totalidad o, con suerte, modificar sus valores antes de la representación. El único problema es que el enlace anterior parece funcionar solo por módulo, es decir, no abarca todo el sitio, por lo que básicamente no se activa para mi módulo.
Ahora, obviamente, puedo escribir mi propio formateador de campo para generar un nodo renderizado. Pero parece un desperdicio teniendo en cuenta que ya existe uno.
otros enfoques
Mis otros enfoques han sido HOOK_preprocess_node
y, HOOK_preprocess_field
pero el primero no contiene ninguna view_mode
información, y el segundo contiene al menos 5 estructuras complicadas diferentes que tienen referencias a una view_mode
propiedad en diferentes niveles, y se siente bastante extraño tener que modificar cada uno de sus valores. Incluso cuando he cambiado ciertas view_mode
propiedades, la imagen resultante no cambia.
pregunta
¿Alguien sabe de una manera limpia de intervenir antes de que un formateador de campo presente (de un módulo contrib) y cambie su configuración por solicitud de página, es decir, al no tener que cambiar la configuración del modo de vista permanente del tipo de contenido real?
view_mode
encendido hook_preprocess_node
, ¡tonto! Me pregunto si hook_field_formatter_view_alter()
existe algo así en D8 ...
hook_field_formatter_view_alter()
o similar durante probablemente más de un año, desafortunadamente no existe. FYIhook_preprocess_node()
definitivamente no tienenview_mode
a su disposición, está en$vars['view_mode']
, no$vars['node']->view_mode
que pudiera haber tenido la tentación de tratar.