Symfony 2 twig ограничивает длину текста и помещает три точки

Как я могу ограничить длину текста, например 50, и нанести три точки на дисплей

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

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

{%endif%}

Ответ 1

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

Вам нужно Twig 1.6

Ответ 2

Почему бы не использовать фильтр обрезки нити или слова? Он относится к расширениям twig и lib является частью Symfony2.0, как я вижу.

{{ text|truncate(50) }}

Ответ 3

Другой:

{{ myentity.text[:50] ~ '...' }}

Ответ 4

Я знаю, что это очень старый вопрос, но из ветки 1.6 вы можете использовать фильтр среза;

{{ myentity.text|slice(0, 50) ~ '...' }}

Вторая часть из тильды необязательна, если вы хотите добавить что-то, например, многоточие.

Изменить:. Мой плохой, я вижу, что самый опрошенный ответ использует фильтр среза.

Ответ 5

Вы можете ограничить следующим образом. Сначала начинается индекс, а второй - количество символов.

**{{ results['text'][4:2] }}**

Ответ 6

Еще более элегантным решением является ограничение текста на количество слов (а не количество символов). Это предотвращает уродливые слезы (например, "Stackov..." ).

Вот пример, где я сокращаю только текстовые блоки длиной более 10 слов:

{% set text = myentity.text |split(' ') %} 

{% if text|length > 10 %} 
    {% for t in text|slice(0, 10) %}
        {{ t }} 
    {% endfor %}
    ...
{% else %}
    {{ text|join(' ') }}
{% endif %}

Ответ 7

Решение @olegkhuss с именем HTML Entity: {{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text)|raw }}

Ответ 8

@mshobnr/@olegkhuss решение, сделанное в простой макрос:

{% macro trunc(txt, len) -%}
    {{ txt|length > len ? txt|slice(0, len) ~ '…' : txt }}
{%- endmacro %}

Пример использования:

{{ tools.trunc('This is the text to truncate. ', 50) }}

N.b. Я импортирую шаблон Twig, содержащий макросы, и импортирую его как "инструменты", подобные этому (Symfony):

{% import "@AppBundle/tools.html.twig" as tools -%}

Кроме того, я заменил код символа html на фактический символ, это не должно быть проблемой при использовании UTF-8 в качестве кодировки файла. Таким образом, вам не нужно использовать |raw (поскольку это может вызвать проблему безопасности).

Ответ 9

Я написал этот простой марко с той же целью, надеюсь, что это поможет:

{%- macro stringMaxLength(str, maxLength) -%}
    {%- if str | length < maxLength -%}
        {{ str }}
    {%- else -%}
        {{ str|slice(0, maxLength) }}...
    {%- endif -%}
{%- endmacro -%}

Пример использования # 1 (вывод: "моя длинная строка здесь..." ):

{{ _self.stringMaxLength("my long string here bla bla bla la", 20) }}

Пример использования # 2 (вывод: "более короткая строка!" ):

{{ _self.stringMaxLength("shorter string!", 20) }}