Puncte:0

Unde să definiți regulile personalizate de stocare în cache a entităților pentru paginile de detalii

drapel cn

Când aveți un proiect mai mare, probabil că aveți activat atât memoria cache a paginii interne, cât și modulul cache a paginii dinamice interne. În cazul meu, da. Dar am o secțiune pe site-ul meu care conține entități personalizate („Concurs”) unde aș dori să am un control personalizat al stocării în cache a paginii de detalii (concurs/1). Iată ce am găsit până acum:

/**
 * Implementează hook_entity_view_alter()
 * Dezactivați memorarea în cache pentru toate tipurile de entități de concurs
 */
function mymodule_entity_view_alter(array &$build, Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display) {
  $tipuri = ['concurs'];
  if (în_array($entity->bundle(), $tipuri)) {
    $build['#cache']['max-age'] = 0;
    \Drupal::service('page_cache_kill_switch')->trigger();
  }
}

Acesta este singurul mod? M-aș aștepta să am un mod mai curat, în mine Concurs.php poate? Aștept cu nerăbdare posibile răspunsuri!

4uk4 avatar
drapel cn
Nu este clar ce întrebi. Cache-ul dinamic al paginii respectă vârsta maximă = 0, așa că nu există o modalitate mai curată de a-l dezactiva. Te referi la [Internal Page Cache](https://www.drupal.org/docs/administering-a-drupal-site/internal-page-cache)? Doar dacă ați activat acest modul, veți avea nevoie de comutatorul de oprire suplimentar. Sau te referi la anteturile de răspuns pentru a controla memoria cache a browserului?
Stef Van Looveren avatar
drapel cn
Mulțumesc pentru răspuns. Ne pare rău, mă refer atât la memoria cache internă a paginii, cât și la memoria cache a paginii dinamice interne. Să considerăm că ambele module sunt activate. Mă întrebam doar dacă există o modalitate mai OO de a defini stocarea în cache a paginilor cu detalii ale entităților personalizate.
4uk4 avatar
drapel cn
Sunt mai multe lucruri neclare. Codul dvs. verifică un pachet, dar se pare că doriți să verificați `getEntityTypeId()`. Dacă acesta este cazul, puteți adăuga opțiunea `no_cache: TRUE` la rutele entității (route_provider în clasa dvs. de entitate **Concurs**).
Stef Van Looveren avatar
drapel cn
Răspunsul corect de mai jos a fost exact ceea ce căutam. Mulțumiri.
Puncte:2
drapel cn

Mă întrebam doar dacă există o modalitate mai OO de a defini stocarea în cache a paginilor de detalii personalizate ale entității.

Aceasta ar fi extinderea furnizorului de rută pe care îl utilizați acum (DefaultHtmlRouteProvider sau AdminHtmlRouteProvider), specificându-l în clasa de entitate personalizată

* „furnizor_rută” = {
* "html" = "Drupal\mymodule\MyEntityRouteProvider",
*},

și depășind getCanonicalRoute pentru a adăuga opțiunea no_cache:

funcția protejată getCanonicalRoute(EntityTypeInterface $entity_type) {
  $route = parent::getCanonicalRoute($entity_type);
  $route->setOption('no_cache', TRUE);
  returnează $rută;
}
Stef Van Looveren avatar
drapel cn
Grozav. Nu știam asta. Mulțumiri.

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.