Respostas:
{{ myentity.text|length > 50 ? myentity.text|slice(0, 50) ~ '...' : myentity.text }}
Você precisa do Twig 1.6
{{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}
. Eu também recomendo usar o personagem de reticências ( …
) em vez de 3 pontos reais ( ...
)
{{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
|length
depois do primeiro, text
mas isso é perfeito, obrigado!
por que não usar o filtro truncado ou wordwrap do galho? Pertence a extensões de galhos e lib faz parte do Symfony2.0, como eu vejo.
{{ text|truncate(50) }}
...
, o segundo parâmetro deve ser definido true
como{{ text|truncate(50, true)
require twig/extensions
Outro é:
{{ myentity.text[:50] ~ '...' }}
Eu sei que essa é uma pergunta muito antiga, mas do twig 1.6 você pode usar o filtro de fatia;
{{ myentity.text|slice(0, 50) ~ '...' }}
A segunda parte do til é opcional, se você quiser adicionar algo, por exemplo, reticências.
Edit: Meu mal, eu vejo a resposta mais votada fazer uso do filtro de fatia.
solução @olegkhuss com reticências UTF-8 nomeadas:
{{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text) }}
text
variável
Solução @mshobnr / @olegkhuss transformada em uma macro simples:
{% macro trunc(txt, len) -%}
{{ txt|length > len ? txt|slice(0, len) ~ '…' : txt }}
{%- endmacro %}
Exemplo de uso:
{{ tools.trunc('This is the text to truncate. ', 50) }}
Nota: Eu importo um modelo Twig contendo macros e importo-o como 'ferramentas' como esta (Symfony):
{% import "@AppBundle/tools.html.twig" as tools -%}
Além disso, substituí o código de caractere html pelo caractere real. Isso não deve ser problema ao usar UTF-8 como codificação de arquivo. Dessa forma, você não precisa usá- |raw
lo (pois isso pode causar um problema de segurança).
Uma solução ainda mais elegante é limitar o texto pelo número de palavras (e não pelo número de caracteres). Isso evita rasgos feios (por exemplo, 'Stackov ...').
Aqui está um exemplo em que encurto apenas blocos de texto com mais de 10 palavras:
{% set text = myentity.text |split(' ') %}
{% if text|length > 10 %}
{% for t in text|slice(0, 10) %}
{{ t }}
{% endfor %}
...
{% else %}
{{ text|join(' ') }}
{% endif %}
Você pode limitar da seguinte maneira. O primeiro é o índice inicial e o segundo é o número de caracteres.
**{{ results['text'][4:2] }}**
Use o filtro truncado para cortar uma corda depois que o limite for atingido
{{ "Hello World!"|truncate(5) }} // default separator is ...
Olá...
Você também pode dizer ao truncado para preservar palavras inteiras, definindo o segundo parâmetro como true. Se a última palavra estiver no separador, truncar imprimirá a palavra inteira.
{{ "Hello World!"|truncate(7, true) }} // preserve words
Aqui Olá Mundo!
Se você deseja alterar o separador, basta definir o terceiro parâmetro para o separador desejado.
{{ "Hello World!"|truncate(7, false, "??") }}
Olá W ??
Atualização para o Twig 2 e Twig 3.
filtro truncado não está disponível; em vez disso, você pode usar o filtro u
aqui está um exemplo:
{{ 'Lorem ipsum'|u.truncate(8) }}
Lorem ip
{{ 'Lorem ipsum'|u.truncate(8, '...') }}
Lorem...
Nota: esse filtro faz parte do StringExtension que pode ser solicitado por
twig/string-extra
Eu escrevi este marco simples para o mesmo propósito, espero que ajude:
{%- macro stringMaxLength(str, maxLength) -%}
{%- if str | length < maxLength -%}
{{ str }}
{%- else -%}
{{ str|slice(0, maxLength) }}...
{%- endif -%}
{%- endmacro -%}
Exemplo de uso # 1 (Saída: "minha longa string aqui ..."):
{{ _self.stringMaxLength("my long string here bla bla bla la", 20) }}
Exemplo de uso # 2 (Saída: "string mais curta!"):
{{ _self.stringMaxLength("shorter string!", 20) }}
O Bugginess * nos novos recursos do Drupal 8 aqui nos inspirou a escrever nossos próprios:
<a href="{{ 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>
Isso leva em consideração palavras e caracteres (* a configuração "limite de palavras" em D8 não exibia nada).
É melhor usar um caractere HTML
{{ entity.text[:50] }}…
…
.
...
e esta é uma elipse…