Puncte:0

Schimbați obiectul paragraf pentru randare

drapel mx

Am un tip de paragraf cu un câmp de referință al nodului care, dacă îl lăsați gol, ar trebui să arate un nod aleatoriu folosind o logică definită.

Am codul pentru a face interogarea și a obține nodul și, în mod ideal, aș dori să-l pun pe obiectul paragraf într-un cârlig de pre-rendare, astfel încât paragraful să poată reda normal folosind configurația sa obișnuită. Ceva de genul acesta (avertisment: pseudo-codish):

funcția mymodule_paragraph_view($build, $paragraph, $display, $view_mode) {
  if (!este_tipul_meu_paragraf($paragraf)) return;

  if (!$paragraph->field_mynoderef->isEmpty()) return;

  $nod = getRandomNode();
  $paragraf->set('field_mynoderef', $node);
}

Aceasta setează corect valoarea, dar se pare că este prea târziu în procesul de randare pentru ca acesta să afecteze ieșirea redată (adică nu arată de fapt nodul). Am încercat să fac asta și pe $build['#paragraf'] obiect, care conține același paragraf, cu rezultate similare. Cum pot face asta să funcționeze?

BONUS: Cum se face astfel încât să memoreze în cache ieșirea folosind o configurație bazată pe timp (de exemplu, expiră după 60 de secunde, astfel încât în ​​fiecare minut va afișa un nod diferit și nu va rula logica de interogare la fiecare solicitare).

Puncte:0
drapel de

Trebuie să construiți nodul încărcat într-o matrice care poate fi redată și să îl adăugați la $build matrice.

$nod = getRandomNode();

$entity_type = $node->getEntityTypeId();
$view_mode = 'teaser';
$view_builder = \Drupal::entityTypeManager()->getViewBuilder($entity_type);
$storage = \Drupal::entityTypeManager()->getStorage($entity_type);
$build['field_mynoderef'] = $view_builder->view($node, $view_mode);

Întrebarea dvs. despre stocarea în cache nu are legătură cu această problemă și ar trebui să fie separată într-o întrebare separată. Drupal Answers este un site de întrebări și răspunsuri cu formatul unei întrebări la un răspuns, iar adăugarea răspunsului la întrebarea respectivă ar dilua acest subiect.

drapel mx
Ce se întâmplă dacă vreau să reutilizam configurația de afișare a paragrafului? (Poate că cer prea multe, dar se pare că ar trebui să fie posibil) Acesta este motivul pentru care am vrut să modific obiectul paragraf în sine și să nu mă joc cu matrice de randare pentru nodul real. Ideea este să poți uita de acest cod, în cazul în care configurația de afișare a paragrafului se schimbă vreodată (de exemplu, modul de vizualizare pentru nod).
drapel mx
De asemenea, este hook_paragraph_view potrivit pentru asta? Pentru că există, de asemenea, hook_paragraph_view_alter și, bineînțeles, hook_preprocess_paragraph (din care ultimul cred că este cu siguranță prea târziu în proces).
Jaypan avatar
drapel de
Aș folosi `hook_paragraph_view_alter()` pentru asta. Și ar trebui să creați un nou mod de vizualizare pentru acest afișaj și să atribuiți câmpurile acelui mod de vizualizare. Apoi utilizați acel mod de vizualizare în loc de „teaser” și nu va trebui să vă faceți griji că cineva va schimba afișajul, deoarece va fi folosit doar pentru această vizualizare.

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.