Smart Trim
Un formateador de campo que proporciona recorte inteligente de texto con más control que el formateador incorporado "Summary or Trimmed" del núcleo de Drupal.
smart_trim
Install
composer require 'drupal/smart_trim:^2.2'
composer require 'drupal/smart_trim:^2.1'
Overview
Smart Trim implementa un formateador de campo mejorado para campos de texto (text, text_long, text_with_summary, string y string_long) que mejora significativamente el formateador "Summary or Trimmed" del núcleo de Drupal. Proporciona control granular sobre cómo se trunca el contenido de texto para su visualización en teasers, listas y otras vistas condensadas.
El módulo maneja inteligentemente el contenido HTML durante el truncamiento, preservando la estructura de marcado válida mientras recorta a la longitud especificada. Puede recortar por conteo de caracteres o conteo de palabras, e incluye un manejo sofisticado de los límites de palabras para evitar cortar palabras a la mitad. Cuando se preserva el HTML, el módulo cierra correctamente cualquier etiqueta abierta para mantener un marcado válido.
Smart Trim también proporciona funcionalidad opcional de enlace "Más" con amplias opciones de personalización incluyendo texto personalizado, clases CSS, aria-label para accesibilidad y la capacidad de abrir enlaces en nuevas ventanas. El módulo se integra con el módulo Token para permitir valores dinámicos en el texto del enlace y aria-labels.
Para desarrolladores, Smart Trim ofrece filtros Twig (smart_trim_chars y smart_trim_words) que pueden usarse directamente en plantillas, así como un servicio TruncateHTML para truncamiento programático de texto. El módulo también proporciona un hook (hook_smart_trim_link_modify) para permitir que otros módulos personalicen el enlace "Más".
Features
- Recortar texto por conteo de caracteres o palabras con manejo inteligente de límites de palabras
- Sufijo configurable (ej., puntos suspensivos) añadido al texto recortado con soporte Unicode (\u2026)
- Enlace "Más" opcional con texto personalizable, clase CSS, aria-label y configuración de ventana destino
- Opción de eliminar etiquetas HTML que remueve todo el HTML mientras preserva el contenido de texto
- Opción de preservar HTML que mantiene la estructura de marcado válida durante el truncamiento
- Manejo del campo de resumen con opciones para usar el resumen tal cual, recortar el resumen o ignorar el resumen
- Soporte de reemplazo de Token en los campos de texto del enlace "Más" y aria-label
- Filtros Twig (smart_trim_chars y smart_trim_words) para uso en plantillas personalizadas
- Plantilla de tema (smart-trim.html.twig) con amplias sugerencias de tema para personalización
- API de Hook (hook_smart_trim_link_modify) para modificar programáticamente el enlace "Más"
- Manejo apropiado de comentarios HTML, figcaption, script y etiquetas style durante la eliminación
- Eliminación automática de puntuación final antes de añadir el sufijo
- Opción de recorte de longitud cero para ocultar contenido completamente mientras se muestra el resumen
Use Cases
Creación de Teasers de Artículos
Configurar el campo Body en el modo de vista Teaser del tipo de contenido Article para usar Smart Trim. Establecer longitud de recorte a 300 caracteres con un sufijo de puntos suspensivos (\u2026). Habilitar el enlace More con texto 'Leer más' y aria-label 'Leer más sobre [node:title]' para accesibilidad. Habilitar 'Strip HTML' para asegurar una salida de texto limpia sin que medios incrustados o formato afecten el diseño.
Recorte Basado en Palabras para Publicaciones de Blog
Para páginas de listado de blog donde se desean longitudes de teaser consistentes independientemente de la complejidad de las palabras, usar recorte basado en palabras. Establecer recorte a 50 palabras para asegurar que cada teaser proporcione aproximadamente la misma cantidad de contenido mientras mantiene la legibilidad.
Uso de Filtros Twig en Plantillas Personalizadas
En una plantilla de nodo personalizada, usar el filtro Twig para recortar un valor de campo directamente: {{ content.field_description|render|smart_trim_chars(150, '...') }}. Esto es útil cuando se necesita recorte en contextos donde el formateador de campo no puede configurarse, como bloques personalizados o diseños complejos.
Enlaces More Condicionales
Habilitar 'Mostrar enlace More solo cuando el contenido está recortado' para prevenir mostrar enlaces Read More redundantes en contenido corto. Esto crea una interfaz más limpia donde el enlace solo aparece cuando realmente hay más contenido para leer.
Teasers con Accesibilidad Mejorada
Configurar el enlace More con un aria-label descriptivo como 'Continuar leyendo el artículo completo sobre [node:title]' para proporcionar a usuarios de lectores de pantalla contexto sobre a dónde lleva el enlace, en lugar de solo escuchar 'Más' repetidamente.
Visualización con Reconocimiento de Resumen
Para campos text_with_summary (como Body), configurar el manejo de resumen a 'Usar resumen si está presente, y no recortar'. Esto respeta los resúmenes proporcionados por el autor mientras recurre al recorte automático cuando no existe un resumen.
Recorte de Longitud Cero para Teasers
Usar la opción 'Respetar longitud de recorte cero' combinada con una longitud de recorte de 0 para ocultar el contenido del body completamente en un teaser mientras se sigue mostrando el enlace More. Esto es útil para páginas de listado donde solo se desean títulos y enlaces Read More.
Tips
- Usar \u2026 en el campo de sufijo para mostrar un carácter de puntos suspensivos apropiado (…) en lugar de tres puntos
- Sobrescribir la plantilla smart-trim.html.twig en tu tema para control completo sobre el marcado de salida
- Usar sugerencias de tema como smart_trim__node__article__body para personalización específica por campo
- La opción wrap_output está obsoleta; usar sobrescrituras de plantilla en su lugar para envolver contenido
- El reemplazo de Token en el texto del enlace More permite etiquetas de enlace dinámicas y contextuales
- El servicio TruncateHTML puede inyectarse en código personalizado para truncamiento programático de texto
- Al usar filtros Twig, encadenar con |render primero si el valor podría ser un render array: {{ value|render|smart_trim_chars(100) }}
Technical Details
Hooks 1
hook_smart_trim_link_modify
Permite a los módulos modificar el enlace "Más" de Smart Trim antes de que sea renderizado. Este hook se invoca durante el renderizado del formateador de campo cuando se muestra un enlace More.
Troubleshooting 6
Asegurar que la entidad tiene un ID (guardada en base de datos) y tiene una plantilla de enlace canónico. Las previsualizaciones de Inline Entity Form pueden no mostrar el enlace. También verificar que 'Mostrar enlace More solo cuando el contenido está recortado' no esté habilitado cuando el contenido no está siendo recortado.
Esto fue corregido en la versión 2.1.1. Actualizar a la última versión. El módulo ahora maneja correctamente la decodificación de entidades HTML durante el proceso de truncamiento.
Esto fue abordado en la versión 2.1.0. El módulo ahora añade espacios antes de las etiquetas de apertura antes de eliminar para asegurar que las palabras no se junten.
Usar secuencias de escape Unicode en el campo de sufijo. Por ejemplo, usar \u2026 para el carácter de puntos suspensivos (…). Esto fue mejorado en la versión 2.1.1.
El texto del enlace More ahora usa traducción de configuración. Limpiar cachés después de actualizar y usar la interfaz de Configuration Translation para traducir los valores.
Este era un bug corregido en la versión 2.2.0 donde los estados del formulario solo funcionaban para campos llamados 'body'. Actualizar a la última versión.