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.module
porque 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_node
e, HOOK_preprocess_field
mas a primeira não contém nenhuma view_mode
informação, e a segunda contém pelo menos cinco estruturas complicadas diferentes, todas com referências a uma view_mode
propriedade em diferentes níveis - e parece um pouco invasivo ter que modificar cada uma delas. valores. Mesmo quando eu mudei certas view_mode
propriedades, 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_mode
on 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_mode
o que você poderia ter sido tentado a experimentar.