Я создал вид для узла, который показывает контент как визуализированный объект. Среди прочего, я вывожу поле тела в шаблоне ветки:
{{ content.field_body }}
Теперь я хотел бы ограничить текст до 200 символов и поставить три точки. Я протестировал три разных способа сделать это, но ничего не помогло. Проблема в том, что каждый способ также учитывает и корректирует символы HTML.
1: Я добавил формат «Trimmed» в «Manage display» => Текст ограничен, но не корректен. И у меня нет трех точек.
2: я урезал текст в шаблоне ветки. Но чтобы посчитать текст, я должен сделать это первым. Таким образом, веточка выводит текст в виде HTML (я вижу теги HTML на моей странице!)
{% set text = content.field_body|render %}
{{ text|length > 200 ? text|slice(0, 200) ~ '...' : text }}
3: я пытался решить проблему в template_preprocess_node (). Здесь у меня та же проблема с подсчетом разметки HTML тоже.
$body_text = $node->get('field_body')->getValue()[0]['value'];
$trimmed_text = substr($body_text, 0, 200) . '...';
Как я могу обрезать свой текст правильно?
Спасибо большое за помощь!
Теперь вы можете сделать это с помощью модуля twig_extender и использовать его
|truncate
.Вот пример того, как использовать его в шаблоне .twig, обратите внимание, что я также использую twig_field_value :
примечание: я обычно держу свои настройки devel (./admin/config/development/devel) настроенными на использование Symfony var-dumper и могу определить цепочку с помощью
то есть:
{{ devel_dump(content.field_name|field_value) }}
источник
Улучшения:
|trim
чтобы избавиться от неиспользованногоslice()
иsplit()
…
) вместо "..."|raw
выход{% set text = content.field_header_intro|render|striptags|trim %}
{{ (text|length > 200 ? text|slice(0, 201)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text)|raw }}</code>
источник
Вот как я справился с этим.
Пример:
поле - узел - тело - article.html.twig
источник