Renderuj pole węzła wewnątrz page.html.twig

12

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.

kraftybasterd
źródło
2
@kiamlaluno - dlaczego edytowałeś moje pytanie? Umieszczenie „Drupal 8” w tytule ORAZ w pytaniu sprawia, że ​​potencjalni dostawcy odpowiedzi stają się oczywiste ORAZ znacznie ułatwia znalezienie w Google, biorąc pod uwagę rozpowszechnienie tam treści Drupal 6 i 7; wyjaśnienie Drupala 8 pytań / odpowiedzi jest bardzo pomocne dla społeczności poszukującej odpowiedzi na D8. Zastanawiałem się, jakie było twoje uzasadnienie zmiany.
kraftybasterd
Nie powielaj tagów w tytułach pytań; tagi są widoczne w każdym miejscu, w którym widoczne jest pytanie, więc nie ma potrzeby używania tagów również w tytule pytania.
kiamlaluno
2
Oczywiście jestem tu nowy ... ale czy metatagi (w tym przypadku „8”) pomagają w wynikach wyszukiwania? Wydaje mi się, że tytuły zawierające Drupal 8 lub Drupal 7 mogą potencjalnie pomóc osobom szukającym odpowiedzi za pośrednictwem Google ... to tylko pomysł.
kraftybasterd

Odpowiedzi:

26

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.

kraftybasterd
źródło
Byłem sceptyczny, odnosząc wrażenie, że w D7 tego rodzaju rzeczy zawsze powinny mieć np. Funkcję wstępnego przetwarzania. Jednak przykład file_url()w dokumentach ( drupal.org/docs/8/theming/twig/functions-in-twig-templates ) robi dokładnie to, więc wziąłem górę.
Graham C,
Jak przechodzić przez określony typ zawartości i wyprowadzać wartości jego pól w środku page.html.twig?
Naourass Derouichi
2

Istnieją trzy przydatne metody pracy z tym, a wszystkie oszczędzają czas na kopanie w skomplikowanych macierzach renderujących.

  1. 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.

  2. 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)

  3. 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!

HongPong
źródło
1
To jest poprawna odpowiedź. Z mojego doświadczenia {{ 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żywasz twig_tweakmodułu, możesz uzyskać w pełni renderowane pole z{{ node.field_some_name|view }}
kentr