답변:
{{ myentity.text|length > 50 ? myentity.text|slice(0, 50) ~ '...' : myentity.text }}
당신은 나뭇 가지 1.6 필요
{{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}
. 또한 …
3 개의 실제 점 ( ...
) 대신 줄임표 문자 ( )를 사용하는 것이 좋습니다.
{{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
|length
처음부터 그냥 빠졌지 만 text
완벽합니다. 감사합니다!
왜 나뭇 가지 자르기 또는 워드 랩 필터를 사용하지 않습니까? 그것은 나뭇 가지 확장에 속하며 lib는 내가 본 것처럼 Symfony2.0의 일부입니다.
{{ text|truncate(50) }}
...
두 번째 매개 변수를 다음 true
과 같이 설정해야합니다.{{ text|truncate(50, true)
require twig/extensions
다른 하나는 다음과 같습니다.
{{ myentity.text[:50] ~ '...' }}
나는 이것이 매우 오래된 질문이라는 것을 알고 있지만 나뭇 가지 1.6에서 슬라이스 필터를 사용할 수 있습니다.
{{ myentity.text|slice(0, 50) ~ '...' }}
줄임표의 두 번째 부분은 줄임표와 같은 것을 추가하려는 경우 선택 사항입니다.
편집 : 내 나쁜, 나는 가장 많이 투표 된 답변이 슬라이스 필터를 사용한다는 것을 알았습니다.
UTF-8 Elipsis라는 @olegkhuss 솔루션 :
{{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text) }}
text
변수를 통한 HTML 삽입을 가능하게 합니다.
@mshobnr / @olegkhuss 솔루션은 간단한 매크로로 만들어졌습니다.
{% macro trunc(txt, len) -%}
{{ txt|length > len ? txt|slice(0, len) ~ '…' : txt }}
{%- endmacro %}
사용 예 :
{{ tools.trunc('This is the text to truncate. ', 50) }}
Nb 매크로가 들어있는 Twig 템플릿을 가져 와서 다음과 같이 'tools'로 가져옵니다 (Symfony).
{% import "@AppBundle/tools.html.twig" as tools -%}
또한 html 문자 코드를 실제 문자로 바 꾸었습니다. UTF-8을 파일 인코딩으로 사용할 때 문제가되지 않습니다. 이렇게 |raw
하면 보안 문제가 발생할 수 있으므로 사용할 필요가 없습니다 .
더 우아한 해결책은 텍스트를 단어 수로 제한하는 것입니다 (문자 수가 아닌). 이렇게하면 못생긴 찢어짐을 방지 할 수 있습니다 (예 : 'Stackov ...').
다음은 10 단어보다 긴 텍스트 블록 만 줄이는 예제입니다.
{% set text = myentity.text |split(' ') %}
{% if text|length > 10 %}
{% for t in text|slice(0, 10) %}
{{ t }}
{% endfor %}
...
{% else %}
{{ text|join(' ') }}
{% endif %}
한계에 도달 한 후 자르기 필터를 사용하여 문자열 잘라 내기
{{ "Hello World!"|truncate(5) }} // default separator is ...
여보세요...
두 번째 매개 변수를 true로 설정하여 전체 단어를 유지하도록 자르라고 지시 할 수도 있습니다. 마지막 단어가 구분 기호에 있으면 자르면 전체 단어가 인쇄됩니다.
{{ "Hello World!"|truncate(7, true) }} // preserve words
여보세요 세계!
구분 기호를 변경하려면 세 번째 매개 변수를 원하는 구분 기호로 설정하십시오.
{{ "Hello World!"|truncate(7, false, "??") }}
안녕 W ??
나는이 목적을 위해이 간단한 마르코를 썼다.
{%- macro stringMaxLength(str, maxLength) -%}
{%- if str | length < maxLength -%}
{{ str }}
{%- else -%}
{{ str|slice(0, maxLength) }}...
{%- endif -%}
{%- endmacro -%}
사용법 예 # 1 (출력 : "my long string here ...") :
{{ _self.stringMaxLength("my long string here bla bla bla la", 20) }}
사용 예 # 2 (출력 : "shorter string!") :
{{ _self.stringMaxLength("shorter string!", 20) }}
새로운 Drupal 8 기능의 버그 *는 다음과 같이 작성했습니다.
<a href="{{ 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>
이것은 단어와 문자를 모두 고려합니다 (* D8의 "단어 경계"설정은 아무 것도 표시하지 않았습니다).
HTML 문자를 사용하는 것이 좋습니다
{{ entity.text[:50] }}…
…
입니다.
...
이며 이것은 줄임표입니다…