मैं ट्विग में फ़ील्ड डेटा कैसे एक्सेस करूं?


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और इसी तरह। आप उन पर लूप भी कर सकते हैं।

यह सब सीधे PHP में मैप करता है, आप $block_content->field_tags->entity->name->valueप्रीप्रोसेस और अन्य स्थानों पर भी कर सकते हैं जहां आपके पास ब्लॉक_ कॉन्टेंट है।


आपके उत्तर के लिए धन्यवाद! जैसा कि मैं ब्लॉक ट्विग टेम्पलेट से कर रहा हूं, जहां नोड ऑब्जेक्ट उपलब्ध नहीं है (उप-थीमिंग "क्लासी"), क्या मुझे मानों को प्रीप्रोसेस करने और किसी तरह उन्हें इंजेक्ट करने की आवश्यकता होगी?
एस्ट्रार

क्षमा करें, मुझे block_content भाग याद आ गया। उत्तर अपडेट किया गया।
बेर्दिर

उत्तम! मैं ऐसा करके मूल्यों को प्राप्त कर सका: 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

आप इस मामले में ट्विग फील्ड वैल्यू मॉड्यूल का उपयोग कर सकते हैं । यह क्षेत्र रेंडर सरणियों से आंशिक डेटा प्राप्त करने की अनुमति देता है। पूर्व के लिए। content.field_name | field_value -get फ़ील्ड का मान। आप IF स्टेटमेंट में इसका इस्तेमाल कर सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.