Puncte:0

Într-un șablon de nod, cum pot spune ce regiuni sunt în uz/ocupate?

drapel kr

Încerc să creez o funcție de preprocesare în fișierul meu .theme pentru a face o variabilă disponibilă pentru șabloanele de noduri.

Vreau ca variabila să conțină doar numele tuturor regiunilor care sunt utilizate în prezent (adică redarea conținutului).

Ideea este că, dacă am o regiune numită left_hand_nav care este redată pe unele pagini (nu toate) și am un nod numit generic_page, din șablonul meu de nod generic_page aș dori să pot face:

{% if left_hand_nav %}
 Fă ceva
{% altfel %}
 Fă altceva
{% endif %}

Nu sunt interesat să controlez redarea niciunui bloc de regiuni din șablonul de nod. În schimb, pentru orice pagină dată în care este redat nodul, vreau doar să știu dacă o anumită regiune din pagina respectivă este în uz.

Îmi dau seama că acest lucru se poate face foarte ușor dintr-un șablon de pagină, dar în loc să am un miliard de miliard de condiționale în șablonul de pagină, aș prefera câteva condiționale în mai multe șabloane de noduri.

Daca cineva ar putea sa ma indrume in directia buna, as aprecia foarte mult.

sonfd avatar
drapel in
Vorbiți dacă regiunile din șablonul page.html.twig au conținut, adică regiunile definite în fișierul .info.yml al temei dvs.?
abe-cedarian avatar
drapel kr
@sonfd da, dar vreau să știu din șabloanele de noduri.
drapel ru
Pot vedea motivația pentru acest lucru din punct de vedere al dezvoltării frontend, dar arhitectura lui Drupal (caching entităților, BigPipe,...) face ca acest lucru să fie extrem de greu de lucrat chiar și la jumătate de încredere. Mă tem că nu există o cale *corectă* pentru asta.
Puncte:1
drapel cn

În cazul special de navigare la o pagină nod (cum ar fi atunci când vizualizați un articol), puteți vedea că atunci când implementați hook_preprocess_page , $variables conțin o valoare „node”, dacă adăugați orice proprietate la $variables['node'] , îl veți putea folosi în fișierul node.html.twig

Actualizați

Ca și în hook_preprocess_page, puteți accesa toate regiunile folosind $variables['REGION_NAME'] , astfel încât să le puteți verifica dacă sunt goale sau au conținut, dacă nu erau goale, le puteți salva numele într-o matrice și apoi aplicați acea matrice la $variables['nod']

4uk4 avatar
drapel cn
Nu puteți seta proprietăți în $variables['node']. Obiectul nod este stocat static în cache și toate variabilele care fac referire la acest obiect au aceeași instanță. De asemenea, pagina și nodul sunt procesate și stocate în cache independent unul de celălalt și nu știi care dintre ele este procesat primul.De cele mai multe ori, nici măcar nu sunt procesate în aceeași solicitare, deoarece pagina și nodul sunt stocate în cache bin/chei diferite și cu metadate cache diferite.
abe-cedarian avatar
drapel kr
Mulțumesc @4k4, asta explică de ce nu a funcționat.

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.