Désactiver le cache pour des blocs spécifiques

9

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

Est-ce techniquement possible? Comment?

Amine
la source
Comme l'a noté MPD, utilisez le paramètre max-age. Vous pouvez également le faire via l'interface utilisateur sur le formulaire d'édition de bloc.
J'ai aussi ce problème - c'est ennuyeux Drupal ne gère pas cela automatiquement. La mise en cache est bonne, mais Drupal est censé être pour les sites Web dynamiques ...
James

Réponses:

1

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 fonctionnent simplement avec la mise en cache prête à l'emploi, 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 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 .

Berdir
la source
La vue renvoie un nœud aléatoire afin de faire varier le bloc d'annonces.
Amine
J'attendrai la prochaine version pour la solution propre donc :)
Amine
Oui, l'aléatoire provient du plugin Views Random Sort. Je suis d'accord, il est possible de générer un contenu de bloc javascript qui met dans une liste les entités, puis décide au niveau du navigateur avec une fonction aléatoire ou circulaire de choisir et d'ajaxer l'une d'entre elles. Cependant, j'aurai plus d'un bloc comme celui-ci dans certaines pages et une solution côté serveur conviendra le mieux.
Amine
10

S'il s'agit d'un bloc personnalisé, vous pouvez utiliser l' API de cache et définir l' âge maximal du cache 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.

mpdonadio
la source
Comme expliqué dans la question, mon bloc est un bloc Vues. Je pense que c'est trop compliqué d'interférer avec la couche php / module.
Amine
1
Malheureusement, cela ne fonctionne pas de toute façon (essayé). On dirait que la page est livrée à partir de pagecache et contient le bloc obsolète. Mais je continue d'enquêter.
Rainer Feike