शरीर पाठ (फ़ील्ड_बॉडी) को कैसे ट्रिम करें?


10

मैंने एक नोड के लिए एक दृश्य बनाया है जो सामग्री को प्रदान की गई इकाई के रूप में दिखाता है। दूसरों के बीच, मैं टहनी टेम्पलेट में शरीर क्षेत्र का उत्पादन करता हूं:

{{ content.field_body }}

अब, मैं पाठ को 200 वर्णों तक सीमित करना चाहता हूं और तीन बिंदुओं को रखना चाहता हूं। मैंने ऐसा करने के लिए तीन अलग-अलग तरीकों का परीक्षण किया है, लेकिन कुछ भी काम नहीं किया है। समस्या यह है, कि प्रत्येक तरह से HTML वर्णों को भी गिना और ट्रिम किया जाता है।

1: मैंने "प्रबंधित प्रदर्शन" में प्रारूप "छंटनी" जोड़ दिया है => पाठ सीमित है लेकिन सही नहीं है। और मेरे पास तीन डॉट्स नहीं हैं।

2: मैंने पाठ को टहनी टेम्पलेट में ट्रिम किया है। लेकिन पाठ को गिनने के लिए मुझे पहले इसे प्रस्तुत करना होगा। इस प्रकार, पाठ HTML के रूप में पाठ आउटपुट करता है (मैं अपने पृष्ठ पर HTML टैग देखता हूं!)

{% set text = content.field_body|render %}
{{ text|length > 200 ? text|slice(0, 200) ~ '...' : text }}

3: मैंने template_preprocess_node () में समस्या को हल करने की कोशिश की है। यहाँ मुझे HTML मार्कअप की गिनती के साथ भी यही समस्या है।

$body_text = $node->get('field_body')->getValue()[0]['value'];
$trimmed_text = substr($body_text, 0, 200) . '...';

मैं अपने टेक्स्ट को सही कैसे ट्रिम कर सकता हूं?

मदद के लिए आपका बहुत बहुत धन्यवाद!

जवाबों:


18

वहाँ कुछ समाधान आप की कोशिश कर सकते हैं, लेकिन ध्यान दें html के साथ तार काट रहे हैं आमतौर पर एक संभावित खराब या विकृत टैग होने के कारण एक बुरा विचार है।

1. HTML को HTML के रूप में आउटपुट करने के लिए कच्चे का उपयोग करें, विकृत टैग उत्पन्न कर सकते हैं:

{% set text = content.field_body|render %}
{{ text|length > 200 ? text|slice(0, 200)|raw ~ '...' : text|raw }}

2. पट्टी HTML पहले, क्लीनर:

{% set text = content.field_body|render|striptags %}
{{ text|length > 200 ? text|slice(0, 200) ~ '...' : text }}

3. एक टहनी विस्तार (अप्राप्त) पंजीकृत करें:

https://gist.github.com/leon/2857883

एक और सहायक एक्सटेंशन जो आप देख सकते हैं वह है टेक्स्ट एक्सटेंशन, जो आपको शब्दों को काट देने से रोकने में मदद करता है:

http://twig.sensiolabs.org/doc/extensions/text.html


2
पहला समाधान विकृत टैग और दूसरा समाधान सभी HTML टैग्स पट्टी।
युसेफ

1
@ यजीलवन हां, जैसा कि उत्तर में वर्णित है।
स्क्वा 3 डी

1
@ squall3d स्ट्रिप एचटीएमएल के बिना स्लाइस के लिए आपका क्या उपाय है?
युसेफ

1
@zhilevan आमतौर पर जब मैं छंटनी किए गए पाठ को प्रदर्शित करना चाहता हूं तो यह एक टीज़र के उद्देश्य से होता है, जहां मैं शायद ही कभी html चाहता हूं। लेकिन अगर आपको html को संरक्षित करने की आवश्यकता है, तो आप इस एक्सटेंशन को आज़मा सकते हैं: gist.github.com/leon/2857883
squall3d

1
अगर मैं शरीर क्षेत्र में छवि का उपयोग करता हूं। नहीं 2, छवियों के लिए काम नहीं कर रहा है। क्या कोई अन्य कोड है, छवि को भी प्रिंट करेगा
logeshvaran

5

अब आप इसे twig_extender मॉड्यूल और उपयोग के साथ कर सकते हैं |truncate

यहाँ .Wig टेम्पलेट में इसका उपयोग करने का एक उदाहरण दिया गया है, ध्यान दें कि मैं भी twig_field_value का उपयोग कर रहा हूँ :

{{ content.field_name|field_value|first['#text']|truncate(15, true, '....') }}

नोट: मैं आमतौर पर अपनी डेवेल सेटिंग्स (./admin/config/development/devel) को सिम्फनी वर्-डम्पर का उपयोग करने के लिए सेट रखता हूं और इसके साथ श्रृंखला का पता लगा सकता हूं

अर्थात: {{ devel_dump(content.field_name|field_value) }}


4

सुधार:

  1. यदि आप टैग टैग करते हैं तो आपको व्हॉट्सएप |trimसे छुटकारा पाना चाहिए
  2. शब्द सीमा पर ट्रिम - नीचे देखें slice()औरsplit()
  3. "..." के बजाय दीर्घवृत्त ( …) का उपयोग करें
  4. |raw उत्पादन

{% set text = content.field_header_intro|render|striptags|trim %}

{{ (text|length > 200 ? text|slice(0, 201)|split(' ')|slice(0, -1)|join(' ') ~ '&hellip;' : text)|raw }}</code>


3

इस तरह मैंने इसे संभाला।

उदाहरण:
क्षेत्र - नोड - निकाय - article.html.twig

{% set mode = element['#view_mode'] %}
...
{% for item in items %}
  {% if mode == 'full' %}
    <div{{ attributes.addClass('texto') }}>{{ item.content }}</div>
  {% elseif mode == 'teaser' %}
    {# if there is something about trim_length in field formatter #}
    {% if item.content['#text_summary_trim_length'] %}
      {# first remove html tags then you slice with trim_length #}
      {% set texto = item.content['#text']|striptags|slice(0, item.content['#text_summary_trim_length']) %}
      <p {{ attributes }}>{{ texto }}...</p>
    {% else %}
      <p {{ attributes }}>{{ item.content }}</p>
    {% endif %}
  {% endif %}
{% endfor %}
...
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.