He creado una vista para un nodo que muestra el contenido como entidad representada. Entre otros, imprimo el campo del cuerpo en la plantilla de ramita:
{{ content.field_body }}
Ahora, me gustaría limitar el texto a 200 caracteres y poner tres puntos. He probado tres formas diferentes de hacerlo, pero nada ha funcionado. El problema es que cada forma cuenta y recorta los caracteres HTML también.
1: He agregado el formato "Recortado" en "Administrar pantalla" => El texto es limitado pero no correcto. Y no tengo los tres puntos.
2: He recortado el texto en la plantilla de ramita. Pero para contar el texto, primero tengo que representarlo. De este modo, twig genera el texto como HTML (¡veo etiquetas HTML en mi página!)
{% set text = content.field_body|render %}
{{ text|length > 200 ? text|slice(0, 200) ~ '...' : text }}
3: He intentado resolver el problema en template_preprocess_node (). Aquí tengo el mismo problema con contar el marcado HTML también.
$body_text = $node->get('field_body')->getValue()[0]['value'];
$trimmed_text = substr($body_text, 0, 200) . '...';
¿Cómo puedo recortar mi texto correctamente?
¡Muchas gracias por su ayuda!
Ahora puede hacer esto con el módulo twig_extender y usar
|truncate
.Aquí hay un ejemplo de cómo usarlo en la plantilla .twig, tenga en cuenta que también estoy usando twig_field_value :
nota: generalmente mantengo mi configuración de desarrollo (./admin/config/development/devel) configurada para usar Symfony var-dumper y puedo descifrar la cadena con
es decir:
{{ devel_dump(content.field_name|field_value) }}
fuente
Mejoras:
|trim
de deshacerse de los espacios en blancoslice()
ysplit()
…
) en lugar de "..."|raw
La salida{% set text = content.field_header_intro|render|striptags|trim %}
{{ (text|length > 200 ? text|slice(0, 201)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text)|raw }}</code>
fuente
Así es como manejé esto.
Ejemplo:
campo - nodo - cuerpo - article.html.twig
fuente