Dodatkowo, jeśli chcesz przyciąć na słowie, można zrobić to tak: {{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}. Polecam również użycie znaku wielokropka ( …) zamiast 3 prawdziwych kropek (... )
Aby dołączyć ...drugi parametr powinien być ustawiony truetaki jak{{ text|truncate(50, true)
Sithu
W rzeczywistości ustawienie drugiego parametru na true spowoduje, że zachowa on całe słowa. Domyślnie dodaje elipsy. Trzeci parametr może zmienić elipsy na dowolne. twig-extensions.readthedocs.io/en/latest/…
beta
1
Używając Symfony 2.8, musiałem zainstalować to rozszerzenie, aby z niego korzystać. require twig/extensions
{{ tools.trunc('This is the text to truncate. ',50)}}
Uwaga: Importuję szablon Twig zawierający makra i importuję go jako „narzędzia” w następujący sposób (Symfony):
{%import"@AppBundle/tools.html.twig"as tools -%}
Zastąpiłem również kod znaków html rzeczywistym znakiem, nie powinno to stanowić problemu przy użyciu UTF-8 jako kodowania pliku. W ten sposób nie musisz go używać |raw(ponieważ może to spowodować problem z bezpieczeństwem).
Jeszcze bardziej eleganckim rozwiązaniem jest ograniczenie tekstu liczbą słów (a nie liczbą znaków). Zapobiega to brzydkim przebiciom (np. „Stackov…”).
Oto przykład, w którym skracam tylko bloki tekstu dłuższe niż 10 słów:
{%set text = myentity.text |split(' ')%}{%if text|length >10%}{%for t in text|slice(0,10)%}{{ t }}{% endfor %}...{%else%}{{ text|join(' ')}}{% endif %}
Użyj filtru truncate, aby odciąć ciąg po osiągnięciu limitu
{{"Hello World!"|truncate(5)}}// default separator is ...
Dzień dobry...
Możesz także powiedzieć truncate, aby zachowywał całe słowa, ustawiając drugi parametr na true. Jeśli ostatnie słowo znajduje się w separatorze, obcięcie spowoduje wydrukowanie całego słowa.
{{"Hello World!"|truncate(7,true)}}// preserve words
Witaj świecie!
Jeśli chcesz zmienić separator, po prostu ustaw trzeci parametr na żądany separator.
Bugginess * w nowych możliwościach Drupala 8 zainspirował nas do napisania własnego:
<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>
Uwzględnia to zarówno słowa, jak i znaki (* ustawienie „granicy słów” w D8 nic nie wyświetlało).
Czy możesz dodać wyjaśnienie do swojej odpowiedzi? Dlaczego należy używać encji HTML? I dlaczego dodajesz to do tekstu w każdym przypadku, nawet jeśli tekst ma mniej niż 50 znaków?
Nico Haase
Cześć, jeśli napiszesz trzy kropki, będą to trzy oddzielne kropki, ale znak „trzech kropek” nazywa się wielokropkiem. Element HTML z wielokropkiem to ….
Théo Attali
A dlaczego nie użyć znaku Unicode dla tego wielokropka?
Nico Haase,
Ty też możesz tego użyć! ten komentarz był odpowiedzią na ten komentarz stackoverflow.com/a/17118915/5923187, ale ten ruch został zablokowany z powodu mojej reputacji
...
a to wielokropek…
Odpowiedzi:
Potrzebujesz Twig 1.6
źródło
{{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}
. Polecam również użycie znaku wielokropka (…
) zamiast 3 prawdziwych kropek (...
){{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
|length
pierwszego,text
ale to jest idealne, dziękuję!dlaczego nie użyć filtru obcinania lub zawijania słów twiga? Należy on do rozszerzeń twig, a lib jest częścią Symfony2.0, jak widzę.
źródło
...
drugi parametr powinien być ustawionytrue
taki jak{{ text|truncate(50, true)
require twig/extensions
Kolejny to:
źródło
Wiem, że to bardzo stare pytanie, ale od gałązki 1.6 możesz użyć filtra plasterków;
Druga część tyldy jest opcjonalna, jeśli chcesz coś dodać, na przykład wielokropek.
Edycja: Mój błąd, widzę, że najbardziej głosowana odpowiedź korzysta z filtra wycinków.
źródło
Rozwiązanie @olegkhuss o nazwie UTF-8 Elipsis:
{{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text) }}
źródło
text
zmienną.@mshobnr / @olegkhuss w prostym makrze:
Przykład użycia:
Uwaga: Importuję szablon Twig zawierający makra i importuję go jako „narzędzia” w następujący sposób (Symfony):
Zastąpiłem również kod znaków html rzeczywistym znakiem, nie powinno to stanowić problemu przy użyciu UTF-8 jako kodowania pliku. W ten sposób nie musisz go używać
|raw
(ponieważ może to spowodować problem z bezpieczeństwem).źródło
Jeszcze bardziej eleganckim rozwiązaniem jest ograniczenie tekstu liczbą słów (a nie liczbą znaków). Zapobiega to brzydkim przebiciom (np. „Stackov…”).
Oto przykład, w którym skracam tylko bloki tekstu dłuższe niż 10 słów:
źródło
Możesz ograniczyć w następujący sposób. Pierwszy to indeks początkowy, a drugi to liczba znaków.
źródło
Użyj filtru truncate, aby odciąć ciąg po osiągnięciu limitu
Możesz także powiedzieć truncate, aby zachowywał całe słowa, ustawiając drugi parametr na true. Jeśli ostatnie słowo znajduje się w separatorze, obcięcie spowoduje wydrukowanie całego słowa.
Jeśli chcesz zmienić separator, po prostu ustaw trzeci parametr na żądany separator.
źródło
Aktualizacja dla Twig 2 i Twig 3.
truncate filter nie jest dostępny, zamiast niego możesz użyć u-filter
Oto przykład:
Uwaga: ten filtr jest częścią StringExtension, którego może wymagać
źródło
Napisałem ten prosty marco w tym samym celu, mam nadzieję, że pomoże:
Przykład użycia # 1 (dane wyjściowe: „tutaj mój długi ciąg ...”):
Przykład użycia # 2 (dane wyjściowe: „krótszy ciąg!”):
źródło
Bugginess * w nowych możliwościach Drupala 8 zainspirował nas do napisania własnego:
Uwzględnia to zarówno słowa, jak i znaki (* ustawienie „granicy słów” w D8 nic nie wyświetlało).
źródło
Lepiej jest użyć znaku HTML
źródło
…
.