Jak dodać zmienną do szablonu pola gałązki?

9

Na stronie węzła chciałbym dodać tytuł węzła do wyniku obok innego innego pola (pola przykładowego).

Utworzyłem nową, field--field-example.html.twigale nie mogę uzyskać dostępu do zmiennej tytułu węzła, ponieważ nie jest ona dostępna w szablonie pola.

Muszę dodać zmienne do Preprocesuj tematu: themename.theme.

Jak dodać zmienną themename.themei jaki będzie odpowiedni wpis w field--field-example.html.twig?

Taylor Taff
źródło
Użyj węzła hook_preprocess_node, aby wyodrębnić wartość z pola, którego chcesz użyć w szablonie.
@IvanJaros, zaktualizowałem pytanie teraz.
Taylor Taff,

Odpowiedzi:

15

Ponieważ zapytałeś o przekazanie tytułu węzła jako zmiennej przez plik .theme, możesz użyć pola template_preprocess_field, aby zrobić coś takiego:

  function themename_preprocess_field(&$variables, $hook) {
    if ($variables['element']['#field_name'] == 'field_example') {
      $variables['node_title'] = $variables['element']['#object']->getTitle();
    }
  }

to w twoim przypadku field--field-example.html.twigmożesz po prostu użyć {{node_title}}do renderowania tytułu węzła.

Zobacz także odpowiedź 4k4 poniżej.

Janey
źródło
Próbowałem edytować twoją odpowiedź, tak aby zawierała odpowiedź dostarczoną przez 4k4, ponieważ jest poprawna, ale moja edycja została odrzucona, ponieważ została uznana za nieistotną ...
Taylor Taff
@TaylorTaff, który zatwierdza zmiany? Nigdy tego nie widziałem. Spróbuję edytować, aby dołączyć odpowiedź poniżej.
Janey
@Janey wielu użytkowników z wystarczającą liczbą odznak może przejrzeć takie zmiany. Dodałem do zakładek twoje odpowiedzi do przyszłego przeglądu. Jeszcze jedno pytanie: czy jesteście pewni, że $variables['element']['#object']->getTitle();da się to złapać preprocess_field? Ponieważ to właściwie odpowiedziałoby na moje pytanie tutaj: drupal.stackexchange.com/questions/197497/…
nilsun
11

W zmiennych szablonu pola dostępny jest obiekt węzła, więc nie potrzebujesz funkcji wstępnego przetwarzania.

Aby uzyskać tytuł z węzła w szablonie pola:

{{ element['#object'].label }}
4k4
źródło
To odpowiada na pytanie, ale ponieważ inna odpowiedź Janey będzie bardziej przydatna, dodałem to do tej odpowiedzi i oznaczyłem jako zaakceptowane.
Taylor Taff
1
Ale twoje pytanie było błędne: „ale nie mogę uzyskać dostępu do zmiennej tytułu węzła, ponieważ nie jest ona dostępna w szablonie pola”.
4k4
Tak 4k4, masz rację, moje pytanie było nieprawidłowe.
Taylor Taff