Как я могу ограничить длину текста, например 50, и нанести три точки на дисплей
{% if myentity.text|length > 50 %}
{% block td_text %} {{ myentity.text}}{% endblock %}
{%endif%}
Как я могу ограничить длину текста, например 50, и нанести три точки на дисплей
{% if myentity.text|length > 50 %}
{% block td_text %} {{ myentity.text}}{% endblock %}
{%endif%}
{{ myentity.text|length > 50 ? myentity.text|slice(0, 50) ~ '...' : myentity.text }}
Вам нужно Twig 1.6
Почему бы не использовать фильтр обрезки нити или слова? Он относится к расширениям twig и lib является частью Symfony2.0, как я вижу.
{{ text|truncate(50) }}
Другой:
{{ myentity.text[:50] ~ '...' }}
Я знаю, что это очень старый вопрос, но из ветки 1.6 вы можете использовать фильтр среза;
{{ myentity.text|slice(0, 50) ~ '...' }}
Вторая часть из тильды необязательна, если вы хотите добавить что-то, например, многоточие.
Изменить:. Мой плохой, я вижу, что самый опрошенный ответ использует фильтр среза.
Вы можете ограничить следующим образом. Сначала начинается индекс, а второй - количество символов.
**{{ results['text'][4:2] }}**
Еще более элегантным решением является ограничение текста на количество слов (а не количество символов). Это предотвращает уродливые слезы (например, "Stackov..." ).
Вот пример, где я сокращаю только текстовые блоки длиной более 10 слов:
{% set text = myentity.text |split(' ') %}
{% if text|length > 10 %}
{% for t in text|slice(0, 10) %}
{{ t }}
{% endfor %}
...
{% else %}
{{ text|join(' ') }}
{% endif %}
Решение @olegkhuss с именем HTML Entity:
{{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text)|raw }}
@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
(поскольку это может вызвать проблему безопасности).
Я написал этот простой марко с той же целью, надеюсь, что это поможет:
{%- 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) }}