Jawaban:
{{ myentity.text|length > 50 ? myentity.text|slice(0, 50) ~ '...' : myentity.text }}
Anda membutuhkan Ranting 1.6
{{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}
. Saya juga merekomendasikan menggunakan karakter ellipsis ( …
) alih-alih 3 titik nyata ( ...
)
{{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
|length
setelah pertama text
tetapi itu sempurna, terima kasih!
mengapa tidak menggunakan filter ranting truncate atau wordwrap? Itu milik ekstensi ranting dan lib adalah bagian dari Symfony2.0 seperti yang saya lihat.
{{ text|truncate(50) }}
...
, parameter kedua harus diatur ke true
seperti{{ text|truncate(50, true)
require twig/extensions
Yang lain adalah:
{{ myentity.text[:50] ~ '...' }}
Saya tahu ini adalah pertanyaan yang sangat lama, tetapi dari ranting 1.6 Anda dapat menggunakan filter slice;
{{ myentity.text|slice(0, 50) ~ '...' }}
Bagian kedua dari tilde adalah opsional untuk jika Anda ingin menambahkan sesuatu misalnya elipsis.
Sunting: Buruk saya, saya melihat jawaban paling banyak menggunakan filter slice.
Solusi @olegkhuss dengan nama UTF-8 Elipsis:
{{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text) }}
text
variabel.
Solusi @mshobnr / @olegkhus dibuat menjadi makro sederhana:
{% macro trunc(txt, len) -%}
{{ txt|length > len ? txt|slice(0, len) ~ '…' : txt }}
{%- endmacro %}
Contoh penggunaan:
{{ tools.trunc('This is the text to truncate. ', 50) }}
Nb Saya mengimpor template Ranting yang berisi makro dan mengimpornya sebagai 'alat' seperti ini (Symfony):
{% import "@AppBundle/tools.html.twig" as tools -%}
Juga, saya mengganti kode karakter html dengan karakter aktual, ini seharusnya tidak ada masalah ketika menggunakan UTF-8 sebagai pengkodean file. Dengan cara ini Anda tidak harus menggunakan |raw
(karena dapat menyebabkan masalah keamanan).
Solusi yang bahkan lebih elegan adalah membatasi teks dengan jumlah kata (dan bukan oleh jumlah karakter). Ini mencegah tembusnya air mata yang jelek (mis. 'Stackov ...').
Berikut adalah contoh di mana saya mempersingkat hanya blok teks yang lebih panjang dari 10 kata:
{% set text = myentity.text |split(' ') %}
{% if text|length > 10 %}
{% for t in text|slice(0, 10) %}
{{ t }}
{% endfor %}
...
{% else %}
{{ text|join(' ') }}
{% endif %}
Anda dapat membatasi dengan cara berikut. Pertama adalah indeks awal dan yang kedua adalah jumlah karakter.
**{{ results['text'][4:2] }}**
Gunakan filter truncate untuk memotong string setelah batas tercapai
{{ "Hello World!"|truncate(5) }} // default separator is ...
Halo...
Anda juga bisa memberi tahu truncate untuk mempertahankan seluruh kata dengan mengatur parameter kedua menjadi true. Jika Word terakhir ada di separator, truncate akan mencetak seluruh Word.
{{ "Hello World!"|truncate(7, true) }} // preserve words
Di sini Hello World!
Jika Anda ingin mengubah pemisah, cukup atur parameter ketiga ke pemisah yang Anda inginkan.
{{ "Hello World!"|truncate(7, false, "??") }}
Halo W ??
Pembaruan untuk Twig 2 dan Twig 3.
filter truncate tidak tersedia, sebagai gantinya Anda dapat menggunakan u-filter
berikut ini sebuah contoh:
{{ 'Lorem ipsum'|u.truncate(8) }}
Lorem ip
{{ 'Lorem ipsum'|u.truncate(8, '...') }}
Lorem...
Catatan: filter ini adalah bagian dari StringExtension yang dapat diminta oleh
twig/string-extra
Saya menulis marco sederhana ini untuk tujuan yang sama, semoga membantu:
{%- macro stringMaxLength(str, maxLength) -%}
{%- if str | length < maxLength -%}
{{ str }}
{%- else -%}
{{ str|slice(0, maxLength) }}...
{%- endif -%}
{%- endmacro -%}
Contoh Penggunaan # 1 (Output: "string panjang saya di sini ..."):
{{ _self.stringMaxLength("my long string here bla bla bla la", 20) }}
Contoh Penggunaan # 2 (Output: "string lebih pendek!"):
{{ _self.stringMaxLength("shorter string!", 20) }}
Bugginess * dalam kemampuan Drupal 8 yang baru di sini menginspirasi kami untuk menulis sendiri:
<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>
Ini mempertimbangkan kata-kata dan karakter (* pengaturan "batas kata" di D8 tidak menampilkan apa-apa).
Lebih baik menggunakan karakter HTML
{{ entity.text[:50] }}…
…
.
...
dan ini adalah Ellipsis…