Deshabilitar caché para bloques específicos

9

Me gustaría permitir que las páginas sigan beneficiándose del mecanismo de almacenamiento en caché de Drupal 8 para usuarios anónimos, excepto por los bloques específicos que deben actualizarse en cada actualización de la página sabiendo que se generan a partir de Vistas.

¿Es técnicamente posible? ¿Cómo?

Amina
fuente
Como señaló MPD, use la configuración de edad máxima. También puede hacerlo a través de la interfaz de usuario en el formulario de edición de bloque también.
También tengo este problema: es molesto que Drupal no se ocupe de esto automáticamente. El almacenamiento en caché es bueno, pero se supone que Drupal es para sitios web dinámicos ...
James

Respuestas:

1

¿Qué muestra ese bloque de vistas?

D8 tiene etiquetas de caché y contextos que invalidarán automáticamente el bloque si algo cambia.

Entonces, si tiene una lista de nodos, cada vez que se agrega o actualiza un nodo, ese bloque se actualizará, pero hasta entonces, se usa la versión en caché. Lo cual es mucho mejor que reconstruir en cada página.

También funciona con el caché de la página, esas páginas también se actualizarán automáticamente.

Muchas, muchas cosas simplemente funcionan con el almacenamiento en caché de fábrica, sin la necesidad de ninguna configuración manual.

Editar (respondiendo al comentario):

¿Aleatorio con el complemento de ordenación aleatoria? Eso debería marcar automáticamente ese bloque como no almacenable en caché. Sin embargo, eso no afecta el módulo de caché de página. Ahora hay un nuevo módulo de caché de página dinámica / caché inteligente, pero solo estará en la próxima versión beta (¡o RC!). Eso eventualmente permitirá almacenar en caché el resto de la página y simplemente construir esa parte.

Pero un caso como este probablemente se implemente mejor usando JavaScript. Si solo hubiera unos pocos nodos, podría mostrarlos todos, ocultos de forma predeterminada y hacer que uno de ellos sea visible al azar. O solicite una URL con javascript que devuelva un anuncio aleatorio o incluso mejor visite una aleatoria de N URL que devuelvan un anuncio (por ejemplo, devolviendo una lista de URL y luego seleccionando una de ellas. Incluso podría hacerlo directamente para la URL de la imagen .

Berdir
fuente
Las vistas devuelven un nodo aleatorio para variar el bloque de anuncios.
Amine
Esperaré la próxima versión para la solución limpia, así que :)
Amine
Sí, el azar es del complemento Vistas Random Sort. Estoy de acuerdo, es posible generar un contenido de bloque de JavaScript que ponga en una lista las entidades y luego decida en la capa del navegador con alguna función aleatoria o circular para elegir y ajax una de ellas. Sin embargo, tendré más de un bloque como este en algunas páginas y una solución del lado del servidor encajará mejor.
Amine
10

Si se trata de un bloque personalizado, puede usar la API de caché y establecer la antigüedad máxima de la caché en 0, p. Ej.

$build = [
 // ...
 '#cache' => [
   'max-age' => 0,
 ],
];

Si es un bloque existente, puede modificarlo para agregarlo a la matriz de representación.

mpdonadio
fuente
Como se explica en la pregunta, mi bloque es un bloque de Vistas. Creo que es demasiado complicado interferir en la capa php / module.
Amine
1
Desafortunadamente, esto no funciona de todos modos (lo probé). Parece que la página se entrega desde el caché de página y contiene el bloque desactualizado. Pero todavía estoy investigando.
Rainer Feike