Мы знаем, что при создании материалов, выводе содержимого через представление можно обрезать текст, просто выбрав краткую версию отображения в форматере поля.
Но как быть, если необходимо обрезать текст средставми шаблонизатора twig? Как действовать если стандартные возможности drupal не дают нужного результата?
Используем фильтр slice.
Сперва при помощи команды set назначим переменную нужному полю.
{% set textParagraph = content.field_paragraph_text|render|striptags %}
Затем применим фильтр slice к созданной переменной:
{{ textParagraph|length > 155 ? textParagraph|slice(0, 155) ~ '...' : textParagraph }} - если количество символов поля больше 155, то содержимое обрезается, если меньше, показывается полное поле.
или так:
{% if textParagraph|length > 155 %}
{{ textParagraph|slice(0, 155) ~ '...' }}
{% endif %}
Впринципе цель выполнена, но есть один ньюанс.
При таком подходе striptags удаляет html теги и заменяет множественные пробелы на 1 пробел. Что не есть хорошо ведь при выводе мы получаем наш текст среди множества пробелов.
Поэтому, делаем следующее:
{% set textParagraph = content.field_paragraph_text|render|striptags('<a>, <p>')|trim %}
Отменяем удаление нужным нам html тегов для фильтра striptags, указывая исключения в скобках. Это нужно для того, чтобы наша страница не теряла базовую разметку. В данном примере это теги <a> и <p>. Чтобы удалить лишние пробелы после striptags применяем фильтр |trim.
Задача решена!
И еще один практический момент хочу заметить.
{% if textParagraph|length > 1200 %}
{% autoescape false %}
{{ textParagraph|slice(0, 1200) }}
{% endautoescape %}
{% endif %}
Если количество символов больше 1200, то применяем фильтр автоэкранирования с атрибутом false, который отключает автоэкранирование и позволяет выводить содержимое блока без изменений. В противном случае striptags выведет html теги, как обычный текст.
P.S. Чтобы обрезать текст и добавить троеточие в конце поставьте ~ '...' после фильтра slice:
{{ content.field_paragraph_text|slice(0, 1200) ~ '...' }}
P.S.S. Чтобы удалить лишние пробелы после striptags примените фильтр |trim.
На этом все! Если вам что-то непонятно, задавайте вопросы в комментариях.
Если статья была полезна, обязательно ставьте лайк и делитесь материалом со своими друзьями в соцсетях.