Je souhaite utiliser le nouveau balisage de cache dans D8 pour aider à synchroniser le contenu associé de différents types (entités, nœuds, blocs, etc.). Mais à la lecture de la documentation actuellement disponible de cette fonctionnalité, je ne comprends pas comment ajouter ma propre balise de cache aux éléments de contenu lors de la création/mise à jour desdits éléments.
Par exemple, lors de la création d'un nouveau nœud d'un type Store, je voudrais ajouter l'emplacement de la balise de cache: new_york_123 et la même chose pour un bloc. Ensuite, si j'ai changé le nom d'affichage de l'emplacement de New York 123 en SoHo, je pourrais invalider la balise de cache et avoir toutes les mises à jour de contenu associées.
Voici comment utiliser les balises de cache dans le contexte des blocs personnalisés que j'ai essayés et qui fonctionnent mais je pense que cela s'applique à d'autres contextes
Dans le tableau de génération, vous pouvez spécifier cache > tags > node_list
et le contenu de ce bloc serait invalidé (actualisé) lorsque TOUT NŒUD est modifié sans rien d'autre à faire de votre part
public function build() {
return array(
'#markup' => MY_MODULE_awesome_dynamic_node_content(),
'#cache' => [
'tags' => ['node_list'], //invalidate when any node updates
//'tags' => ['node:1','term:2'], //invalidate when node 1 or term 2 updates
],
);
}
Alternativement vous pouvez insérer un ou plusieurs ID de nœud/terme/utilisateur pour invalider le tableau sur des nœuds ou des termes spécifiques, comme indiqué dans le commentaire de code ci-dessus. Remarque: vous pouvez mélanger et faire correspondre les nœuds, les termes, les utilisateurs et les balises personnalisées comme bon vous semble.
si vous voulez avoir votre propre façon d'effacer votre tableau de build, ajoutez votre balise unique personnalisée dans le tableau de build (n'importe quelle chaîne unique fera l'affaire)
public function build() {
return array(
'#markup' => MY_MODULE_awesome_dynamic_node_content(),
'#cache' => [
'tags' => ['MY_CUSTOM_UNIQUE_TAG'],
],
);
}
et dans votre logique de code personnalisé, appelez invalidateTags
avec votre propre balise
function MY_MODULE_custom_clear_cache_logic(){
...
\Drupal\Core\Cache\Cache::invalidateTags(array('MY_CUSTOM_UNIQUE_TAG'));
si vous voulez en savoir plus sur drupal 8 cache internals