esta debería ser la respuesta, todavía funciona hasta ahora;)
whalesingswee
¿Cómo podemos agregar un enlace a ...?
mburakergenc
11
Además, si se desea recortar en una palabra, puede hacerlo de esta manera: {{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}. También recomiendo usar el carácter de puntos suspensivos ( …) en lugar de 3 puntos reales ( ...)
Nemo64
2
Más corto:{{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
mts knn
1
@ Nemo64 solo te estás perdiendo el |lengthprimero textpero es perfecto, ¡gracias!
mtefi
116
¿Por qué no utilizar el filtro de truncamiento o ajuste de palabras de Twig? Pertenece a las extensiones de ramita y lib es parte de Symfony2.0 como veo.
Estoy usando Symfony 2.3 y el filtro truncado no forma parte de las extensiones predeterminadas. Por lo tanto, recurrí a la solución de Manuel en su lugar.
Para agregar ..., el segundo parámetro debe establecerse truecomo{{ text|truncate(50, true)
Sithu
En realidad, establecer el segundo parámetro en verdadero hará que conserve palabras completas. Agrega las elipses por defecto. El tercer parámetro puede cambiar las elipses a lo que quieras. twig-extensions.readthedocs.io/en/latest/…
beta
1
Usando Symfony 2.8, tuve que instalar esta extensión para usarla. require twig/extensions
{{ tools.trunc('This is the text to truncate. ',50)}}
Nota: importo una plantilla Twig que contiene macros y la importo como 'herramientas' como esta (Symfony):
{%import"@AppBundle/tools.html.twig"as tools -%}
Además, reemplacé el código de caracteres html con el carácter real, esto no debería ser un problema al usar UTF-8 como codificación del archivo. De esta manera no tiene que usar |raw(ya que podría causar un problema de seguridad).
Una solución aún más elegante es limitar el texto por la cantidad de palabras (y no por la cantidad de caracteres). Esto evita los rasgaduras feas (por ejemplo, 'Stackov ...').
Aquí hay un ejemplo donde acorto solo bloques de texto de más de 10 palabras:
{%set text = myentity.text |split(' ')%}{%if text|length >10%}{%for t in text|slice(0,10)%}{{ t }}{% endfor %}...{%else%}{{ text|join(' ')}}{% endif %}
Use el filtro truncado para cortar una cadena después de alcanzar el límite
{{"Hello World!"|truncate(5)}}// default separator is ...
Hola...
También puede decirle a truncate que conserve palabras enteras estableciendo el segundo parámetro en verdadero. Si la última palabra está en el separador, truncar imprimirá toda la palabra.
{{"Hello World!"|truncate(7,true)}}// preserve words
Aquí Hola Mundo!
Si desea cambiar el separador, simplemente configure el tercer parámetro en su separador deseado.
Bugginess * en las nuevas capacidades de Drupal 8 aquí nos inspiró a escribir el nuestro:
<ahref="{{ view_node }}">{% if title|length > 32 %}{% set title_array = title|split(' ') %}{% set title_word_count = 0 %}{% for ta in title_array %}{% set word_count = ta|length %}{% if title_word_count < 32 %}{% set title_word_count = title_word_count + word_count %}{{ ta }} {% endif %}{% endfor %}...{% else %}{{ title }}{% endif %}</a>
Esto tiene en cuenta tanto las palabras como los caracteres (* la configuración del "límite de palabras" en D8 no mostraba nada).
¿Puedes agregar alguna explicación a tu respuesta? ¿Por qué debería uno usar una entidad HTML? ¿Y por qué lo agrega al texto en todos y cada uno de los casos, incluso si el texto tiene menos de 50 caracteres?
Nico Haase
Hola, si escribes tres puntos, son tres puntos separados, pero el carácter de "tres puntos" se llama puntos suspensivos. La entidad html de puntos suspensivos es ….
Théo Attali
¿Y por qué no usar el carácter unicode para esa elipsis?
Nico Haase
Tú puedes usarlo también ! este comentario fue una respuesta a ese comentario stackoverflow.com/a/17118915/5923187 pero ese movimiento fue bloqueado debido a mi reputación
...
y esta es una elipsis…
Respuestas:
Necesitas Twig 1.6
fuente
{{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}
. También recomiendo usar el carácter de puntos suspensivos (…
) en lugar de 3 puntos reales (...
){{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
|length
primerotext
pero es perfecto, ¡gracias!¿Por qué no utilizar el filtro de truncamiento o ajuste de palabras de Twig? Pertenece a las extensiones de ramita y lib es parte de Symfony2.0 como veo.
fuente
...
, el segundo parámetro debe establecersetrue
como{{ text|truncate(50, true)
require twig/extensions
Otro es:
fuente
Sé que esta es una pregunta muy antigua, pero desde twig 1.6 puedes usar el filtro de división;
La segunda parte de la tilde es opcional si desea agregar algo, por ejemplo, los puntos suspensivos.
Editar: Mi error, veo que la respuesta más votada hace uso del filtro de división.
fuente
Solución @olegkhuss con elipsis UTF-8 con nombre:
{{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text) }}
fuente
text
variable.Solución @mshobnr / @olegkhuss hecha en una macro simple:
Ejemplo de uso:
Nota: importo una plantilla Twig que contiene macros y la importo como 'herramientas' como esta (Symfony):
Además, reemplacé el código de caracteres html con el carácter real, esto no debería ser un problema al usar UTF-8 como codificación del archivo. De esta manera no tiene que usar
|raw
(ya que podría causar un problema de seguridad).fuente
Una solución aún más elegante es limitar el texto por la cantidad de palabras (y no por la cantidad de caracteres). Esto evita los rasgaduras feas (por ejemplo, 'Stackov ...').
Aquí hay un ejemplo donde acorto solo bloques de texto de más de 10 palabras:
fuente
Puede limitar de la siguiente manera. El primero es el índice de inicio y el segundo es el número de caracteres.
fuente
Use el filtro truncado para cortar una cadena después de alcanzar el límite
También puede decirle a truncate que conserve palabras enteras estableciendo el segundo parámetro en verdadero. Si la última palabra está en el separador, truncar imprimirá toda la palabra.
Si desea cambiar el separador, simplemente configure el tercer parámetro en su separador deseado.
fuente
Actualización para Twig 2 y Twig 3.
el filtro truncado no está disponible, en su lugar, puede usar u-filter
Aquí hay un ejemplo:
Nota: este filtro es parte de StringExtension que puede ser requerido por
fuente
Escribí este marco simple con el mismo propósito, espero que ayude:
Ejemplo de uso # 1 (Salida: "mi cadena larga aquí ..."):
Ejemplo de uso # 2 (Salida: "cadena más corta"):
fuente
Bugginess * en las nuevas capacidades de Drupal 8 aquí nos inspiró a escribir el nuestro:
Esto tiene en cuenta tanto las palabras como los caracteres (* la configuración del "límite de palabras" en D8 no mostraba nada).
fuente
Es mejor usar un caracter HTML
fuente
…
.