Puncte:1

Accesarea valorii nodului în șablonul crenguță de paragraf

drapel es

Scriu un șablon de crenguță pentru un paragraf. Aș dori să accesez o valoare de câmp text din pagina/nodul în care va fi adăugat acest tip de paragraf.

Mai exact, aș dori să accesez valoarea unui câmp de text intitulat „field_runner_id”. Accesez această valoare în șablonul meu de creangă de pagină/nod astfel:

content.field_runner_id|field_value

Am încercat câteva tehnici (enumerate mai jos) pentru a accesa acea valoare a câmpului din șablonul meu de paragraf, dar nu am succes.

Cum mă pot referi la valoarea câmpului unei pagini părinte într-un șablon de paragraf?

Am găsit câteva postări și articole care abordează această problemă și pot obține detalii despre nodul părinte, cum ar fi titlul și nid, dar nu câmpurile pe care le conține.

De exemplu, această postare: https://mark.ie/blog/printing-values-of-a-parent-node-from-a-drupal-paragraphs-field ... m-a ajutat să obțin pagina părinte și să nu adaug acest lucru în șablonul meu de paragraf:

{% set parent = paragraph._referringItem.parent.parent.entity %}
{{ parent.title.value }}
{{ parent.nid.value }}

Am încercat și pe acestea, printre altele, fără succes:

{{ parent.content.field_runner_id.value }}
{{ parent.content.field_runner_id[0] }}
{{ parent.content.field_runner_id|field_value }}
Puncte:4
drapel ru

Prefață: Nu folosi acea metodă de pe acel blog, există o metodă mai bună.

  1. ceva._referringItem nu este sigur în cache, așa că ar fi bine să nu utilizați acest lucru în șabloanele Twig.
  2. ceva._referringItem nu efectuează nicio verificare de acces
  3. paragraph._referringItem.parent.parent.entity este probabil cea mai lungă și mai confuză alternativă de a scrie paragraf.parentEntity

Deci, acum răspunsul adevărat :-)

paragraf.parentEntity returnează obiectul de entitate părinte brut (foarte similar cu paragraf variabilă), dar nu include o matrice de randare precum conţinut. Deci nici nu ai nevoie .conţinut nu ai nevoie |valoare_câmp.

În schimb, îndreptați-vă direct către valoarea câmpului parent.field_on_hostnode.0.value


Mai multe informații despre variabilele din șabloanele de entități:

conţinut = matrice de randare completă a unei entități

continut.câmp_ceva = matrice de redare a unui singur câmp

content.field_something|field_value = obțineți valoarea brută a câmpului înapoi dintr-o matrice de randare (necesită modulul „Twig field value”)

entitate = obiect entitate brut (înlocuiește entitatea cu nodul în șablonul nodului, paragraf în șablonul de paragraf etc).

entitate.câmp_ceva.valoare = nu este recomandat, se va comporta diferit în funcție de tipul câmpului și cardinalitatea câmpului

entity.field_something.getValue() = obține o serie de valori brute de câmp, funcționează pentru toate tipurile de câmp și toate cardinalitățile de câmp

entitate.câmp_ceva.0.valoare = obține prima valoare a câmpului de date brute (pentru câmpuri de text simplu, numere, e-mailuri, câmpuri de telefon; nu va funcționa cu linkuri, imagini, referințe la entități...)

entitate.câmp_ceva.0.numele_coloanei_bazei_de_date = obțineți prima subvaloare a datelor brute numele_coloanei_bazei_de_date de field_something (acest lucru ar putea fi format într-un câmp de text formatat, valoare_finală într-un câmp de date, target_id într-un câmp de referință de entitate,...)

Numai câmpul de referință al entității:

Rețineți că următoarele metode nu sunt sigure pentru cache, nu sunt conștiente de limbă și nu efectuează verificări de acces.

entity.field_reference.0.target_id = obțineți ID-ul numeric al primei entități copil la care se face referire

entity.field_reference.0.entity = primul obiect de entitate copil referit (fără matrice de randare!)

entity.field_reference.0.entity.getTranslation('de') = obține traducerea în germană a primului obiect copil

Doar paragrafe:

paragraf.parentEntity = obiectul entitate părinte directă (fără matrice de randare!)

Kevin avatar
drapel in
De asemenea, este important, atunci când ocoliți randarea, este posibil să pierdeți verificările de acces.
drapel ru
Bun indiciu, am adăugat asta la răspuns. AFAIK același lucru este valabil pentru orice `field_foo.0.entity`
scaffolding avatar
drapel es
Acest lucru este cu adevărat util. Mulțumesc @Hudri
Puncte:3
drapel ve

Cred ca este mai usor decat crezi tu:


{% set parentNode = paragraph.parentEntity %}
<!-- parentNode este deja obiectul nod, așa că acum puteți accesa orice câmp direct fără a trece prin obiectul conținut --->

{{ parentNode.field_runner_id.value }}

Ceea ce vă va face viața mai ușoară, în general, este să instalați dezvolta și devel_kint_extras modul pentru dezvoltare.

Apoi puteți explora structura complicată a obiectului drupal astfel și puteți găsi valoarea câmpului potrivită:

{{kint(parentNode)}}

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.