[symfony] 심포니 2 나뭇 가지가 텍스트의 길이를 제한하고 세 개의 점을 넣습니다.

텍스트 길이 (예 : 50)를 어떻게 제한하고 디스플레이에 3 개의 점을 넣을 수 있습니까?

{% if myentity.text|length > 50 %}

{% block td_text %} {{ myentity.text}}{% endblock %}

{%endif%}



답변

{{ myentity.text|length > 50 ? myentity.text|slice(0, 50) ~ '...' : myentity.text  }}

당신은 나뭇 가지 1.6 필요


답변

왜 나뭇 가지 자르기 또는 워드 랩 필터를 사용하지 않습니까? 그것은 나뭇 가지 확장에 속하며 lib는 내가 본 것처럼 Symfony2.0의 일부입니다.

{{ text|truncate(50) }}


답변

다른 하나는 다음과 같습니다.

{{ 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) }}


답변

@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 %}