theming – ¿Cómo recortar el texto del cuerpo (field_body)?

Pregunta:

Creé una vista para un nodo que muestra el contenido como entidad renderizada. Entre otros, genero el campo del cuerpo en la plantilla de ramitas:

{{ 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 también recorta los caracteres HTML.

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 ramitas. Pero para contar el texto tengo que renderizarlo primero. Por lo tanto, 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: Intenté resolver el problema en template_preprocess_node (). Aquí también tengo el mismo problema al contar el marcado HTML.

$body_text = $node->get('field_body')->getValue()[0]['value'];
$trimmed_text = substr($body_text, 0, 200) . '...';

¿Cómo puedo recortar correctamente mi texto?

¡Muchas gracias por su ayuda!

Respuesta:

Hay algunas soluciones que puede probar, pero tenga en cuenta que truncar cadenas con html generalmente es una mala idea debido a que existen posibles etiquetas no cerradas o mal formadas.

1. Utilice | raw para generar el html como html, puede producir etiquetas con formato incorrecto:

{% set text = content.field_body|render %}
{{ text|length > 200 ? text|slice(0, 200)|raw ~ '...' : text|raw }}

2. Primero, elimine html, más limpio:

{% set text = content.field_body|render|striptags %}
{{ text|length > 200 ? text|slice(0, 200) ~ '...' : text }}

3. Registre una extensión twig (no probada):

https://gist.github.com/leon/2857883

Otra extensión útil que puede consultar es la extensión de texto, que le ayuda a evitar cortar palabras:

http://twig.sensiolabs.org/doc/extensions/text.html

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım