Attualmente sto cercando di implementare un campo immagine di riferimento nodo sul mio sito Drupal 7 che cambierà la sua 'modalità di visualizzazione' a seconda della logica programmatica appena prima del rendering. Il campo è attualmente in fase di rendering su un numero di tipi di contenuto tramite le impostazioni della modalità di visualizzazione, ciascuno dei quali utilizza il formatter del campo "Nodo reso".
primo tentativo
La mia prima idea è stata quella di implementare quanto segue, considerando che un hook è un hook è un hook:
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;
}
}
Ovviamente lo scambio di HOOK con il nome del mio modulo.
Non importa se quanto sopra sparerebbe prima o dopo la funzione originale node_reference_field_formatter_view
in node_reference.module
quanto avrei neanche ignorare il suo output in tutto o, si spera, modificarne i valori prima del rendering. L'unico problema è che l'hook sopra sembra funzionare solo su base per modulo - cioè non è a livello di sito, quindi sostanzialmente non funziona per il mio modulo.
Ora ovviamente posso scrivere il mio formattatore di campo per generare un nodo renderizzato. Ma sembra un po 'uno spreco considerando che ce n'è già uno che esiste.
altri approcci
I miei altri approcci sono stati HOOK_preprocess_node
e, HOOK_preprocess_field
ma il primo non contiene alcuna view_mode
informazione, e il secondo contiene almeno 5 diverse strutture complicate che hanno tutti riferimenti a una view_mode
proprietà a diversi livelli - e sembra piuttosto sconclusionato dover modificare ognuna delle loro valori. Anche quando ho modificato alcune view_mode
proprietà l'immagine risultante non cambia.
domanda
Qualcuno sa un modo chiaro per intervenire prima che un renderizzatore di formattazione di campo (di un modulo contrib) e modificare le sue impostazioni in base alla richiesta per pagina - cioè non dover cambiare le impostazioni della modalità di visualizzazione permanente del tipo di contenuto effettivo?
view_mode
acceso hook_preprocess_node
, sciocco me! Mi chiedo se hook_field_formatter_view_alter()
esiste qualcosa del genere in D8 ...
hook_field_formatter_view_alter()
o simile probabilmente da oltre un anno, purtroppo non esiste. FYIhook_preprocess_node()
sicuramente non haview_mode
a sua disposizione, è in$vars['view_mode']
, non$vars['node']->view_mode
che si potrebbe avere avuto la tentazione di provare.