Deaktivieren Sie den Cache für bestimmte Blöcke

9

Ich möchte, dass Seiten weiterhin vom Drupal 8-Caching-Mechanismus für anonyme Benutzer profitieren, mit Ausnahme bestimmter Blöcke, die bei jeder Seitenaktualisierung aktualisiert werden sollten, da sie aus Ansichten generiert werden.

Ist es technisch möglich? Wie?

Amin
quelle
Verwenden Sie, wie bei MPD angegeben, die Einstellung für das maximale Alter. Sie können dies auch über die Benutzeroberfläche im Blockbearbeitungsformular tun.
Ich habe auch dieses Problem - es ist ärgerlich, dass Drupal sich nicht automatisch darum kümmert. Caching ist gut, aber Drupal soll für dynamische Websites sein ...
James

Antworten:

1

Was zeigt dieser Ansichtsblock?

D8 verfügt über Cache-Tags und Kontexte, die den Block automatisch ungültig machen, wenn sich etwas ändert.

Wenn Sie also eine Liste von Knoten haben, wird dieser Block jedes Mal aktualisiert, wenn ein Knoten hinzugefügt oder aktualisiert wird. Bis dahin wird jedoch die zwischengespeicherte Version verwendet. Was viel besser ist, als auf jeder Seite neu zu erstellen.

Es funktioniert auch mit dem Seiten-Cache. Diese Seiten werden ebenfalls automatisch aktualisiert.

Viele, viele Dinge funktionieren einfach mit dem sofortigen Zwischenspeichern, ohne dass manuelle Konfigurationen erforderlich sind.

Bearbeiten (auf Kommentar antworten):

Zufällig mit dem Zufallssortier-Plugin? Das sollte diesen Block automatisch als nicht zwischenspeicherbar markieren. Dies hat jedoch keine Auswirkungen auf das Seiten-Cache-Modul. Es gibt jetzt ein neues Smartcache / Dynamic Page Cache-Modul, das jedoch erst in der nächsten Beta (oder RC!) Bereitgestellt wird. Dadurch können Sie den Rest der Seite zwischenspeichern und nur diesen Teil erstellen.

Aber ein Fall wie dieser lässt sich wahrscheinlich am besten mit Javascript implementieren. Wenn es nur wenige Knoten gibt, können Sie sie alle anzeigen, standardmäßig ausgeblendet und nur zufällig einen von ihnen sichtbar machen. Oder fordern Sie eine URL mit Javascript an, die eine zufällige Anzeige zurückgibt, oder besuchen Sie besser eine zufällige Anzahl von N URLs, die jeweils eine Anzeige zurückgeben (z. B. indem Sie eine Liste von URLs zurückgeben und dann eine davon auswählen. Sie können dies sogar direkt für die Bild-URL tun .

Berdir
quelle
Die Ansichten geben einen zufälligen Knoten zurück, um den Anzeigenblock zu variieren.
Amine
Ich werde auf die nächste Veröffentlichung für die saubere Lösung warten, also :)
Amine
Ja, der Zufall stammt aus dem Plugin "Ansichten zufällig sortieren". Ich bin damit einverstanden, dass es möglich ist, einen Javascript-Blockinhalt zu generieren, der die Entitäten in eine Liste einfügt und dann auf Browserebene mit einer zufälligen oder kreisförmigen Funktion entscheidet, eine davon auszuwählen und zu jaxen. Ich werde jedoch auf einigen Seiten mehr als einen Block wie diesen haben und eine serverseitige Lösung wird am besten passen.
Amine
10

Wenn dies ein benutzerdefinierter Block ist, können Sie die Cache-API verwenden und das maximale Alter des Caches auf 0 setzen, z

$build = [
 // ...
 '#cache' => [
   'max-age' => 0,
 ],
];

Wenn es sich um einen vorhandenen Block handelt, können Sie ihn ändern, um ihn dem Render-Array hinzuzufügen.

mpdonadio
quelle
Wie in der Frage erläutert, ist mein Block ein Ansichtsblock. Ich denke, es ist zu kompliziert, um auf PHP / Modul-Ebene zu stören.
Amine
1
Leider funktioniert das sowieso nicht (ausprobiert). Scheint, als würde die Seite aus dem Seitencache geliefert und enthält den veralteten Block. Aber ich recherchiere immer noch.
Rainer Feike