जवाबों:
{{ myentity.text|length > 50 ? myentity.text|slice(0, 50) ~ '...' : myentity.text }}
आपको टहनी 1.6 चाहिए
{{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}
:। मैं …
3 वास्तविक डॉट्स ( ...
) के बजाय दीर्घवृत्त वर्ण ( ) का उपयोग करने की सलाह देता हूं
{{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
|length
पहले के बाद ही गायब हैं, text
लेकिन यह एकदम सही है, धन्यवाद!
क्यों नहीं टहनी के ट्रंकट या वर्डवैप फिल्टर का उपयोग करें? यह ट्विग एक्सटेंशन के अंतर्गत आता है और जैसा कि मैं देख रहा हूं, यह Symfony2.0 का हिस्सा है।
{{ text|truncate(50) }}
...
, दूसरा पैरामीटर true
इस तरह निर्धारित किया जाना चाहिए{{ text|truncate(50, true)
require twig/extensions
एक और है:
{{ myentity.text[:50] ~ '...' }}
मुझे पता है कि यह एक बहुत पुराना प्रश्न है, लेकिन टहनी 1.6 से आप स्लाइस फ़िल्टर का उपयोग कर सकते हैं;
{{ myentity.text|slice(0, 50) ~ '...' }}
यदि आप उदाहरण के लिए कुछ जोड़ना चाहते हैं तो टिल्ड से दूसरा भाग वैकल्पिक है।
संपादित करें: मेरा बुरा है, मुझे लगता है कि सबसे अधिक मतदान का जवाब टुकड़ा फ़िल्टर का उपयोग करता है।
यूटीएफ -8 एलिप्सिस नाम के साथ @ होलगुकस समाधान:
{{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text) }}
text
वैरिएबल के माध्यम से HTML इंजेक्शन को सक्षम करता है।
@mshobnr / @ एक साधारण मैक्रो में बनाया गया हल:
{% macro trunc(txt, len) -%}
{{ txt|length > len ? txt|slice(0, len) ~ '…' : txt }}
{%- endmacro %}
उपयोग उदाहरण:
{{ tools.trunc('This is the text to truncate. ', 50) }}
नायब मैं मैक्रो युक्त एक टहनी टेम्पलेट का आयात करता हूं और इसे इस तरह (उपकरण) के रूप में आयात करता हूं (सिम्फनी):
{% import "@AppBundle/tools.html.twig" as tools -%}
इसके अलावा, मैंने वास्तविक चरित्र के साथ html चरित्र कोड को बदल दिया, यह फ़ाइल एन्कोडिंग के रूप में UTF-8 का उपयोग करते समय कोई समस्या नहीं होनी चाहिए। इस तरह आपको उपयोग करने की आवश्यकता नहीं है |raw
(क्योंकि यह सुरक्षा समस्या पैदा कर सकता है)।
एक और भी सुंदर समाधान शब्दों की संख्या (और वर्णों की संख्या से नहीं) द्वारा पाठ को सीमित करना है। यह बदसूरत आंसू को रोकता है (जैसे 'स्टैकोव ...')।
यहाँ एक उदाहरण है जहाँ मैं केवल 10 शब्दों से अधिक लंबे टेक्स्ट ब्लॉक को छोटा करता हूँ:
{% set text = myentity.text |split(' ') %}
{% if text|length > 10 %}
{% for t in text|slice(0, 10) %}
{{ t }}
{% endfor %}
...
{% else %}
{{ text|join(' ') }}
{% endif %}
सीमा समाप्त होने के बाद एक स्ट्रिंग को काटने के लिए ट्रंकट फिल्टर का उपयोग करें
{{ "Hello World!"|truncate(5) }} // default separator is ...
हैलो...
आप दूसरे पैरामीटर को सही पर सेट करके पूरे शब्दों को संरक्षित करने के लिए भी छोटा बता सकते हैं। यदि अंतिम शब्द विभाजक पर है, तो पूरे शब्द को ट्रंकट प्रिंट करेगा।
{{ "Hello World!"|truncate(7, true) }} // preserve words
यहाँ हैलो वर्ल्ड!
यदि आप विभाजक को बदलना चाहते हैं, तो बस तीसरे पैरामीटर को अपने इच्छित विभाजक पर सेट करें।
{{ "Hello World!"|truncate(7, false, "??") }}
नमस्ते डब्ल्यू ??
ट्विग 2 और ट्विग 3 के लिए अपडेट।
truncate फ़िल्टर उपलब्ध नहीं है, इसके बजाय आप इसका उपयोग कर सकते हैं यू-फ़िल्टर का
यहाँ एक उदाहरण है:
{{ 'Lorem ipsum'|u.truncate(8) }}
Lorem ip
{{ 'Lorem ipsum'|u.truncate(8, '...') }}
Lorem...
नोट: यह फ़िल्टर StringExtension का एक हिस्सा है जिसे आवश्यक किया जा सकता है
twig/string-extra
मैंने इसी उद्देश्य के लिए यह सरल मार्को लिखा है, आशा है कि इससे मदद मिलेगी:
{%- macro stringMaxLength(str, maxLength) -%}
{%- if str | length < maxLength -%}
{{ str }}
{%- else -%}
{{ str|slice(0, maxLength) }}...
{%- endif -%}
{%- endmacro -%}
उपयोग उदाहरण # 1 (आउटपुट: "मेरी लंबी स्ट्रिंग यहाँ ..."):
{{ _self.stringMaxLength("my long string here bla bla bla la", 20) }}
उपयोग उदाहरण # 2 (आउटपुट: "छोटी स्ट्रिंग!"):
{{ _self.stringMaxLength("shorter string!", 20) }}
यहाँ नए Drupal 8 क्षमताओं में बगदारी * ने हमें अपना लिखने के लिए प्रेरित किया:
<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>
यह दोनों शब्दों और वर्णों को ध्यान में रखता है (* D8 में "शब्द सीमा" सेटिंग कुछ भी प्रदर्शित नहीं कर रही थी)।
HTML चरित्र का उपयोग करना बेहतर है
{{ entity.text[:50] }}…
…
।
...
और यह एक एलिप्सिस है…