Я поставил Twig, на чистый PHP, передал туда параметры и возник такой вопрос:
У меня есть такой код (выводит текст):
<p>{{ comment.text }}</p>
Как мне разбить этот текст так, чтобы выводило с него 20 символов и была надпись: "показать полный текст"?
К примеру в PHP, это можно сделать через функцию substr().
Но мне нужно именно в Twig это сделать, ибо в самом PHP не прокатит, так как в Twig разбиваю на foreach, и будет сложно.
Обрезать тексты через substr() нельзя, потому что там могут быть символы состоящие из нескольких байт, а substr() обрезает "побайтно". Для Twig шаблонов, как уже было сказано в соседнем ответе, есть фильтр slice, но и он не очень хорош, поскольку "режет" слова. Лучше обрезать так, чтобы оставались целые слова.
В Twig поможет расширение. Использовать так {{ comment.text|truncate(20, true) }} Нужно учитывать, что данная функция обрезает по пробелу после достижения длины ограничения (то есть строка будет все-таки немного длинее)
Дополнительно можно передать контент, который будет выведен после обрезки (если она была). По-умолчанию это три точки. Не уверен что можно вставить html-тег (скорее всего нужно будет отключить автоэкранирование и экранировать текст перед обрезкой вручную (фильтром escape или e). Как-то так
{{ comment.text|e|truncate(20, true, '... <a href="#" class="js-more">показать полный текст</a>')|raw }}
Как вариант, можно написать свой фильтр, который будет обрезать так как вы хотите.
См. также:
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники