কিভাবে বডি টেক্সট (ফিল্ডবডি) ছাঁটাই করবেন?


10

আমি একটি নোডের জন্য একটি ভিউ তৈরি করেছি যা সামগ্রীটিকে রেন্ডার করা সত্তা হিসাবে দেখায়। অন্যদের মধ্যে আমি দ্বিগুণ টেমপ্লেটে বডি ফিল্ড আউটপুট করি:

{{ content.field_body }}

এখন, আমি পাঠ্যটি 200 টি অক্ষরে সীমাবদ্ধ করতে এবং তিনটি বিন্দু রাখতে চাই। আমি এটি করার জন্য তিনটি পৃথক উপায়ে পরীক্ষা করেছি, কিন্তু কিছুই কার্যকর হয়নি। সমস্যাটি হ'ল প্রতিটি উপায়ে এইচটিএমএল অক্ষরকেও গণনা করা ও ছাঁটাই করা হয়।

1: আমি "প্রদর্শন পরিচালনা করুন" তে "ছাঁটাই" ফর্ম্যাটটি যুক্ত করেছি => পাঠ্যটি সীমাবদ্ধ তবে সঠিক নয়। এবং আমার কাছে তিনটি বিন্দু নেই।

2: আমি ট্যুইগ টেম্পলেটটিতে পাঠ্য ছাঁটাই করেছি। তবে পাঠ্যটি গণনা করতে আমাকে প্রথমে এটি রেন্ডার করতে হবে। এর মাধ্যমে, পাঠ্যটিকে এইচটিএমএল হিসাবে আউটপুট করে (আমি আমার পৃষ্ঠায় এইচটিএমএল ট্যাগগুলি দেখি!)

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

3: আমি টেমপ্লেট_প্রসেস_নোড () এ সমস্যার সমাধান করার চেষ্টা করেছি। এইচটিএমএল মার্কআপও গণনা করতে আমার এখানে একই সমস্যা রয়েছে।

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

আমি কীভাবে আমার পাঠ্যটি ছাঁটাই করতে পারি?

আপনার সাহায্যের জন্য আপনাকে অনেক ধন্যবাদ!

উত্তর:


18

কয়েকটি সমাধান রয়েছে যা আপনি চেষ্টা করতে পারেন তবে এইচটিএমএল সহ নোট কাটা স্ট্রিংগুলি সম্ভবত সম্ভাব্য বন্ধ বা ত্রুটিযুক্ত ট্যাগ থাকার কারণে একটি খারাপ ধারণা।

1. এইচটিএমএলকে এইচটিএমএল হিসাবে আউটপুট করতে কাঁচা ব্যবহার করুন, ত্রুটিযুক্ত ট্যাগ তৈরি করতে পারে:

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

2. প্রথমে এইচটিএমএল, ক্লিনার:

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

৩. একটি দ্বিখণ্ডিত এক্সটেনশানটি নিবন্ধন করুন (অনির্যুক্ত)

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

আরেকটি সহায়ক এক্সটেনশন যা আপনি পরীক্ষা করে দেখতে পারেন তা হ'ল পাঠ্য এক্সটেনশন, যা আপনাকে শব্দগুলি কাটা রোধ করতে সহায়তা করে:

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


2
প্রথম সমাধানটি ত্রুটিযুক্ত ট্যাগ এবং দ্বিতীয় সমাধানটি সমস্ত এইচটিএমএল ট্যাগগুলি স্ট্রিপ করে।
ইউসুফ

1
উত্তর হিসাবে বর্ণিত @ জিলিভান হাঁ,
squall3d

1
@ squall3d এই স্ট্রিপ এইচটিএমএল ছাড়াই টুকরো টুকরো করার জন্য আপনার সমাধান কী?
ইউসুফ

1
@ জিলিভেন সাধারণত যখন আমি কাটা পাঠ্য প্রদর্শন করতে চাই তখন এটি একটি টিজারের উদ্দেশ্যে, যেখানে আমি খুব কমই এইচটিএমএল চাই। তবে যদি আপনার এইচটিএমএল সংরক্ষণের প্রয়োজন হয় তবে আপনি এই এক্সটেনশনটি চেষ্টা করতে পারেন: gist.github.com/leon/2857883
squall3d

1
আমি যদি শরীরের ক্ষেত্রে ছবিটি ব্যবহার করি। না 2, চিত্রগুলির জন্য কাজ করছে না। অন্য কোনও কোড রয়েছে কি,
ছবিটিও

5

আপনি এখন এটি twig_extender মডিউল এবং ব্যবহারের মাধ্যমে করতে পারেন |truncate

.Twig টেমপ্লেটে এটি কীভাবে ব্যবহার করা যায় তার একটি উদাহরণ এখানে দেখুন, আমি twig_field_value ব্যবহার করছি :

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

দ্রষ্টব্য: আমি সাধারণত আমার ডেভেল সেটিংস (./admin/config/de વિકાસment /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

এইভাবেই আমি এটি পরিচালনা করেছি।

উদাহরণ:
ক্ষেত্র - নোড - শরীর - নিবন্ধ 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 %}
...
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.