Twig टेम्पलेट में कई मान सामग्री फ़ील्ड के माध्यम से Iterate करें


23

मुझे field_admin_tagsएक node.html.twigटेम्प्लेट में फ़ील्ड के प्रतिपादन पर नियंत्रण रखना होगा ।

यह काम:

  • {{ content.field_admin_tags }} - सब कुछ रेंडर करें (लेबल + सभी फ़ील्ड मान)
  • {{ content.field_admin_tags.0 }} - क्षेत्र में केवल पहला मूल्य रेंडर करता है, और कोई लेबल नहीं

समस्या: मैं टैग, जैसे आसपास मार्कअप पर कोई नियंत्रण नहीं है <ul><li>...</li></ul>

तो मेरा विचार रेंडर सरणी पर पुनरावृति करना था ।

लेकिन यह काम नहीं करता है:

{% for tag in content.field_admin_tags %}
  {{ tag }}
{% endfor %}

मैं: Exception: Object of type Drupal\node\Entity\Node cannot be printed

मुझे लगता है कि मैं क्षेत्र के अंदर की वस्तुओं बनाम रेंडर सरणी की कुंजियों / मूल्यों पर ध्यान दे रहा हूं (यदि मैं प्रत्येक लूप में "X" प्रिंट करता हूं, तो मुझे 20 X मिलते हैं जबकि मेरे पास इस क्षेत्र में केवल दो या तीन मूल्य हैं) ।

मैं पुनरावृति करना चाहते हैं content.field_admin_tags.0, content.field_admin_tags.1आदि

इसे ठीक करने के लिए कोई भी विचार? धन्यवाद।


1
इस मुद्दे पर करते हैं drupal.org/node/2776307
गागरिन

जवाबों:


15

आप इसे एक फ़ील्ड टहनी में ठीक कर सकते हैं। वहां आप मौजूदा लूप का उपयोग फ़ील्ड आइटम्स पर पुनरावृति करने के लिए कर सकते हैं:

node.html.twig

{{ content.field_admin_tags }}

क्षेत्र - क्षेत्र-admin-tags.html.twig

<ul{{ attributes }}>
  {% for item in items %}
    <li>{{ item.content }}</li>
  {% endfor %}
</ul>

यह उदाहरण बदल देता <div>है <ul>{{ attributes }}फ़ील्ड टेम्प्लेट को हटाएं या बायपास न करें , देखें कि क्विकडिट को क्या तोड़ सकता है, और मैं इसे कैसे ठीक करूं?


इसे मूल टेम्पलेट से कहा जाता है{{ content.field_admin_tags }}
aydow

23

4k4 से सहमत फ़ील्ड टेम्पलेट सबसे अच्छी जगह है, यदि आप वास्तव में इसे इकाई टेम्पलेट (जैसे नोड) में चाहते हैं, तो आप इस तरह कर सकते हैं:

{% for key, item in content.field_tags if key|first != '#' %}
  <div class="item-{{ key + 1 }}">{{ item }}</div>
{% endfor %}

लेकिन ईमानदारी से मुझे लगता है कि यह थोड़ा बदसूरत है, फ़ील्ड टेम्पलेट सही जगह है।


1
सहमत, यह थोड़ा बदसूरत है। ;) कोड स्निपेट के लिए धन्यवाद, यद्यपि।
AngularChef

पूरी तरह से विभिन्न प्रकार के एंटाइट्स के साथ काम करता है
क्रिस्टोफ

11

यदि आप, मेरी तरह, एक नोड के टहनी टेम्पलेट पर पैराग्राफ के माध्यम से पुनरावृति करने का तरीका ढूंढ रहे हैं, तो यह है कि यह कैसे करना है:

मान लें कि आपके पास बहु-स्तरीय पैराग्राफ फ़ील्ड के साथ एक नोड है, इसलिए एक सामग्री संपादक कई पैराग्राफ बना सकता है और आप नोड पैरा ट्विग टेम्पलेट पर प्रत्येक पैराग्राफ के माध्यम से पुनरावृति करना चाहते हैं (उदाहरण के लिए प्रत्येक पैराग्राफ के चारों ओर एक आवरण जोड़ने के लिए):

{% for key,value in node.my_paragraph_field.value %}
    {{ content.my_paragraph_field[key] }}
{% endfor %}

अद्यतन: मुझे सामग्री का उपयोग किए बिना सभी पैराग्राफ को प्रिंट करने का एक और तरीका खोजने की आवश्यकता है। सामग्री चर में वह सब कुछ शामिल है जो आप नोड के 'मैनेज डिस्प्ले' सेक्शन में सेट करते हैं, लेकिन मेरी वर्तमान कार्य विधि 'मैनेज डिस्प्ले' का उपयोग कभी नहीं करना है और न ही लेआउट के बाद से आप वास्तव में नोड ट्विग फाइल के सभी डेटा तक पहुँच सकते हैं, और लगभग सभी सेटिंग्स जो आप 'मैनेज डिस्प्ले' पर करते हैं, जैसे कि एक छवि शैली लागू करना, या एक दिनांक प्रारूप सेट करना, ... आप सीधे टहनी में कर सकते हैं।

मेरे लिए यह एक फायदा है क्योंकि मुझे पता है कि जो कुछ भी मैं देखता हूं वह टहनी फ़ाइल से आता है, और मुझे कुछ अस्पष्ट फ़ील्ड सेटिंग्स देखने की आवश्यकता नहीं है जो कहीं न कहीं कक्षाएं जोड़ सकती हैं। इसलिए मैं जो कुछ भी देखता हूं वह सिर्फ एक जगह (नोड्स ट्विग फाइल) से आता है, न कि ट्विग फाइल और मैनेज डिस्प्ले स्क्रीन के संयोजन से।

वैसे भी, भयानक Twig Tweak मॉड्यूल का उपयोग करते हुए, यहां बताया गया है कि सामग्री चर का उपयोग किए बिना एक नोड की टहनी फ़ाइल में बहु मूल्य पैराग्राफ फ़ील्ड को कैसे प्रिंट किया जाए:

{% for item in node.field_paragraphs %}
    {{ drupal_entity('paragraph', item.target_id) }}
{% endfor %}

1

मैंने उस #itemsसंपत्ति को उपयोगी पाया है जब टहनी में अज्ञात लंबाई के छोरों का निर्माण होता है:

print number of values within field:
{{ content.field_admin_tags['#items']|length }}

---

{# remember length in variable (minus 1 because it starts from 0): #}
{% set numTagsIndex = content.field_admin_tags['#items']|length - 1 %}

{# loop until the max value is reached: #}
{% for i in 0..numTagsIndex %}
  {{ content.field_admin_tags[i] }}
{% endfor %}

0

यदि आप पैराग्राफ फ़ील्ड के अंदर फ़ील्ड के चारों ओर अतिरिक्त आवरण रखना चाहते हैं या किसी विशेष अनुच्छेद संदर्भ फ़ील्ड मान के लिए किसी कारण की आवश्यकता है, तो आप निम्न कार्य कर सकते हैं:

{% for key,value in node.paragraph_field_name.value %}

<div class="example-wrapper">
{{ content.paragraph_field_name[key]['#paragraph'].field_content.value }}
</div>

{% endfor %}

ऐसा करने से {{kint(content.paragraph_field_name[key])}}, आप देखेंगे कि फ़ील्ड ऐरे के ['# पैरा'] भाग के अंदर पहुँच योग्य हैं।

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