Evitar problemas con la caché de los bloques en Drupal (8-9)
Drupal cuenta con un sistema de caché muy potente pero que, a veces, nos complica la existencia.
En este artículo quiero mostrarte como puedes desactivar la caché para nuestros bloques de tres maneras diferentes...
Desactivar la caché en una clase BlockBase
Si estamos programando un bloque a través del plugin BlockBase, podemos desactivar la caché simplemente añadiendo una función a nuestra clase:
class MyModuleBlock extends BlockBase {
/**
* {@inheritdoc}
*/
public function build() {
}
/**
* @return int
*/
public function getCacheMaxAge() {
return 0;
}
}
Al añadir el método getCacheMaxAge a nuestra clase, indicaremos al sistema de caché de Drupal que no queremos que cachee el contenido de este bloque.
Desactivar caché vía hook_preprocess_HOOK
Otra forma que tenemos de desactivar la caché para nuestro bloque (o cualquier bloque con este método), es a través del hook hook_preprocess_HOOK.
El primer paso será identificar nuestro bloque y luego cambiar el valor de la variable #cache...
/**
* Implements hook_preprocess_HOOK()
*/
function mytheme_preprocess_block(&$vars) {
if($vars['derivative_plugin_id'] == 'block-id-name') {
$vars['#cache']['max-age'] = 0;
}
}
Desactivar caché vía hook_form_alter
Si nuestro bloque contiene un formulario podemos aplicar este código para desactivar la caché:
function test_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
if ($form_id == "node_something_form") {
\Drupal::service('page_cache_kill_switch')->trigger();
}
}
Con estos tres métodos no deberíamos volver a tener problemas con la caché y nuestros bloques.
INFO: El contenido del artículo se adhiere a nuestros principios de ética editorial. Para notificar un error visita nuestro formulario de contacto.