Cache de bloc : attention au hook_block_view !

C’est expliqué sur drupal.org, au niveau de l’API du hook_block_view, dans un commentaire :

si le bloc est en cache, dès le 2nd affichage du bloc, le hook_block_view correspondant n’est plus appelé. Logique, c’est ce qu’on veut en mettant du cache : éviter à Drupal de recalculer à chaque coup le bloc et son rendu.

Seulement, la petite bourde facile, c’est d’utiliser drupal_add_css, drupal_add_js, drupal_add_library directement dans le callback du hook_block_view.

Erreur ! Car le JS, CSS ou la librairie ne sera ajoutée qu’une seule fois, avant que le bloc ne soit en cache. Ensuite, nada, que d’chi, vous n’aurez plus vos attachements…

Solution ?

la 1ère réponse au commentaire explique qu’on peut gérer son cache soi-même, en disant à Drupal : ne cache pas ce bloc, je m’en occupe !

La 2nde, plus « best practice » à mon sens, conseille d’utiliser tout bonnement la clé #attached de votre render Array. Ah oui, j’espère que vous utilisez un render Array, sinon, c’est pas bien !

 

En même temps, il suffit de lire la doc et de respecter les standards, mais c’est si facile de se tromper que ça valait bien un article !