ini seharusnya jawabannya, masih bekerja sampai sekarang;)
whalesingswee
Bagaimana kami dapat menambahkan tautan ke ...?
mburakergenc
11
Selain itu, jika Anda ingin memotong pada kata, Anda dapat melakukannya seperti ini: {{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}. Saya juga merekomendasikan menggunakan karakter ellipsis ( …) alih-alih 3 titik nyata ( ...)
Nemo64
2
Lebih pendek:{{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
mts knn
1
@ Nemo64 Anda baru saja melewatkan |lengthsetelah pertama texttetapi itu sempurna, terima kasih!
mtefi
116
mengapa tidak menggunakan filter ranting truncate atau wordwrap? Itu milik ekstensi ranting dan lib adalah bagian dari Symfony2.0 seperti yang saya lihat.
Untuk menambahkan ..., parameter kedua harus diatur ke trueseperti{{ text|truncate(50, true)
Sithu
Sebenarnya pengaturan parameter kedua menjadi true akan membuatnya mempertahankan seluruh kata. Ia menambahkan elips secara default. Parameter ketiga dapat mengubah elips menjadi apa pun yang Anda inginkan. twig-extensions.readthedocs.io/en/latest/…
beta
1
Menggunakan Symfony 2.8, saya harus menginstal ekstensi ini untuk menggunakannya. require twig/extensions
{{ 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 %}
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.
Bugginess * dalam kemampuan Drupal 8 yang baru di sini menginspirasi kami untuk menulis sendiri:
<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>
Ini mempertimbangkan kata-kata dan karakter (* pengaturan "batas kata" di D8 tidak menampilkan apa-apa).
Bisakah Anda menambahkan penjelasan pada jawaban Anda? Mengapa orang harus menggunakan entitas HTML? Dan mengapa Anda menambahkannya ke teks dalam setiap kasus, bahkan jika teks kurang dari 50 karakter?
Nico Haase
Hai, jika Anda menulis tiga titik, itu tiga titik yang terpisah tetapi karakter "tiga titik" disebut elipsis. Entitas html ellipsis adalah ….
Théo Attali
Dan mengapa tidak menggunakan karakter unicode untuk elipsis itu?
Nico Haase
Anda bisa menggunakannya juga! komentar ini adalah jawaban untuk komentar tersebut stackoverflow.com/a/17118915/5923187 tetapi langkah itu terkunci karena reputasi saya
...
dan ini adalah Ellipsis…
Jawaban:
Anda membutuhkan Ranting 1.6
sumber
{{ 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 pertamatext
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.
sumber
...
, parameter kedua harus diatur ketrue
seperti{{ text|truncate(50, true)
require twig/extensions
Yang lain adalah:
sumber
Saya tahu ini adalah pertanyaan yang sangat lama, tetapi dari ranting 1.6 Anda dapat menggunakan filter slice;
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.
sumber
Solusi @olegkhuss dengan nama UTF-8 Elipsis:
{{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text) }}
sumber
text
variabel.Solusi @mshobnr / @olegkhus dibuat menjadi makro sederhana:
Contoh penggunaan:
Nb Saya mengimpor template Ranting yang berisi makro dan mengimpornya sebagai 'alat' seperti ini (Symfony):
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).sumber
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:
sumber
Anda dapat membatasi dengan cara berikut. Pertama adalah indeks awal dan yang kedua adalah jumlah karakter.
sumber
Gunakan filter truncate untuk memotong string setelah batas tercapai
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.
Jika Anda ingin mengubah pemisah, cukup atur parameter ketiga ke pemisah yang Anda inginkan.
sumber
Pembaruan untuk Twig 2 dan Twig 3.
filter truncate tidak tersedia, sebagai gantinya Anda dapat menggunakan u-filter
berikut ini sebuah contoh:
Catatan: filter ini adalah bagian dari StringExtension yang dapat diminta oleh
sumber
Saya menulis marco sederhana ini untuk tujuan yang sama, semoga membantu:
Contoh Penggunaan # 1 (Output: "string panjang saya di sini ..."):
Contoh Penggunaan # 2 (Output: "string lebih pendek!"):
sumber
Bugginess * dalam kemampuan Drupal 8 yang baru di sini menginspirasi kami untuk menulis sendiri:
Ini mempertimbangkan kata-kata dan karakter (* pengaturan "batas kata" di D8 tidak menampilkan apa-apa).
sumber
Lebih baik menggunakan karakter HTML
sumber
…
.