Puncte:2

De ce cookie-urile sunt cache-uri în hook_prepress_node() și cum pot preveni sau rezolva această problemă?

drapel ng

În Drupal 9 avem un cârlig _preprocess_node() care încarcă cookie-urile utilizatorului, cum ar fi:

funcția THEME_preprocess_node(&$variabile) {


  $parametri = [];
  dacă (isset($_COOKIE['utm_source'])){
    $parameters[] = 'utm_source=' . $_COOKIE['utm_source'];
    $parameters['#cache']['contexts'][] = 'cookies:utm_source';
  }
  dacă (isset($_COOKIE['utm_medium'])){
    $parametri[] = 'utm_medium=' . $_COOKIE['utm_medium'];
    $parameters['#cache']['contexts'][] = 'cookies:utm_medium';
  }
  dacă (isset($_COOKIE['utm_campaign'])){
    $parameters[] = 'utm_campaign=' . $_COOKIE['utm_campaign'];
    $parameters['#cache']['contexts'][] = 'cookies:utm_campaign';
  }
  $parametri = implode('&', $parametri);

  $variables['parametri'] = '&' . $parametri;
}

În șablonul meu Node:

{{ parametrii }}

Dar va încărca cookie-urile stocate în cache, chiar și de la alți vizitatori până când memoria cache este șters.

Încercăm să încărcăm parametrii cookie într-un șablon de nod, dar se pare că hook-urile de preprocesare memorează în cache datele. Chiar și cu toate modulele de cache dezactivate.

Deci, există o altă modalitate prin care ar trebui să verificăm și să transmitem datele cookie către un șablon de nod?

drapel id
Ce contexte de cache ați folosit pentru conținutul redat?
quantumized avatar
drapel ng
Îmi pare rău, nu sunt sigur ce vrei să spui cu conținut redat.Ați putea vă rog să-mi indicați locul corect pentru a găsi informațiile pentru a vă răspunde la întrebare?
drapel id
Aceasta este o întrebare aproape identică: https://www.drupal.org/project/drupal/issues/2587489
quantumized avatar
drapel ng
Am adăugat etichetele cache, dar încă nu funcționează pentru mine.Am adăugat codul complet al funcției la postarea originală.
drapel id
Mi-am actualizat răspunsul. Conform întrebării la care s-a răspuns deja, https://drupal.stackexchange.com/questions/189451/cache-in-hook-preprocess-page, acolo se află setarea cache-ului.
drapel id
Vă sugerez să închideți această întrebare ca duplicat.
leymannx avatar
drapel ne
Răspunde asta la întrebarea ta? [Cache în pagina de preprocesare hook](https://drupal.stackexchange.com/questions/189451/cache-in-hook-preprocess-page)
quantumized avatar
drapel ng
@leymannx, da, am complimentat abonatul evenimentului și pot încărca corect valorile cookie acum, dar nu mi-am dat seama cum să transmit acele valori în șablonul meu nod de la abonatul evenimentului. Ceva idei despre asta? Mulțumiri!
Puncte:4
drapel id

Trebuie să iei în considerare redare cache. În acest caz, trebuie să adăugați un context cache care face referire la cookie. Sunt alte intrebari pe acest forum cu exemple, și modulul de țeavă mare are alta:

$has_big_pipe_nojs_cookie = $request->cookies->has(BigPipeStrategy::NOJS_COOKIE);
$page['#cache']['contexts'][] = 'cookie-uri:' . BigPipeStrategy::NOJS_COOKIE;

Nu ți-ai arătat tot codul, dar ceea ce cred că ai nevoie aici este ceva de genul:

$variables['#cache']['contexts'][] = 'cookies:utm_source';
sonfd avatar
drapel in
Poți să arăți un exemplu?
drapel id
Nu știu ce este $parameters pentru că nu vedem tot codul dvs.
sonfd avatar
drapel in
Sunt în nodul de preprocesare, deci probabil că trebuie să adauge contextul la afișarea nodului.

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.