Dies sollte die Antwort sein, die bis jetzt noch funktioniert;)
Walesingswee
Wie können wir einen Link zu ... hinzufügen?
mburakergenc
11
Wenn Sie ein Wort beschneiden möchten, können Sie dies außerdem folgendermaßen tun : {{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}. Ich empfehle auch die Verwendung des Auslassungszeichens ( …) anstelle von 3 echten Punkten ( ...)
Ich verwende Symfony 2.3 und der Filter zum Abschneiden ist nicht Teil der Standarderweiterungen. Deshalb habe ich stattdessen auf Manuels Lösung zurückgegriffen.
Zum Anhängen ...sollte der zweite Parameter truewie {{ text|truncate(50, true)
folgt
Wenn Sie den zweiten Parameter tatsächlich auf true setzen, bleiben ganze Wörter erhalten. Standardmäßig werden die Ellipsen hinzugefügt. Der dritte Parameter kann die Ellipsen nach Belieben ändern. twig-extensions.readthedocs.io/en/latest/…
Beta
1
Mit Symfony 2.8 musste ich diese Erweiterung installieren, um sie verwenden zu können. require twig/extensions
{{ tools.trunc('This is the text to truncate. ',50)}}
Nb Ich importiere eine Twig-Vorlage mit Makros und importiere sie als 'Werkzeuge' wie diese (Symfony):
{%import"@AppBundle/tools.html.twig"as tools -%}
Außerdem habe ich den HTML-Zeichencode durch das eigentliche Zeichen ersetzt. Dies sollte kein Problem sein, wenn UTF-8 als Dateicodierung verwendet wird. Auf diese Weise müssen Sie nicht verwenden |raw(da dies ein Sicherheitsproblem verursachen könnte).
Eine noch elegantere Lösung besteht darin, den Text durch die Anzahl der Wörter (und nicht durch die Anzahl der Zeichen) zu begrenzen. Dies verhindert hässliche Durchbrüche (zB 'Stackov ...').
Hier ist ein Beispiel, in dem ich nur Textblöcke kürze, die länger als 10 Wörter sind:
{%set text = myentity.text |split(' ')%}{%if text|length >10%}{%for t in text|slice(0,10)%}{{ t }}{% endfor %}...{%else%}{{ text|join(' ')}}{% endif %}
Verwenden Sie den Kürzungsfilter, um eine Zeichenfolge nach Erreichen des Grenzwerts abzuschneiden
{{"Hello World!"|truncate(5)}}// default separator is ...
Hallo...
Sie können truncate auch anweisen, ganze Wörter beizubehalten, indem Sie den zweiten Parameter auf true setzen. Wenn sich das letzte Wort im Trennzeichen befindet, wird beim Abschneiden das gesamte Wort ausgedruckt.
{{"Hello World!"|truncate(7,true)}}// preserve words
Hier Hallo Welt!
Wenn Sie das Trennzeichen ändern möchten, setzen Sie einfach den dritten Parameter auf das gewünschte Trennzeichen.
Bugginess * in den neuen Drupal 8-Funktionen hier hat uns dazu inspiriert, unsere eigenen zu schreiben:
<ahref="{{ view_node }}">{% if title|length > 32 %}{% set title_array = title|split(' ') %}{% set title_word_count = 0 %}{% for ta in title_array %}{% set word_count = ta|length %}{% if title_word_count < 32 %}{% set title_word_count = title_word_count + word_count %}{{ ta }} {% endif %}{% endfor %}...{% else %}{{ title }}{% endif %}</a>
Dies berücksichtigt sowohl Wörter als auch Zeichen (* die Einstellung "Wortgrenze" in D8 zeigte nichts an).
Können Sie Ihrer Antwort eine Erklärung hinzufügen? Warum sollte man eine HTML-Entität verwenden? Und warum hängen Sie es in jedem Fall an den Text an, auch wenn der Text weniger als 50 Zeichen lang ist?
Nico Haase
Hallo, wenn Sie drei Punkte schreiben, sind es drei separate Punkte, aber das Zeichen "drei Punkte" wird als Ellipse bezeichnet. Die Auslassungs-HTML-Entität ist ….
Théo Attali
Und warum nicht das Unicode-Zeichen für diese Ellipse verwenden?
Nico Haase
Sie können es auch verwenden! Dieser Kommentar war eine Antwort auf diesen Kommentar stackoverflow.com/a/17118915/5923187, aber dieser Schritt wurde wegen meines Rufs gesperrt
...
und dies ist eine Ellipse…
Antworten:
Du brauchst Twig 1.6
quelle
{{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}
. Ich empfehle auch die Verwendung des Auslassungszeichens (…
) anstelle von 3 echten Punkten (...
){{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
|length
nach dem erstentext
aber das ist perfekt, danke!Warum nicht Twigs Truncate- oder Wordwrap-Filter verwenden? Es gehört zu den Zweigerweiterungen und lib ist, wie ich sehe, Teil von Symfony2.0.
quelle
...
sollte der zweite Parametertrue
wie{{ text|truncate(50, true)
require twig/extensions
Ein anderer ist:
quelle
Ich weiß, dass dies eine sehr alte Frage ist, aber ab Zweig 1.6 können Sie den Slice-Filter verwenden.
Der zweite Teil der Tilde ist optional, wenn Sie beispielsweise die Auslassungspunkte hinzufügen möchten.
Bearbeiten: Meine schlechte, ich sehe, dass die am besten bewertete Antwort den Slice-Filter verwendet.
quelle
@ olegkhuss-Lösung mit dem Namen UTF-8 Elipsis:
{{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text) }}
quelle
text
Variable ermöglicht.@mshobnr / @olegkhuss-Lösung in ein einfaches Makro umgewandelt:
Anwendungsbeispiel:
Nb Ich importiere eine Twig-Vorlage mit Makros und importiere sie als 'Werkzeuge' wie diese (Symfony):
Außerdem habe ich den HTML-Zeichencode durch das eigentliche Zeichen ersetzt. Dies sollte kein Problem sein, wenn UTF-8 als Dateicodierung verwendet wird. Auf diese Weise müssen Sie nicht verwenden
|raw
(da dies ein Sicherheitsproblem verursachen könnte).quelle
Eine noch elegantere Lösung besteht darin, den Text durch die Anzahl der Wörter (und nicht durch die Anzahl der Zeichen) zu begrenzen. Dies verhindert hässliche Durchbrüche (zB 'Stackov ...').
Hier ist ein Beispiel, in dem ich nur Textblöcke kürze, die länger als 10 Wörter sind:
quelle
Sie können auf folgende Weise einschränken. Erstens startet der Index und zweitens die Anzahl der Zeichen.
quelle
Verwenden Sie den Kürzungsfilter, um eine Zeichenfolge nach Erreichen des Grenzwerts abzuschneiden
Sie können truncate auch anweisen, ganze Wörter beizubehalten, indem Sie den zweiten Parameter auf true setzen. Wenn sich das letzte Wort im Trennzeichen befindet, wird beim Abschneiden das gesamte Wort ausgedruckt.
Wenn Sie das Trennzeichen ändern möchten, setzen Sie einfach den dritten Parameter auf das gewünschte Trennzeichen.
quelle
Update für Twig 2 und Twig 3.
Filter abschneiden ist nicht verfügbar, stattdessen können Sie U-Filter verwenden
Hier ist ein Beispiel:
Hinweis: Dieser Filter ist Teil von StringExtension, der von benötigt werden kann
quelle
Ich habe diesen einfachen Marco für den gleichen Zweck geschrieben, hoffe es hilft:
Verwendungsbeispiel 1 (Ausgabe: "meine lange Zeichenfolge hier ..."):
Verwendungsbeispiel 2 (Ausgabe: "kürzere Zeichenfolge!"):
quelle
Bugginess * in den neuen Drupal 8-Funktionen hier hat uns dazu inspiriert, unsere eigenen zu schreiben:
Dies berücksichtigt sowohl Wörter als auch Zeichen (* die Einstellung "Wortgrenze" in D8 zeigte nichts an).
quelle
Es ist besser, ein HTML-Zeichen zu verwenden
quelle
…
.