Obecnie próbuję zaimplementować pole obrazu, do którego odwołuje się węzeł, w mojej witrynie Drupal 7, która zmieni tryb wyświetlania w zależności od logiki programowej tuż przed renderowaniem. Pole jest obecnie renderowane na wielu typach treści za pomocą ustawień trybu wyświetlania, z których każdy używa formatera pola „Rendered node”.
pierwsze podejscie
Moim pierwszym pomysłem było wdrożenie następujących, biorąc pod uwagę, że hak to hak to hak:
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;
}
}
Oczywiście wymiana HACKA na nazwę mojego modułu.
To nie ma znaczenia, czy powyższe będzie ogień przed lub po pierwotnej funkcji node_reference_field_formatter_view
w node_reference.module
bo bym albo zastąpić go za całkowicie lub wyjście, z nadzieją, zmodyfikować jego wartości przed renderowania. Jedyny problem polega na tym, że powyższy hak wydaje się działać tylko dla poszczególnych modułów - tzn. Nie jest szeroki dla całej witryny, więc w zasadzie nie uruchamia się dla mojego modułu.
Teraz oczywiście mogę napisać własny formater pola, aby wyrenderować renderowany węzeł. Ale wydaje się to trochę marnotrawstwem, biorąc pod uwagę, że już istnieje.
inne podejścia
Moje inne podejścia zostały do HOOK_preprocess_node
a HOOK_preprocess_field
jednak były nie zawierają żadnych view_mode
informacji, a druga zawiera co najmniej 5 różnych skomplikowanych struktur, które wszystkie mają odniesienia do view_mode
właściwości na różnych poziomach - i czuje się dość hacky musiał modyfikować każdy z ich wartości. Nawet po zmianie niektórych view_mode
właściwości wynikowy obraz się nie zmienia.
pytanie
Czy ktoś wie o czystym sposobie wejścia przed renderowaniem formatera pola (modułu contrib) i zmiany jego ustawień na podstawie żądania na stronę - tj. Bez konieczności zmiany ustawień stałego trybu wyświetlania rzeczywistego typu zawartości?
view_mode
dalej hook_preprocess_node
, głupcze mnie! Zastanawiam się, czy coś takiego hook_field_formatter_view_alter()
istnieje w D8 ...
hook_field_formatter_view_alter()
podobnego od ponad roku, po prostu niestety nie istnieje. FYIhook_preprocess_node()
zdecydowanie nie miećview_mode
dostęp do niego, to w$vars['view_mode']
nie$vars['node']->view_mode
których może być skłonny spróbować.