esta deve ser a resposta, ainda trabalhando até agora;)
whalesingswee
Como podemos adicionar um link para ...?
mburakergenc
11
Além disso, se você deseja cortar em uma palavra, você pode fazê-lo como este: {{ 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 ( ...)
Nemo64
2
Mais curto:{{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
mts knn
1
@ Nemo64, você está perdendo o |lengthdepois do primeiro, textmas isso é perfeito, obrigado!
Mtefi 24/10/19
116
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.
Para acrescentar ..., o segundo parâmetro deve ser definido truecomo{{ text|truncate(50, true)
Sithu
Definir o segundo parâmetro como true faria preservar palavras inteiras. Ele adiciona as elipses por padrão. O terceiro parâmetro pode alterar as elipses para o que você quiser. twig-extensions.readthedocs.io/en/latest/…
beta
1
Usando o Symfony 2.8, tive que instalar esta extensão para usá-la. require twig/extensions
{{ 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á- |rawlo (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 %}
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.
O Bugginess * nos novos recursos do Drupal 8 aqui nos inspirou a escrever nossos próprios:
<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>
Isso leva em consideração palavras e caracteres (* a configuração "limite de palavras" em D8 não exibia nada).
Você pode adicionar alguma explicação à sua resposta? Por que alguém deveria usar uma entidade HTML? E por que você o anexa ao texto em todos os casos, mesmo que o texto tenha menos de 50 caracteres?
Nico Haase
Olá, se você escrever três pontos, são três pontos separados, mas o caractere "três pontos" é chamado de reticências. A entidade reticências html é ….
Théo Attali
E por que não usar o caractere unicode para essas reticências?
Nico Haase
Você pode usá-lo também! este comentário foi uma resposta a esse comentário stackoverflow.com/a/17118915/5923187 mas esse movimento foi fechada devido à minha reputação
...
e esta é uma elipse…
Respostas:
Você precisa do Twig 1.6
fonte
{{ 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.
fonte
...
, o segundo parâmetro deve ser definidotrue
como{{ text|truncate(50, true)
require twig/extensions
Outro é:
fonte
Eu sei que essa é uma pergunta muito antiga, mas do twig 1.6 você pode usar o filtro de fatia;
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.
fonte
solução @olegkhuss com reticências UTF-8 nomeadas:
{{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text) }}
fonte
text
variávelSolução @mshobnr / @olegkhuss transformada em uma macro simples:
Exemplo de uso:
Nota: Eu importo um modelo Twig contendo macros e importo-o como 'ferramentas' como esta (Symfony):
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).fonte
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:
fonte
Você pode limitar da seguinte maneira. O primeiro é o índice inicial e o segundo é o número de caracteres.
fonte
Use o filtro truncado para cortar uma corda depois que o limite for atingido
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.
Se você deseja alterar o separador, basta definir o terceiro parâmetro para o separador desejado.
fonte
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:
Nota: esse filtro faz parte do StringExtension que pode ser solicitado por
fonte
Eu escrevi este marco simples para o mesmo propósito, espero que ajude:
Exemplo de uso # 1 (Saída: "minha longa string aqui ..."):
Exemplo de uso # 2 (Saída: "string mais curta!"):
fonte
O Bugginess * nos novos recursos do Drupal 8 aqui nos inspirou a escrever nossos próprios:
Isso leva em consideração palavras e caracteres (* a configuração "limite de palavras" em D8 não exibia nada).
fonte
É melhor usar um caractere HTML
fonte
…
.