cela devrait être la réponse, qui fonctionne toujours jusqu'à présent;)
whalesingswee
Comment ajouter un lien vers ...?
mburakergenc
11
En outre, si vous voulez rogner sur un mot, vous pouvez le faire comme ceci: {{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}. Je recommande également d'utiliser le caractère points de suspension ( …) au lieu de 3 vrais points ( ...)
Nemo64
2
Plus court:{{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
mts knn
1
@ Nemo64 vous manque juste l' |lengthaprès le premier textmais c'est parfait, merci!
mtefi
116
pourquoi ne pas utiliser le filtre tronqué ou wordwrap de twig? Il appartient aux extensions twig et lib fait partie de Symfony2.0 comme je le vois.
J'utilise Symfony 2.3 et le filtre tronqué ne fait pas partie des extensions par défaut. Par conséquent, j'ai eu recours à la solution de Manuel à la place.
Pour ajouter ..., le deuxième paramètre doit être défini sur truetel que{{ text|truncate(50, true)
Sithu
En fait, définir le deuxième paramètre sur true lui permettrait de conserver des mots entiers. Il ajoute les ellipses par défaut. Le troisième paramètre peut changer les ellipses en tout ce que vous voulez. twig-extensions.readthedocs.io/en/latest/…
bêta
1
En utilisant Symfony 2.8, j'ai dû installer cette extension pour l'utiliser. require twig/extensions
{{ tools.trunc('This is the text to truncate. ',50)}}
Nb j'importe un template Twig contenant des macros et l'importe comme 'outils' comme celui-ci (Symfony):
{%import"@AppBundle/tools.html.twig"as tools -%}
De plus, j'ai remplacé le code de caractère html par le caractère réel, cela ne devrait poser aucun problème lors de l'utilisation de UTF-8 comme encodage de fichier. De cette façon, vous n'avez pas à utiliser |raw(car cela pourrait causer un problème de sécurité).
Une solution encore plus élégante consiste à limiter le texte par le nombre de mots (et non par le nombre de caractères). Cela empêche les déchirures laides (par exemple, «Stackov ...»).
Voici un exemple où je raccourcis uniquement les blocs de texte de plus de 10 mots:
{%set text = myentity.text |split(' ')%}{%if text|length >10%}{%for t in text|slice(0,10)%}{{ t }}{% endfor %}...{%else%}{{ text|join(' ')}}{% endif %}
Utilisez le filtre tronquer pour couper une chaîne une fois la limite atteinte
{{"Hello World!"|truncate(5)}}// default separator is ...
Bonjour...
Vous pouvez également indiquer à truncate de conserver des mots entiers en définissant le deuxième paramètre sur true. Si le dernier mot est sur le séparateur, tronquer imprimera le mot entier.
{{"Hello World!"|truncate(7,true)}}// preserve words
Ici Hello World!
Si vous souhaitez modifier le séparateur, définissez simplement le troisième paramètre sur le séparateur souhaité.
La bugginess * dans les nouvelles capacités de Drupal 8 nous a inspiré ici pour écrire la nôtre:
<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>
Cela prend en considération à la fois les mots et les caractères (* le paramètre «limite de mot» dans D8 n'affichait rien).
Pouvez-vous ajouter quelques explications à votre réponse? Pourquoi utiliser une entité HTML? Et pourquoi l'ajoutez-vous au texte dans tous les cas, même si le texte comporte moins de 50 caractères?
Nico Haase
Salut, si vous écrivez trois points, ce sont trois points séparés, mais le caractère "trois points" est appelé une ellipse. L'entité html des points de suspension est ….
Théo Attali
Et pourquoi ne pas utiliser le caractère Unicode pour ces points de suspension?
Nico Haase
Vous pouvez aussi l'utiliser! ce commentaire était une réponse à ce commentaire stackoverflow.com/a/17118915/5923187 mais ce mouvement a été verrouillé à cause de ma réputation
...
et c'est une ellipse…
Réponses:
Vous avez besoin de Twig 1.6
la source
{{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}
. Je recommande également d'utiliser le caractère points de suspension (…
) au lieu de 3 vrais points (...
){{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
|length
après le premiertext
mais c'est parfait, merci!pourquoi ne pas utiliser le filtre tronqué ou wordwrap de twig? Il appartient aux extensions twig et lib fait partie de Symfony2.0 comme je le vois.
la source
...
, le deuxième paramètre doit être défini surtrue
tel que{{ text|truncate(50, true)
require twig/extensions
Un autre est:
la source
Je sais que c'est une question très ancienne, mais à partir de twig 1.6, vous pouvez utiliser le filtre de tranche;
La deuxième partie du tilde est facultative si vous souhaitez ajouter quelque chose, par exemple les points de suspension.
Edit: Mon mauvais, je vois que la réponse la plus votée utilise le filtre de tranche.
la source
Solution @olegkhuss avec UTF-8 Elipsis nommé:
{{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text) }}
la source
text
variable.Solution @mshobnr / @olegkhuss transformée en une simple macro:
Exemple d'utilisation:
Nb j'importe un template Twig contenant des macros et l'importe comme 'outils' comme celui-ci (Symfony):
De plus, j'ai remplacé le code de caractère html par le caractère réel, cela ne devrait poser aucun problème lors de l'utilisation de UTF-8 comme encodage de fichier. De cette façon, vous n'avez pas à utiliser
|raw
(car cela pourrait causer un problème de sécurité).la source
Une solution encore plus élégante consiste à limiter le texte par le nombre de mots (et non par le nombre de caractères). Cela empêche les déchirures laides (par exemple, «Stackov ...»).
Voici un exemple où je raccourcis uniquement les blocs de texte de plus de 10 mots:
la source
Vous pouvez limiter de la manière suivante. Le premier est l'index de départ et le second est le nombre de caractères.
la source
Utilisez le filtre tronquer pour couper une chaîne une fois la limite atteinte
Vous pouvez également indiquer à truncate de conserver des mots entiers en définissant le deuxième paramètre sur true. Si le dernier mot est sur le séparateur, tronquer imprimera le mot entier.
Si vous souhaitez modifier le séparateur, définissez simplement le troisième paramètre sur le séparateur souhaité.
la source
Mise à jour pour Twig 2 et Twig 3.
le filtre tronqué n'est pas disponible, à la place, vous pouvez utiliser u-filter
Voici un exemple:
Remarque: ce filtre fait partie de StringExtension qui peut être requis par
la source
J'ai écrit ce marco simple dans le même but, j'espère que cela aide:
Exemple d'utilisation n ° 1 (sortie: "ma longue chaîne ici ..."):
Exemple d'utilisation n ° 2 (sortie: "chaîne plus courte!"):
la source
La bugginess * dans les nouvelles capacités de Drupal 8 nous a inspiré ici pour écrire la nôtre:
Cela prend en considération à la fois les mots et les caractères (* le paramètre «limite de mot» dans D8 n'affichait rien).
la source
Il est préférable d'utiliser un caractère HTML
la source
…
.