Ich habe eine Ansicht für einen Knoten erstellt, in der der Inhalt als gerenderte Entität angezeigt wird. Unter anderem gebe ich das Körperfeld in der Zweigvorlage aus:
{{ content.field_body }}
Jetzt möchte ich den Text auf 200 Zeichen beschränken und drei Punkte setzen. Ich habe drei verschiedene Möglichkeiten getestet, aber nichts hat funktioniert. Das Problem ist, dass jeder Weg auch die HTML-Zeichen zählt und trimmt.
1: Ich habe das Format "Beschnitten" in "Anzeige verwalten" hinzugefügt => Der Text ist begrenzt, aber nicht korrekt. Und ich habe die drei Punkte nicht.
2: Ich habe den Text in der Zweigvorlage zugeschnitten. Aber um den Text zu zählen, muss ich ihn zuerst rendern. Dabei gibt twig den Text als HTML aus (ich sehe HTML-Tags auf meiner Seite!)
{% set text = content.field_body|render %}
{{ text|length > 200 ? text|slice(0, 200) ~ '...' : text }}
3: Ich habe versucht, das Problem in template_preprocess_node () zu lösen. Hier habe ich das gleiche Problem beim Zählen des HTML-Markups.
$body_text = $node->get('field_body')->getValue()[0]['value'];
$trimmed_text = substr($body_text, 0, 200) . '...';
Wie kann ich meinen Text richtig zuschneiden?
Vielen Dank für Ihre Hilfe!
Sie können dies jetzt mit dem Modul twig_extender tun und verwenden
|truncate
.Hier ist ein Beispiel für die Verwendung in der .twig-Vorlage. Beachten Sie, dass ich auch twig_field_value verwende :
Hinweis: Normalerweise behalte ich meine Entwicklungseinstellungen (./admin/config/development/devel) für die Verwendung von Symfony var-dumper bei und kann die Kette mit herausfinden
dh:
{{ devel_dump(content.field_name|field_value) }}
quelle
Verbesserungen:
|trim
zu von Leerzeichen loszuwerdenslice()
undsplit()
…
) anstelle von "..."|raw
die Ausgabe{% set text = content.field_header_intro|render|striptags|trim %}
{{ (text|length > 200 ? text|slice(0, 201)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text)|raw }}</code>
quelle
So habe ich damit umgegangen.
Beispiel:
Feld - Knoten - Körper - Artikel.html.twig
quelle