Atualmente, estou tentando implementar um campo de imagem referenciado por nó no meu site Drupal 7 que mudará seu 'modo de exibição', dependendo da lógica programática antes da renderização. No momento, o campo está sendo renderizado em vários tipos de conteúdo por meio de suas configurações de modo de exibição, cada um usando o formatador de campo 'Nó renderizado'.
primeira tentativa
Minha primeira idéia foi implementar o seguinte, considerando que um gancho é um gancho é um 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, trocando HOOK pelo nome do meu módulo.
Realmente não importava se o item acima seria acionado antes ou depois da função original node_reference_field_formatter_view, node_reference.moduleporque eu substituiria totalmente a saída ou, esperançosamente, modificaria seus valores antes da renderização. O único problema é que o gancho acima parece funcionar apenas por módulo - ou seja, não é de todo o site, portanto, basicamente, não é acionado para o meu módulo.
Agora, obviamente, eu posso escrever meu próprio formatador de campo para gerar um nó renderizado. Mas parece um desperdício, considerando que já existe um.
outras abordagens
Minhas outras abordagens foram HOOK_preprocess_nodee, HOOK_preprocess_fieldmas a primeira não contém nenhuma view_modeinformação, e a segunda contém pelo menos cinco estruturas complicadas diferentes, todas com referências a uma view_modepropriedade em diferentes níveis - e parece um pouco invasivo ter que modificar cada uma delas. valores. Mesmo quando eu mudei certas view_modepropriedades, a imagem resultante não muda.
questão
Alguém sabe uma maneira clara de intervir antes que um formatador de campo seja processado (de um módulo contrib) e altere suas configurações com base na solicitação por página - ou seja, não sendo necessário alterar as configurações do modo de visualização permanente do tipo de conteúdo real?
view_modeon hook_preprocess_node, me engane ! Pergunto-me se qualquer coisa como hook_field_formatter_view_alter()isto existe em D8 ...
hook_field_formatter_view_alter()ou similar há provavelmente mais de um ano, mas isso simplesmente não existe. FYIhook_preprocess_node()definitivamente não têmview_modeà sua disposição, está em$vars['view_mode'], não$vars['node']->view_modeo que você poderia ter sido tentado a experimentar.