Pasar al contenido principal
Evitar problemas con la caché de los bloques en Drupal (8-9)

Evitar problemas con la caché de los bloques en Drupal (8-9)

Evitar problemas con la caché de los bloques en Drupal (8-9)

2 minutos

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.

 

Artículos relacionados

Comentarios

Añadir nuevo comentario

Este campo no se mostrará públicamente.