Кроме того, если вы хотите , чтобы обрезать на слово, вы можете сделать это следующим образом : {{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}. Я также рекомендую использовать символ многоточия ( …) вместо 3 реальных точек ( ...)
Для добавления ...второй параметр должен быть установлен , trueнапример , как{{ text|truncate(50, true)
Ситху
Фактически установка второго параметра в значение true позволит сохранить слова целиком. По умолчанию он добавляет эллипсы. Третий параметр может изменить эллипсы на что угодно. twig-extensions.readthedocs.io/en/latest/…
beta
1
Используя Symfony 2.8, мне пришлось установить это расширение, чтобы использовать его. require twig/extensions
{{ tools.trunc('This is the text to truncate. ',50)}}
Nb. Я импортирую шаблон Twig, содержащий макросы, и импортирую его как «инструменты» следующим образом (Symfony):
{%import"@AppBundle/tools.html.twig"as tools -%}
Кроме того, я заменил код символа html фактическим символом, это не должно быть проблемой при использовании UTF-8 в качестве кодировки файла. Таким образом, вам не нужно использовать |raw(так как это может вызвать проблемы с безопасностью).
Еще более элегантное решение - ограничить текст количеством слов (а не количеством символов). Это предотвращает некрасивые надрывы (например, «Стакков ...»).
Вот пример, в котором я сокращаю только текстовые блоки длиной более 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 ...
Привет...
Вы также можете указать truncate сохранять целые слова, установив для второго параметра значение true. Если последнее слово находится на разделителе, усечение распечатает все слово.
{{"Hello World!"|truncate(7,true)}}// preserve words
Привет, мир!
Если вы хотите изменить разделитель, просто установите третий параметр на желаемый разделитель.
Ошибка * в новых возможностях Drupal 8 вдохновила нас на написание собственных:
<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>
При этом учитываются как слова, так и символы (* настройка «границы слова» в D8 ничего не отображала).
Не могли бы вы пояснить свой ответ? Зачем использовать HTML-сущность? И почему вы добавляете его к тексту в каждом случае, даже если длина текста меньше 50 символов?
Нико Хаасе
Привет, если вы напишете три точки, это три отдельные точки, но символ «три точки» называется многоточием. HTML-объект с многоточием - это ….
Тео Аттали
И почему бы не использовать для этого многоточия символ юникода?
Нико Хаасе
Вы тоже можете его использовать! этот комментарий был ответом на этот комментарий stackoverflow.com/a/17118915/5923187, но этот ход был заблокирован из-за моей репутации
...
и это многоточие…
Ответы:
Вам нужен Twig 1.6
источник
{{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}
. Я также рекомендую использовать символ многоточия (…
) вместо 3 реальных точек (...
){{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
|length
первого,text
но это прекрасно, спасибо!почему бы не использовать фильтр twig truncate или wordwrap? Он принадлежит к расширениям twig, а lib, как я вижу, является частью Symfony2.0.
источник
...
второй параметр должен быть установлен ,true
например , как{{ text|truncate(50, true)
require twig/extensions
Еще один:
источник
Я знаю, что это очень старый вопрос, но в ветке 1.6 вы можете использовать фильтр срезов;
Вторая часть тильды необязательна, если вы хотите что-то добавить, например, многоточие.
Изменить: Плохо, я вижу, что в самом популярном ответе используется фильтр срезов.
источник
Решение @olegkhuss с именем UTF-8 Elipsis:
{{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text) }}
источник
text
переменную.Решение @mshobnr / @olegkhuss в виде простого макроса:
Пример использования:
Nb. Я импортирую шаблон Twig, содержащий макросы, и импортирую его как «инструменты» следующим образом (Symfony):
Кроме того, я заменил код символа html фактическим символом, это не должно быть проблемой при использовании UTF-8 в качестве кодировки файла. Таким образом, вам не нужно использовать
|raw
(так как это может вызвать проблемы с безопасностью).источник
Еще более элегантное решение - ограничить текст количеством слов (а не количеством символов). Это предотвращает некрасивые надрывы (например, «Стакков ...»).
Вот пример, в котором я сокращаю только текстовые блоки длиной более 10 слов:
источник
Ограничить можно следующим образом. Первый - это начальный индекс, а второй - количество символов.
источник
Используйте фильтр усечения, чтобы обрезать строку после достижения лимита
Вы также можете указать truncate сохранять целые слова, установив для второго параметра значение true. Если последнее слово находится на разделителе, усечение распечатает все слово.
Если вы хотите изменить разделитель, просто установите третий параметр на желаемый разделитель.
источник
Обновление для Twig 2 и Twig 3.
фильтр усечения недоступен, вместо него можно использовать u-фильтр
вот пример:
Примечание: этот фильтр является частью StringExtension, который может потребоваться
источник
Я написал этого простого марко для той же цели, надеюсь, это поможет:
Пример использования №1 (Вывод: «моя длинная строка здесь ...»):
Пример использования № 2 (Вывод: «более короткая строка!»):
источник
Ошибка * в новых возможностях Drupal 8 вдохновила нас на написание собственных:
При этом учитываются как слова, так и символы (* настройка «границы слова» в D8 ничего не отображала).
источник
Лучше использовать символ HTML
источник
…
.