Jak uzyskać wartość pola surowego w szablonie gałązki?

27

myfield to zwykłe pole tekstowe. {{ content.field_myfield }}renderuje pole ze znacznikami HTML i etykietą pola.

Jak renderować surową wartość pola? {{ content.field_myfield.value }}nie działa

Pim
źródło

Odpowiedzi:

45

{{ entity.field_name.value }} aby uzyskać prawdziwą surową wartość, zawiera tagi i kodowanie.

  • Przykład: {{ node.body.value }}
  • wynik: <p>Batman &amp; Robin</p>

{{ content.field_name.0 }} aby uzyskać nieprzetworzoną wartość minus tagi i kodowanie.

  • Przykład: {{ content.body.0 }}
  • wynik: Batman & Robin

surowy

Tego filtra należy unikać, gdy tylko jest to możliwe, szczególnie jeśli wyprowadzasz dane, które mogą zostać wprowadzone przez użytkownika. Zobacz tę stronę, aby uzyskać więcej informacji o automatycznej ucieczce w Drupal 8.

źródło: Filtry - Modyfikowanie zmiennych w szablonach gałązek

Filtr raw zaznacza tę wartość jako „bezpieczną”, co oznacza, że ​​w środowisku z włączonym automatycznym ucieczką ta zmienna nie zostanie zmieniona, jeśli raw jest ostatnim zastosowanym filtrem

źródło: oficjalne dokumenty Twiga


Na przykład możesz użyć:

{{ node.body.value|striptags }}
{{ paragraph.field_text.value|striptags }}

Problem z używaniem | striptags twig polega na podwójnym kodowaniu encji HTML, a nie na znacznikach, więc & staje się & a następnie & amp; - Berdir

Bez sssweat
źródło
6
przykłady treści są nieprawidłowe. Zobacz drupal.stackexchange.com/questions/198694/... . Możesz użyć content.field_text.0, wtedy dostaniesz tylko wewnętrzną część pierwszego elementu pola, bez szablonów pól. Jest to szczególnie przydatne w przypadku list, referencji itp., W których chcesz sformatować dane wyjściowe, a nie surową wartość
Berdir
2
Lepiej, ale wciąż nie całkiem poprawnie. content.field_myfield | striptags nie działa, nie można do tego przekazać tablicy renderowania. Najpierw musisz go wyrenderować, a następnie przejść przez to. Striptag i tak dalej mają również problemy z & i innymi postaciami, które mogą zostać zakodowane dwukrotnie, więc często potrzebujesz | striptagów | raw.
Berdir
2
Just | raw pozostawia tagi HTML i drukuje je. Problem z | striptags polega zatem na podwójnym kodowaniu encji html, a nie na znacznikach, więc & staje się & amp; a następnie & amp; amp; amp;
Berdir
2
To nie jest podwójne ucieczka, widać to <i >są wyświetlane poprawnie. Znak ampersand jest prawdopodobnie już pojedynczym znakiem ucieczki przed wysłaniem go. Pytanie dotyczy jednak zwykłego pola tekstowego , a nie sformatowanego pola tekstowego przetwarzanego przez filtry tekstowe. (Aby odpowiedzieć na to nie zadane pytanie, nieprzetworzona wartość (jeśli ktoś naprawdę tego chce) nadal będzie istnieć .valuei ze względów bezpieczeństwa będzie poprawnie uciekł pojedynczo przez Twiga, ponieważ nigdy nie należy wypisywać sformatowanego pola tekstowego bez
filtrowania
2
Tak, właśnie to miałem na myśli (auto-escaping = single escaping). Więc twoje przykłady wyprowadzania wartości pól encji są doskonałe, tylko bez filtra striptag, ponieważ spowodowałoby to brzydkie podwójne ucieczkowe wyjście. (BTW dane &amp;wyjściowe w twoim przykładzie są niepoprawne, nie dzieje się to podczas autoskalowania, chyba że zawartość pola zostanie już raz zmieniona).
4k4
5

W takim przypadku możesz użyć modułu Twig Field Value . Po zainstalowaniu tego modułu uzyskasz dostęp do częściowych danych z tablic renderujących pola. Np.

{{ content.field_name|field_value }}
content.field_image|field_target_entity.uri.value

itp. Więcej informacji na stronie projektów

Andrew Kozoriz
źródło
1
{{ content.body | raw }} 

uzyskaj wartość pola surowego w szablonie gałązki

Wasim Khan
źródło