Puncte:0

Accesarea unui câmp Paragrafe din interiorul paragrafului părinte

drapel us

Am un fișier crenguță de paragraf pe care îl adaug la subtema mea.

În interiorul ei am un alt paragraf care este folosit. Și ar putea fi mai mult de 1 din paragraful copil.

Am acest cod:

 {% pentru cheie, element în content.field_faq_section_question if key|first != '#' %}
  {{ articol }}
    
{% endfor %}

Și tipărește corect titlul și câmpurile de text ale paragrafului. Dar ceea ce trebuie să fac accesați fiecare în parte aici.

Am încercat o mulțime de moduri diferite de a accesa câmpurile și niciuna nu funcționează. Un dump și un var_dump de element se termină cu un ecran gol.

Aș putea crea un alt fișier twig pentru acest paragraf și funcționează, dar sper să folosesc cheia pentru a adăuga un id la un wrapper div.

Aș vrea să:

 {% pentru cheie, element în content.field_faq_section_question if key|first != '#' %}
  {{ item.title }}
    {{ item.text }}
{% endfor %}

Care este cel mai bun mod de a face asta?

4uk4 avatar
drapel cn
*Pentru a folosi cheia pentru a adăuga un id la un wrapper div* aveți nevoie de un șablon de câmp, nu de un șablon de paragraf: `field--paragraph--field-faq-section-question.html.twig`
sonfd avatar
drapel in
Ar trebui să fii atent când faci astfel de lucruri. Dacă redați astfel de lucruri, atunci nu randați întregul câmp, eventual săriți peste metadate sau atribute importante din cache, etc. care ar fi putut fi adăugate de module sau teme. În general, este mai bine să nu te lupți cu sistemele Drupal pentru a „nu crea un alt fișier” sau un motiv similar. Lupta cu aceste sisteme te va ajunge din urmă în cele din urmă, promit. :)
Puncte:0
drapel cn

În primul rând, aș recomanda https://www.drupal.org/project/twig_xdebug pentru a vă ajuta să depanați în interiorul șabloanelor twig. Îți va face viața de 100 de ori mai ușoară.

Problema ta este asta content.field_faq_section_intrebare este o matrice de randare, deci trecerea în buclă peste „articolele” sale nu este de fapt trecerea în buclă peste entitățile la care se face referire -- este o buclă peste elementele matricei de randare. De aceea a trebuit să adăugați acea verificare enervantă dacă cheia începe cu #.

Dacă doriți să treceți peste valoare din câmpul de referință, atunci trebuie să treceți în buclă peste #articole. Apoi trebuie să luați paragraful real la care se face referire pentru a accesa câmpurile sale, ceea ce se poate face cu [un_element_de_referință_entitate].entity.

{% pentru k, paragraph_reference în content.field_faq_section_question['#items'] %}
  {% set paragraph = paragraph_reference.entity %}
  {% set my_id = paragraph.field_some_text_field.0.value %}

  <div id="{{ my_id }}">
    // ... orice vrei să faci
    // Cred că va funcționa la fel ca {{ item }} pe care îl utilizați deja
    {{ content.field_faq_section_question[k] }}
  </div>
{% endfor %}

Acestea fiind spuse, în funcție de ceea ce faceți, este posibil să doriți să utilizați un șablon de câmp, așa cum este menționat de 4uk4, sau să utilizați un alt șablon de paragraf (cum ați evita).

William Breindel avatar
drapel us
Acesta este ceea ce aveam nevoie și trebuia să știu. Vă mulțumesc foarte mult. funcționează ca un farmec.
drapel cn
Grozav! Vă rugăm să acceptați acest răspuns atunci când puteți, astfel încât să nu fie adus înapoi pe prima pagină de către botul SE pentru restul timpului. :)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.