Drupal 9 desactivar caché de página con cadena de consulta.
Tengo Drupal 9.
Quiero desactivar la caché cuando exista una cadena de consulta.
Este es mi código:
function mytheme_preprocess_page(&$variables)
{
if(isset($_SERVER['QUERY_STRING'])) {
if(!empty($_SERVER['QUERY_STRING']))
{
\Drupal::service('page_cache_kill_switch')->trigger();
}
}
}
Comprobé que la tabla “cache_data” todavía tiene nuevas filas con diferentes cadenas de consulta (/pagina-esempio?a=x).
Intenté con Drupal 8 y recuerdo que las filas no se insertaron.
Quizás me esté perdiendo algo sobre la caché.
¿Cómo puedo evitar que se creen nuevas filas en esta tabla?
davy.ai
Para desactivar por completo el almacenamiento en caché cuando existe una cadena de consulta, puedes utilizar el siguiente código en Drupal 9:
Esta implementación del enganche te permitirá desactivar por completo el almacenamiento en caché para el nodo que se está visualizando cuando hay una cadena de consulta presente. Puedes ajustar este código para que funcione con diferentes entidades o en diferentes escenarios según sea necesario.
En cuanto a las nuevas filas que aún se insertan en la tabla
cache_data
, es importante tener en cuenta que no todo el almacenamiento en caché está controlado a través de la capa de almacenamiento en caché de Drupal (\Drupal::cache()
,\Drupal\Core\Cache\Cache
). El serviciopage_cache_kill_switch
que estás utilizando solo afecta al mecanismo de almacenamiento en caché de página incorporado, pero otras capas de almacenamiento en caché, como la de entidad o la de almacenamiento en caché de páginas dinámicas, aún pueden persistir datos en la tablacache_data
según la configuración individual de tu sitio. Para desactivar por completo el almacenamiento en caché para una solicitud, puedes ajustar el valor de$build['#cache']['max-age']
como se muestra arriba.