টুইগের ক্ষেত্রের ডেটা আমি কীভাবে অ্যাক্সেস করব?


15

আমার কাছে কাস্টম ব্লকের ধরণের জন্য এই তালিকা রয়েছে:

left|Align left
right|Align right

আমি টুইগের কীটি এই জাতীয় কিছু করে অ্যাক্সেস করতে পারি:

{% block content %}
  {{ content.field_align }}  {# outputs 'right' #}
{% endblock %}

যাইহোক, আমি যদি একটি সাধারণ তুলনা করি তবে এটি আউটপুট হবে FALSE

{{ kint(content.field_align == 'right') }}

নিম্নলিখিত কোডটি ফেরত দেয় TRUE

{{ kint(content.field_align['#items'].getValue()|first.value == 'right') }}

"আসল" স্ট্রিংটি পাওয়ার জন্য কি আরও ছোট সংস্করণ রয়েছে যাতে আমি টুইগস স্ট্রিং ফিল্টার ব্যবহার করতে পারি এবং এটিকে পরিপাটি করে রাখতে পারি?


উত্তর:


16

content কনফিগার করা ফর্ম্যাটারের উপর ভিত্তি করে রেন্ডার অ্যারে ধারণ করে।

আপনি যদি আসল মানগুলিতে অ্যাক্সেস করতে চান তবে সত্তা অবজেক্টের মাধ্যমে সেগুলি অ্যাক্সেস করতে চান। সাধারণত, এটি ইতিমধ্যে আপনার টেম্পলেটটিতে উপলব্ধ node। আপনার ক্ষেত্রে এটি কিছুটা বিশেষ কারণ কারণ ব্লক কনটেন্টটি নিজস্ব টেমপ্লেট ছাড়াই ব্লক সামগ্রীতে রেন্ডার করা হয়, সুতরাং আপনাকে এটি নিজের yourtheme_preprocess_block($variables)মতো করে এটিকে উপলব্ধ করতে হবে :

if (isset($variables['elements']['content']['#block_content'])) {
  $variables['block_content'] = $variables['elements']['content']['#block_content'];
}

তারপরে, আপনি এর সাথে কোনও ক্ষেত্রের মানটি অ্যাক্সেস করতে পারেন block_content.field_name.property। আপনার ক্ষেত্রে তাই block_content.field_align.value,। সম্পত্তিটি valueবেশিরভাগ ক্ষেত্রের জন্য, রেফারেন্সের জন্য, আপনি হয় target_idআইডির entityজন্য বা রেফারেন্সযুক্ত সত্তা অবজেক্টের জন্য ব্যবহার করতে পারেন । হ্যাঁ, আপনি সরাসরি এতে ক্ষেত্রগুলিতে অ্যাক্সেস করতে পারেন তবে সর্বদা নিশ্চিত হয়ে নিন যে কোনও রেফারেন্স উপস্থিত রয়েছে অন্যথায় আপনি মারাত্মক ত্রুটি বা ব্যতিক্রমগুলি সহ শেষ করতে পারেন। উদাহরণস্বরূপ একটি পদ রেফারেন্সের লেবেলটি অ্যাক্সেস করতে আপনি এটি হিসাবে অ্যাক্সেস করতে পারেন block_content.field_tags.entity.name.value

আপনি যদি ক্ষেত্রের ব-দ্বীপ নির্দিষ্ট না করেন তবে এটি প্রথমটির ডিফল্ট হয়। আপনি যদি অন্য একটি বদ্বীপ অ্যাক্সেস করতে চান তবে আপনি আরও কিছু ব্যবহার করতে পারেন entity.field_name.1.value। আপনি এগুলি লুপ করতে পারেন।

এই সমস্ত মানচিত্র সরাসরি পিএইচপি-তে, আপনি $block_content->field_tags->entity->name->valueপ্রিপ্রোসেস এবং অন্যান্য জায়গায় যেখানে আপনার ব্লক-কনটেন্ট রয়েছে তা করতে পারেন।


আপনার উত্তরের জন্য ধন্যবাদ! যেহেতু আমি ব্লক টুইগ টেম্পলেটটি থেকে এই কাজটি করছি যেখানে নোড অবজেক্টটি উপলব্ধ নেই (সাব-থিসিং "উত্সাহী"), আমি কি মানগুলি প্রিপ্রোস করতে এবং সেগুলি কোনওভাবে ইনজেকশনের প্রয়োজন?
ইস্ট্রার

দুঃখিত, আমি ব্লক-কনটেন্ট অংশটি মিস করেছি। উত্তর আপডেট করেছেন।
বার্ডির

পারফেক্ট! আমি এটি করে মূল্যবোধগুলি পেতে পারি: block_content.field_name.value আমাকে বুঝতে সাহায্য করার জন্য আপনাকে ধন্যবাদ!
ইস্ট্রার

6

এখানে একটি বিকল্প, টেম্পলেট একমাত্র উপায় যা আপনাকে রেন্ডার অ্যারে রেন্ডার করতে এবং এর মানটি পরীক্ষা করতে দেয় (ভেরিয়েবলটি এমনভাবে পরীক্ষা করতে দেয় যেমন আপনি এটি মুদ্রণ করছেন, কারণ দ্রুপাল 8 ট্যুইগে স্বয়ংক্রিয়ভাবে চলকগুলিকে অ্যারে রেন্ডার করে দেয়):

{{ kint(content.field_align|render == 'right') }}

বা আপনি যদি পরে ভেরিয়েবলটি মুদ্রণ করেন তবে অতিরিক্ত রেন্ডার সংরক্ষণের জন্য অন্য কোনও বিকল্প:

{% set field_align = content.field_align|render %}
{{ kint(field_align == 'right') }}

{{ field_align }}

খুব দরকারী এবং জেনে রাখা ভাল! ইনপুট জন্য ধন্যবাদ।
ইস্ট্রার

2

আপনি এক্ষেত্রে টুইগ ফিল্ড ভ্যালু মডিউল ব্যবহার করতে পারেন । এটি ফিল্ড রেন্ডার অ্যারে থেকে আংশিক ডেটা পেতে অনুমতি দেয়। প্রাক্তন জন্য। বিষয়বস্তু.ফিল্ড_নাম | ক্ষেত্র_মূল্যের ক্ষেত্রের মান। আপনি যদি এটি বিবৃতিতে ব্যবহার করতে পারেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.