Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » Drupal »

Drupal 8 - Variables - Template Twig - Cache

Estas en el tema de Drupal 8 - Variables - Template Twig - Cache en el foro de Drupal en Foros del Web. En el HOOK de mi proyecto XXX_preprocess estoy definiendo una variable en función de una cookie. Código de mi Preprocess php: Código: function XXXXXX_preprocess(array &$variables) ...
  #1 (permalink)  
Antiguo 28/06/2017, 08:56
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años
Puntos: 10
Drupal 8 - Variables - Template Twig - Cache

En el HOOK de mi proyecto XXX_preprocess estoy definiendo una variable en función de una cookie.

Código de mi Preprocess php:

Código:
function XXXXXX_preprocess(array &$variables) {
if (isset($_COOKIE[personsSearchCookie]) && !empty($_COOKIE[personsSearchCookie])) {
    $personsFilter = explode("-", $_COOKIE[personsSearchCookie]);
    $variables["personsFilter"] = array (
        "filterType" => $personsFilter[0],
        "filterId" => $personsFilter[1]
    );
}

Pero en la plantilla Twig, siempre me da el valoir inicial de esa variable, nunca cambia.
Código de mi Twig:
Código:
Filtering results by [{{ personsFilter.filterType }}]<br />

{% if personsFilter is defined and personsFilter.filterType is defined and personsFilter.filterType is not empty %}
    {% if personsFilter.filterType == "area" %}
        Filtering by Area <br />      
    {% endif %}

    {% if personsFilter.filterType == "office" %}
        Filtering by Office <br />
    {% endif %}
{% else %}
    No filtering
{% endif %}

Esto debe ser un tema de caché no?

¿Cómo puedo hacer para que cuando mi cookie cambie, la variable sea modificada y desde twig pueda acceder al nuevo valor?

Si hago un dump en el preprocess la variable en PHP tiene siempre el valor actualizado.

Pero Twig siempre saca el valor de la primera carga (tras una limpieza de caché).

Gracias!
  #2 (permalink)  
Antiguo 29/06/2017, 09:18
(Desactivado)
 
Fecha de Ingreso: septiembre-2008
Mensajes: 269
Antigüedad: 15 años, 7 meses
Puntos: 22
Respuesta: Drupal 8 - Variables - Template Twig - Cache

Cita:
Iniciado por el_javi Ver Mensaje
En el HOOK de mi proyecto XXX_preprocess estoy definiendo una variable en función de una cookie.

Código de mi Preprocess php:

Código:
function XXXXXX_preprocess(array &$variables) {
if (isset($_COOKIE[personsSearchCookie]) && !empty($_COOKIE[personsSearchCookie])) {
    $personsFilter = explode("-", $_COOKIE[personsSearchCookie]);
    $variables["personsFilter"] = array (
        "filterType" => $personsFilter[0],
        "filterId" => $personsFilter[1]
    );
}

Para mi puede ser por dos cosas:
1) Intenta agregarle un return $variables["personsFilter"]; despues de la sección que dice:
Código PHP:
Ver original
  1. $variables["personsFilter"] = array (
  2.         "filterType" => $personsFilter[0],
  3.         "filterId" => $personsFilter[1]
  4.     );
2) Intenta cambiar el && por || o porque en la siguiente linea
Código PHP:
Ver original
  1. if (isset($_COOKIE[personsSearchCookie]) && !empty($_COOKIE[personsSearchCookie]))
quiere decir que si tiene un valor establecido la variable y no está en blanco entonces ejecuta el código que sigue.

Nota: || significa o

Si aún así no te funciona, entonces instalas el modulo Devel.

y luego sustituye el código del preprocess por este que te voy a enviar:
Código PHP:
Ver original
  1. function XXXXXX_preprocess(array &$variables) {
  2. if (isset($_COOKIE[personsSearchCookie]) && !empty($_COOKIE[personsSearchCookie])) {
  3.  
  4. //esto es para saber si está llegando a esta sección.
  5. dsm('El valor del cookie es:');
  6. dsm($_COOKIE[personsSearchCookie]);
  7.  
  8.     $personsFilter = explode("-", $_COOKIE[personsSearchCookie]);
  9.  
  10. dsm('Verificamos el valor de la variable $personsFilter');
  11. dsm($personsFilter);
  12.  
  13.  
  14. dsm('Verificamos el valor de la variable $variables antes de asignar el valor');
  15. dsm( $variables["personsFilter"]);
  16.  
  17.  
  18.     $variables["personsFilter"] = array (
  19.         "filterType" => $personsFilter[0],
  20.         "filterId" => $personsFilter[1]
  21.     );
  22.  
  23. dsm('Verificamos el valor de la variable $variables después de asignar el valor');
  24. dsm( $variables["personsFilter"]);
  25. }


Lo que te arroje ponlo aquí.

Saludos y Dios te bendiga.
  #3 (permalink)  
Antiguo 08/07/2017, 17:53
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años
Puntos: 10
Respuesta: Drupal 8 - Variables - Template Twig - Cache

Hola.

Gracias por la respuesta, pero parece ser que efectivamente, es tema de caché
Cambié el formato de trabajo de cookie a parámetros por query y tenía el mismo problema,

Si limpiaba la caché y ejecutaba me cargaba bien, pero el resto de ejecuciones de la misma página con valores diferentes como parámetros por URL, seguía manteniendo el valor inicial después d ela limpieza de caché.

Por ello, leyendo descubrí el tema de los contextos de las variables


Como hablamos, necesitaba que cambiasen los valores de las variables en función de los parámetros de la URL, por lo que usando esto, funciona perfectamente:
Código PHP:
.... definición de mis variables 

$variables
['#cache']['contexts'][] = "url.query_args"
¿Alguna documentación buena para entender bien los contextos?

Gracias!!!

Etiquetas: cache, template, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:47.