es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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:

    function mymodule_node_view_alter(&$build) {
      $request = \Drupal::request();
      if (!empty($request->getQueryString())) {
        $build['#cache']['max-age'] = 0;
      }
    }
    

    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 servicio page_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 tabla cache_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.

Comments are closed.