Eu criei uma exibição para um nó que mostra o conteúdo como entidade renderizada. Entre outros, eu mostro o campo body no modelo de galho:
{{ content.field_body }}
Agora, gostaria de limitar o texto a 200 caracteres e colocar três pontos. Eu testei três maneiras diferentes de fazer isso, mas nada funcionou. O problema é que cada caminho conta e apara os caracteres HTML também.
1: Adicionei o formato "Aparado" em "Gerenciar exibição" => O texto é limitado, mas não está correto. E eu não tenho os três pontos.
2: Eu aparei o texto no modelo de galho. Mas para contar o texto, tenho que renderizá-lo primeiro. Assim, o twig gera o texto como HTML (vejo tags HTML na minha página!)
{% set text = content.field_body|render %}
{{ text|length > 200 ? text|slice(0, 200) ~ '...' : text }}
3: Tentei resolver o problema em template_preprocess_node (). Aqui também tenho o mesmo problema em contar a marcação HTML.
$body_text = $node->get('field_body')->getValue()[0]['value'];
$trimmed_text = substr($body_text, 0, 200) . '...';
Como posso aparar meu texto corretamente?
Muito obrigado pela sua ajuda!
Agora você pode fazer isso com o módulo twig_extender e usá-lo
|truncate
.Aqui está um exemplo de como usá-lo no modelo .twig, observe que também estou usando twig_field_value :
Nota: Normalmente, mantenho minhas configurações de desenvolvimento (./admin/config/development/devel) definidas para usar o varfumper dumper Symfony e posso descobrir a cadeia com
ou seja:
{{ devel_dump(content.field_name|field_value) }}
fonte
Melhorias:
|trim
para se livrar de espaço em brancoslice()
esplit()
…
) em vez de "..."|raw
a saída{% set text = content.field_header_intro|render|striptags|trim %}
{{ (text|length > 200 ? text|slice(0, 201)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text)|raw }}</code>
fonte
É assim que eu lidei com isso.
Exemplo:
campo - nó - corpo - article.html.twig
fonte