web-dev-qa-db-fra.com

Désactiver le cache pour des blocs spécifiques

Je voudrais laisser les pages continuer à bénéficier du mécanisme de mise en cache Drupal 8 pour les utilisateurs anonymes, à l'exception d'un bloc spécifique qui devrait être mis à jour à chaque actualisation de la page en sachant qu'il est généré à partir de vues.

Est-ce techniquement possible? Comment?

9
Amine

Que montre ce bloc de vues?

D8 a des balises de cache et des contextes qui invalideront automatiquement le bloc si quelque chose change.

Donc, si vous avez une liste de nœuds, chaque fois qu'un nœud est ajouté ou mis à jour, ce bloc sera mis à jour, mais d'ici là, la version mise en cache est utilisée. Ce qui est bien mieux que de reconstruire sur chaque page.

Il fonctionne également avec le cache de pages, ces pages seront également mises à jour automatiquement.

Beaucoup, beaucoup de choses juste travailler avec mise en cache hors de la boîte, sans avoir besoin de configurations manuelles.

Modifier (répondre au commentaire):

Aléatoire avec le plugin de tri aléatoire? Cela devrait automatiquement marquer ce bloc comme non cache. Cela n'affecte cependant pas le module de cache de pages. Il y a maintenant un nouveau module de cache de page dynamique/smartcache mais il ne sera que dans la prochaine version bêta (ou RC!). Cela permettra éventuellement de mettre en cache le reste de la page et de simplement construire cette partie.

Mais un cas comme celui-ci est probablement mieux implémenté en utilisant du javascript. S'il n'y avait que quelques nœuds, vous pourriez tous les afficher, masqués par défaut et rendre l'un d'eux visible au hasard. Ou demandez une URL avec javascript qui renvoie une annonce aléatoire ou encore mieux visitez un aléatoire de N URL qui renvoient chacune une annonce (par exemple en renvoyant une liste d'URL puis en en choisissant une. Vous pouvez même le faire directement pour l'URL de l'image .

1
Berdir

S'il s'agit d'un bloc personnalisé, vous pouvez utiliser Cache API , et définir cache max age sur 0, par exemple

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

S'il s'agit d'un bloc existant, vous pouvez le modifier pour l'ajouter au tableau de rendu.

10
mpdonadio