nodes – Pasar el ID de nodo actual a la plantilla de bloque

Pregunta:

Tengo un módulo con un bloque personalizado MyCustomBlock.php que obtiene el nid de la página actual y pasa el valor a la plantilla de bloque:

$node = \Drupal::routeMatch()->getParameter('node');
$nid = $node->nid->value;
return array(
  'currentnid' => $nid,
);

Dentro de la plantilla imprimo el valor pasado {{currentnid}}, ¡pero solo funciona limpiando el caché! Por ejemplo, si cargo la página con nid 5 imprime 5, pero si paso a la página con nid 3 imprime 5. Limpiando la caché y recargando la página con nid 3 obtengo el valor 3 impreso. Creo que es un problema con el sistema de almacenamiento en caché de plantillas en D8, ¿tienes alguna idea sobre esto?

Respuesta:

Los bloques se almacenan en caché. Sin embargo, los bloques también son sensibles al contexto en Drupal 8. Según la página de documentación sobre contextos de caché:

Los contextos de caché proporcionan una forma declarativa de crear variaciones dependientes del contexto de algo que debe almacenarse en caché. Al hacerlo declarativo, el código que crea cachés se vuelve más fácil de leer y no es necesario repetir la misma lógica en todos los lugares donde se necesitan las mismas variaciones de contexto.

La página de documentación de la API de caché es una buena lectura para todos.

Un complemento de bloque debería implementar getCacheContexts. Creo que en este caso debería ser "route.name" o "url.path". Es posible que deba profundizar un poco más en esto para su caso de uso particular.

  public function getCacheContexts() {
    return array('route.name');
  }

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım