Mam pole obrazu na moim typie treści (field_hero_image).
Nie chcę, aby był renderowany w pliku node.html.twig. Jednak chcę wyrenderować go w pliku page.html.twig. W szczególności chcę renderować obok tytułu strony.
Jakiego kodu użyłbym w pliku page.html.twig, aby uzyskać dostęp do pól na poziomie węzła i je renderować?
(Podobne pytanie zostało opublikowane, ale nie mogłem użyć podanej tam odpowiedzi do rozwiązania mojego problemu).
To dla tematów Drupal 8.
Odpowiedzi:
Po przeprowadzeniu nieco więcej badań udało mi się znaleźć wystarczającą ilość odpowiedzi na inne pytania i na stronie drupal.org, aby osiągnąć to, co chciałem zrobić.
Ta odpowiedź nie wymaga wstępnego przetwarzania, więc do pliku mytheme.theme nie trzeba dodawać żadnego kodu.
Wszystkie te zmienne są już domyślnie dostępne w page.html.twig.
Aby renderować domyślną wartość pola w page.html.twig, zwykle używasz zmiennej Twig jak w
{{ node.field_some_name.value }}
.Jeśli masz pole obrazu i chcesz wyrenderować adres URL obrazu zapisanego w tym polu w szablonie page.html.twig, skorzystaj z niego
{{ file_url(node.field_some_image.entity.fileuri) }}
.Na koniec, jeśli chcesz renderować tytuł węzła w szablonie page.html.twig, skorzystaj z niego
{{ node.label }}
.Nauczyłem się również, jak korzystać z niektórych warunków warunkowych Twig dla mojego konkretnego problemu, ale to wykracza poza zakres tego pytania / odpowiedzi.
źródło
file_url()
w dokumentach ( drupal.org/docs/8/theming/twig/functions-in-twig-templates ) robi dokładnie to, więc wziąłem górę.page.html.twig
?Istnieją trzy przydatne metody pracy z tym, a wszystkie oszczędzają czas na kopanie w skomplikowanych macierzach renderujących.
Za pomocą Display Suite (z submodułem ds_extras) możesz przypisać do regionu bohatera blok („region bloku”), który jest innym trybem wyświetlania (tj. Tylko tym, który zawiera obraz bohatera). W ten sposób otrzymujesz jednocześnie dwa różne tryby wyświetlania. Zwróć uwagę, że niektóre haki przetwarzania wstępnego mogą nie zostać uruchomione, jak możesz się spodziewać, jeśli to zrobisz.
Moduł twig_tweak znacznie upraszcza takie zadania i może dać łatwiejsze oświadczenia gałązka dla wartości pola. Spójrz na ściągę na niektóre typowe zastosowania:
{{ drupal_field('field_image', 'node', 1) }}
sygnatura funkcji to:drupalField($field_name, $entity_type, $id = NULL, $view_mode = 'default', $langcode = NULL)
Twig_field_value moduł umożliwia prostsze oświadczenia patyk. Według pliku README.txt:
<img src={{ file_url(content.field_image|field_target_entity.uri.value) }} alt={{ content.field_image|field_raw('alt') }} />
Gdybym wiedział o tym wcześniej, zaoszczędziłoby mi to dużo czasu!
źródło
{{ node.field_some_name.value }}
wynika, że pole nie jest renderowane . Nie wywołuje pełnego systemu motywu (funkcja wstępnego przetwarzania, szablon itp.). OTOH, jeśli używasztwig_tweak
modułu, możesz uzyskać w pełni renderowane pole z{{ node.field_some_name|view }}