Puncte:0

Cârligul pentru câmp nu este declanșat atunci când utilizați delta în șablon

drapel ie

Am încercat să-mi conectez câmpul de tip Link cu numele mașinii „field_link”. Acest câmp este redat în șablon folosind indexul delta pentru a extrage unele valori, de exemplu:

{{ content.field_link[0]['#title'] }}

Am observat asta cand folosesc content.field_link[0] sau content.field_link.0 cârligul meu HOOK_preprocess_field__field_link(&$vars, $hook) nu este declanșată. Dar imediat ce folosesc content.field_link cârligele funcționează.

Există o soluție sau folosirea deltelor pentru a extrage valorile unor câmpuri nu este cea mai bună practică?

Mulțumiri

Kevin avatar
drapel in
Acestea sunt matrice de randare. Primul exemplu tipărește o valoare, în timp ce al doilea declanșează o funcție de randare pentru a genera rezultatul. Acesta este motivul pentru care. Dacă aveți nevoie de altceva decât cel implicit, ar trebui fie să utilizați un formatator de câmp, fie să preprocesați variabile noi pentru șablon.
Puncte:1
drapel in

Cârligul de preprocesare a câmpului funcționează numai atunci când randați campul. Odată ce începeți să extrageți valori din obiectul câmpului (cum ar fi proprietăți individuale sau delte specifice), nu mai redați câmpul în sine, astfel nu declanșați cârligul.

De asemenea, nu recomand extragerea și randarea datelor în acest fel, deoarece pierzi unele metadate care vin cu aceste obiecte (de exemplu, capacitatea de stocare în cache, informații despre temă, informații despre formatator, modificări de la alte module etc.). Ai putea:

  • Creați un formatator de câmpuri pentru acel tip de câmp și redați doar o anumită deltă (prin suprascriere viewElements() și doar adăugând delte specifice). Puteți face delta configurabilă.
  • Sau o combinație de hook_field_formatter_third_party_settings_form și hook_preprocess_field. Primul vă va permite să salvați configurația în configurația de afișare a câmpului, în timp ce cel de-al doilea vă permite să preluați acea configurație și să modificați rezultatul câmpului.
    • Un bun exemplu al acestei combinații (deși folosit în alt scop) poate fi găsit în Garduri modul.

În ambele cazuri, puteți alege să le faceți configurabile prin intermediul admin și să nu codificați selecția delta în șablon. Puteți chiar să o faceți astfel încât să le ignorați pe ambele în întregime, lăsând câmpul să redă ieșirea implicită.

Patrick Star avatar
drapel ie
Folosesc delte pentru a extrage valori și a scăpa de șabloanele imbricate ale drupal, deoarece de cele mai multe ori le fac pe ale mele. Dar după cum văd, aceasta nu este o idee bună. În prezent, problema mea este că am creat un câmp personalizat Widget pentru Link și vreau să obțin câteva valori suplimentare de la acest widget la șablonul meu. Vă mulțumim pentru răspunsul dumneavoastră.

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.