web-dev-qa-db-fra.com

Comment invalider un cache sur une vue spécifique?

Je suis confronté à une situation où j'ai besoin d'invalider une vue spécifique afin de lancer l'effacement du cache sur cette vue.

views_invalidate_cache () efface TOUTES les données des vues mises en cache, pour chaque vue sur le site.

Comment puis-je déclencher une invalidation du cache pour une vue spécifique depuis l'intérieur du code de mon module?

8
sheldonkreger

Je crois que la fonction que vous recherchez est cache_flush du plugin de cache des vues.

3
Coleman

Si vous connaissez le nom de la vue que vous souhaitez effacer, vous pouvez effacer les caches spécifiques à cette vue en appelant une fonction comme celle-ci:

/**
 * Function to invalidate selected views caches to enable the action forms to work
 */
function mymodule_invalidate_views_cache($view_name) {
  cache_clear_all('ctools_export:views_view:' . $view_name, 'cache_views', TRUE);
  cache_clear_all($view_name, 'cache_views_data', TRUE);
}

J'en avais besoin pour permettre aux actions VBO avec des formulaires de configuration de pouvoir fonctionner lorsque la mise en cache des vues était activée (j'utilise la mise en cache du contenu). J'ai appelé cela deux fois, une fois dans la fonction mymodule_myaction_form () et à nouveau dans la fonction mymodule_myaction_submit ().

10
jlscott

Vous pourriez envisager d'utiliser affiche le cache de conten .

Il est normalement utilisé pour effacer automatiquement un cache de vues lorsque du contenu associé est ajouté ou mis à jour, mais il fournit un cadre pour surveiller un segment de cache. Je ne l'ai pas fait, mais documentation pour les développeurs sont disponibles.

1
Dave Bruns

Jetez un oeil au projet Actions de cache . Il fait exactement ce que vous voulez. Si vous pouvez utiliser des règles dans votre situation, vous n'avez même pas besoin d'écrire du code personnalisé, vous pouvez simplement utiliser le module tel quel et configurer des règles pour effacer les caches de certaines vues. Sinon, consultez les fonctions internes de son fonctionnement comme guide pour effacer les caches de vue par programme.

1
Coleman

Pour ne pas trop vous deviner, mais avez-vous envisagé un système de mise en cache à proxy inverse comme le vernis? Ces choses donnent des performances incroyables et rendent la mise en cache db des vues, des nœuds, etc. quelque peu théorique (sauf si vous avez beaucoup d'utilisateurs connectés et que vous avez besoin de cette mise en cache pour eux).

0
Coleman