it-swarm-es.com

Drupal el almacenamiento en caché evita la lectura de cookies

En uno de mis sitios de producción escribí un conmutador de hojas de estilo jQuery. Deja caer una cookie cuando se realiza una selección y usa php para seleccionar la hoja de estilo correspondiente en la carga de página que anula los estilos. Todo es genial hasta que habilito el modo de almacenamiento en caché de rendimiento, por lo que la cookie se ignora en cada carga de página. Obviamente, este no es el efecto deseado y puedo ver por qué ocurre esto: porque las páginas están almacenadas en caché y ya no son realmente dinámicas con respecto a la carga de lo que se ve como una hoja de estilo que cambia "dinámicamente". Puede cambiar la hoja de estilo, sin embargo, al regresar a una página, se aplica el estilo inicial. Solo como referencia, he codificado el php en cada plantilla de página (page-front.tpl.php y page.tpl.php) y el javascript se encuentra en mi scripts.js. El php es básicamente solo un par de declaraciones if else.

Debido al gran volumen de tráfico, tengo que habilitar el almacenamiento en caché en el sitio, sin embargo, lo ideal sería conservar esta funcionalidad de cambio de estilo. ¿Existe algún método para hacer una excepción a la regla de almacenamiento en caché para esto o tendré que deshabilitar el conmutador? ¿Sería útil empaquetarlo en un módulo?

Gracias por adelantado :)

2
Storsey

Creo que te ha costado mucho hacer esto con el almacenamiento en caché, ya que quieres crear dos versiones de la misma página.

No he probado esto, pero debería ser posible permitir que su style.css no sea un archivo CSS real sino una devolución de llamada drupal que devuelva los estilos basados ​​en la cookie. Debería incluir la "hoja de estilo" como lo haría con los estilos para IE. No podría almacenar en caché esto, pero si realmente necesita rendimiento, puede hacerlo en un archivo php y omitir el drupal bootstrap.

Una opción alternativa sería dejar que el propio js ejecute los estilos, basándose en la cookie.

Ninguna de estas opciones es ideal, pero deberían funcionar.

2
googletorp

Usando una cookie para seleccionar una variante de cache_page usando Memcache: http://drupal.org/node/942914 . Usamos esto para la orientación GeoIP.

Usar una cookie para seleccionar un tema móvil si el usuario está en un dispositivo móvil: http://drupal.org/node/361832#comment-4110568 . No use esto, brindó algo de ayuda en una de las reuniones locales SeaDUG .

2
mikeytown2

¿Sería posible crear solo una versión de la página? Incluir TODOS los estilos en cada página (probablemente no sea ideal, pero no el fin del mundo a menos que sean enormes) y luego usar JavaScript para, digamos, agregar una clase de cuerpo dependiendo del valor de la cookie.

Alternativamente, me gusta la idea de googletorp de que la hoja de estilo es una devolución de llamada y no un archivo .css.

2
Chris Cohen