সিমফনি 2 টিউথি পাঠ্যের দৈর্ঘ্য সীমাবদ্ধ করে তিনটি বিন্দু রাখে


128

আমি কীভাবে পাঠ্যের দৈর্ঘ্য সীমাবদ্ধ করতে পারি, উদাহরণস্বরূপ, 50, এবং প্রদর্শনীতে তিনটি বিন্দু রাখতে পারি?

{% if myentity.text|length > 50 %}

{% block td_text %} {{ myentity.text}}{% endblock %}

{%endif%}

4
"তিনটি বিন্দু" আসলে একটি একক অক্ষর যা একটি এলিপিসিস বলে। এই তিন পূর্ণ স্টপ হয় ...এবং এটা এমন একটা মগের মুল্লুক নয়
লুক Cousins থেকে

উত্তর:


204
{{ myentity.text|length > 50 ? myentity.text|slice(0, 50) ~ '...' : myentity.text  }}

আপনার টুইগ 1.6 দরকার


এটি উত্তর হওয়া উচিত, এখনও
অবধি

আমরা কীভাবে একটি লিঙ্ক যুক্ত করতে পারি?
mburakergenc

11
উপরন্তু, যদি আপনি একটি শব্দ উপর ক্রপ করতে চান, আপনি এটা ভালো করতে পারেন: {{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}। আমি 3 রিয়েল ডট ( ...) এর পরিবর্তে উপবৃত্তাকার অক্ষর ( ) ব্যবহার করারও পরামর্শ দিচ্ছি
নিমো 64

2
সংক্ষিপ্ত:{{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
এমটিএস 10

1
@ নিমো 64 আপনি প্রথমটির |lengthপরে কেবল মিস করছেন textতবে এটি নিখুঁত, আপনাকে ধন্যবাদ!
মাটিফি

116

কেন ট্যুইজের কাটা বা ওয়ার্ডর্যাপ ফিল্টার ব্যবহার করবেন না? এটি টুইগ এক্সটেনশনের অন্তর্গত এবং lib Symfony2.0 এর অংশ হিসাবে আমি দেখছি।

{{ text|truncate(50) }}

5
আমি সিমফনি ২.৩ ব্যবহার করছি এবং ছাঁটাই ফিল্টার ডিফল্ট এক্সটেনশনের অংশ নয়। অতএব, আমি পরিবর্তে ম্যানুয়েলের সমাধানটি অবলম্বন করেছি।

8
সিমফোনিতে এক্সটেনশন সক্ষম করতে এটি আপনার কনফিগারেশন ফাইলের একটিতে যুক্ত করুন
পিটার

1
সংযোজন করতে ..., দ্বিতীয় প্যারামিটারটি এ সেট করা উচিত trueযেমন{{ text|truncate(50, true)
Sithu

প্রকৃতপক্ষে দ্বিতীয় প্যারামিটারটি সেট করা পুরো শব্দটিকে সংরক্ষণ করে। এটি ডিফল্টভাবে উপবৃত্তগুলি যুক্ত করে। তৃতীয় প্যারামিটারটি ইলিপসগুলি আপনার যে কোনও কিছুতে পরিবর্তন করতে পারে। twig-extensions.readthedocs.io/en/latest/…
বিটা

1
সিমফনি ২.৮ ব্যবহার করে আমাকে এটি ব্যবহার করতে এই এক্সটেনশনটি ইনস্টল করতে হয়েছিল। require twig/extensions
বিটা

35

আর একটি হ'ল:

{{ myentity.text[:50] ~ '...' }}

7
একমাত্র সমস্যা হ'ল এটি সর্বদা বিন্দুগুলি দেখায় ...: / মনে হয় আমি প্রথম সমাধানটি নিয়ে যাব।
মার্কাস কোটলেন্ডার

1
দয়া করে, আপনি কি এই লিঙ্কটি ভাগ করতে পারেন যেখানে এই [x: x] সম্পর্কে ডকটি রয়েছে?
বেনার্ড প্যাট্রিক

সবসময় সেখানে তিনটি বিন্দু সহ ... সত্যই প্রশ্নের উত্তর দেয় না।
dmmd

17

আমি জানি এটি একটি খুব পুরানো প্রশ্ন, তবে ডানা দ্বিগুণ থেকে আপনি স্লাইস ফিল্টারটি ব্যবহার করতে পারেন;

{{ myentity.text|slice(0, 50) ~ '...' }}

টিলড থেকে দ্বিতীয় অংশটি alচ্ছিক যদি আপনি কিছু যোগ করতে চান উদাহরণস্বরূপ উপবৃত্তাকার।

সম্পাদনা: আমার খারাপ, আমি স্লাইস ফিল্টারটি ব্যবহার করে সর্বাধিক ভোট দেওয়া উত্তর দেখতে পাচ্ছি।


10

ইউটিএফ -8 এলিপসিসযুক্ত @ ওলেগখুস সমাধান: {{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text) }}


2
দয়া করে মনে রাখবেন এই সমাধানটি textভেরিয়েবলের মাধ্যমে এইচটিএমএল ইনজেকশন সক্ষম করে ।
এমিক্স

1
@ মাইকেল-জুকোভস্কি আপনার ঠিক আছে। আমি আমার সমাধান পরিবর্তন করেছি।
ম্যাথিয়াস শোবনার

8

@mshobnr / @olegkhuss সমাধানটি একটি সাধারণ ম্যাক্রোতে তৈরি:

{% 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 -%}

এছাড়াও, আমি এইচটিএমএল অক্ষর কোডটি প্রকৃত চরিত্রের সাথে প্রতিস্থাপন করেছি, ইউটিএফ -8 ফাইল এনকোডিং হিসাবে ব্যবহার করার সময় কোনও সমস্যা হওয়া উচিত নয়। এইভাবে আপনাকে ব্যবহার করতে হবে না |raw(কারণ এটি কোনও সুরক্ষা সমস্যার কারণ হতে পারে)।


6

এর চেয়ে আরও মার্জিত সমাধান হ'ল শব্দের সংখ্যা দ্বারা (এবং অক্ষরের সংখ্যা দ্বারা নয়) পাঠ্য সীমাবদ্ধ করা। এটি কুৎসিত টিয়ার প্রতিরোধ করে (উদাঃ 'স্ট্যাকভ ...')।

এখানে একটি উদাহরণ যেখানে আমি কেবলমাত্র 10 টি শব্দের চেয়ে বেশি পাঠ্য ব্লককে ছোট করে রেখেছি:

{% set text = myentity.text |split(' ') %} 

{% if text|length > 10 %} 
    {% for t in text|slice(0, 10) %}
        {{ t }} 
    {% endfor %}
    ...
{% else %}
    {{ text|join(' ') }}
{% endif %}

এবং কোন অ্যাড অন প্রয়োজন !!! শুধু আমার যা প্রয়োজন, শব্দের দ্বারা স্পেস এবং টুকরা দ্বারা বিভক্ত, !!!
ভ্লাদিমির Ch


2

আপনি নিম্নলিখিত উপায়ে সীমাবদ্ধ করতে পারেন। প্রথম সূচক এবং দ্বিতীয়টি হ'ল অক্ষরের সংখ্যা।

**{{ results['text'][4:2] }}**

2

সীমা অতিক্রম করার পরে একটি স্ট্রিং কেটে দেওয়ার জন্য কাটা ফিল্টারটি ব্যবহার করুন

{{ "Hello World!"|truncate(5) }} // default separator is ...

হ্যালো...

আপনি দ্বিতীয় প্যারামিটারটিকে সত্য হিসাবে সেট করে পুরো শব্দগুলি সংরক্ষণ করার জন্য কেটেঙ্কেটকে বলতে পারেন। শেষ শব্দটি পৃথককারীটিতে থাকলে, ছাঁটাইটি পুরো শব্দটি মুদ্রণ করে।

 {{ "Hello World!"|truncate(7, true) }} // preserve words

এখানে হ্যালো ওয়ার্ল্ড!

আপনি যদি বিভাজকটি পরিবর্তন করতে চান তবে কেবলমাত্র আপনার পছন্দসই পৃথককে তৃতীয় প্যারামিটার সেট করুন set

{{ "Hello World!"|truncate(7, false, "??") }} 

হ্যালো ডাব্লু ??


1

টুইগ 2 এবং টুইগ 3 এর জন্য আপডেট।

ছাঁটাই ফিল্টার উপলভ্য নয়, এর পরিবর্তে আপনি ইউ-ফিল্টার ব্যবহার করতে পারেন

এখানে একটি উদাহরণ:

{{ 'Lorem ipsum'|u.truncate(8) }}
Lorem ip

{{ 'Lorem ipsum'|u.truncate(8, '...') }}
Lorem...

দ্রষ্টব্য: এই ফিল্টারটি স্ট্রিংএক্সটেনশনের অংশ যা দ্বারা প্রয়োজনীয় হতে পারে

twig/string-extra

0

আমি একই উদ্দেশ্যে এই সাধারণ মার্কোটি লিখেছি, আশা করি এটি সহায়তা করে:

{%- 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) }}

0

নতুন ড্রুপাল 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>

এটি উভয় শব্দ এবং অক্ষর বিবেচনায় নেয় (* ডি 8-তে "শব্দ সীমানা" সেটিংস কিছুই প্রদর্শন করছে না)।


-1

এইচটিএমএল অক্ষর ব্যবহার করা ভাল

{{ entity.text[:50] }}&#8230;

আপনি কি আপনার উত্তরে কিছু ব্যাখ্যা যোগ করতে পারেন? কেন একজনকে এইচটিএমএল সত্তা ব্যবহার করা উচিত? এবং পাঠ্যটি 50 টি অক্ষরের চেয়েও কম দীর্ঘ হলেও আপনি কেন প্রতিটি ক্ষেত্রে পাঠ্যকে সংযোজন করেন?
নিকো হাজেস

হাই, আপনি যদি তিনটি বিন্দু লিখেন তবে এটি তিনটি পৃথক বিন্দু তবে "তিনটি বিন্দু" অক্ষরকে উপবৃত্ত বলা হয়। উপবৃত্তাকার এইচটিএমএল সত্তা &#8230;
Th Atto আটালি

এবং কেন এই উপবৃত্তের জন্য ইউনিকোড চরিত্রটি ব্যবহার করবেন না?
নিকো হাজেস

আপনি এটি ব্যবহার করতে পারেন! এই মন্তব্যটি সেই মন্তব্যটির একটি উত্তর ছিল stackoverflow.com/a/17118915/5923187 তবে আমার এই সুনামের কারণে এই পদক্ষেপটি লক করা হয়েছিল
থিও অটালি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.