CondonesDeMarca Posted March 17, 2015 Share Posted March 17, 2015 (edited) Buenas noches gente, La verdad no sabía como explicar en el título mi problema (y el de muchos, imagino) así que lo explico mejor a continuación: Resulta que, cuando hago una modificación en prestashop desde el back office, como por ejemplo cambiar la imagen de una categoría, de un banner, el slider, el logotipo... etc. Hasta que no entro a la web y pulso F5 para actualizar la página, los cambios no se hacen visibles. ¿A qué se debe esto? Previamente he realizado desde la pestaña de parámetros avanzados - rendimiento- forzar compilación y caché no, pero ni aún haciendo esto se soluciona el problema, es decir, siempre tengo que hacer F5 entrando a la web como si fuera un cliente, sea con chrome o mozilla (son los que he probado). Esto es molesto ya que, si se quiere efectuar por ejemplo una campaña promocional para una semana y entra un cliente habitual, no le aparecerá el cambio hasta que no actualice la página y por lo general esto no se suele hacer, se da por hecho que lo que ves es lo que hay. Buscando estos días atrás por internet, descubrí una manera por html de refrescar una página de forma automática, poniendo cualquiera de los siguientes códigos: <meta http-equiv="expires" content="0" > ------> cada vez que la visite <meta http-equiv="refresh" content="86400" > ----> cada día Y hay más por internet... La pregunta es, ¿cómo implementar esto en el index de prestashop? Porque buscando el fichero index.php ahí no se puede modificar poniendo esa información y en sus archivos .tpl probé en algunos y tampoco me sirvió. ¿Alguna idea? Muy agradecido de antemano, Un saludo! Edited March 20, 2015 by CondonesDeMarca (see edit history) 1 Link to comment Share on other sites More sharing options...
Enrique Gómez Posted March 18, 2015 Share Posted March 18, 2015 (edited) Las paginas de prestashop se montan con header.tpl y footer.tpl, ambos se encuentran en tu tema. luego el contenido varía en función de si estas en la home, producto (product.tpl) ..etc. En header.tpl pudes meter las meta etiquetas dentro de la etiqueta <head> Por otra parte si en el módulo de banner se sube una imagen lo que debería hacer es renombrarla. En general esto que comentas suele ser un problema para los ficheros css y js, en ese caso es una buena idea algo como comentan en http://blog.belvg.com/forcing-browsers-to-update-cache-after-changes-on-your-prestashop-store.html Edited March 18, 2015 by Enrique Gómez (see edit history) 1 Link to comment Share on other sites More sharing options...
Enrique Gómez Posted March 18, 2015 Share Posted March 18, 2015 (edited) Como no me dja editar el post, añado: Como el problema es que no lo hace, una opción es mirar el código de generación de las urls y añadir un parámetro con un timestamp al final -> p.ej url/modulo/img/img_1.jpg?090018032015, así queda única (dependiendo del timestamp->cada día,hora, minuto o segundo) Edited March 18, 2015 by Enrique Gómez (see edit history) 1 Link to comment Share on other sites More sharing options...
CondonesDeMarca Posted March 18, 2015 Author Share Posted March 18, 2015 Las paginas de prestashop se montan con header.tpl y footer.tpl, ambos se encuentran en tu tema. luego el contenido varía en función de si estas en la home, producto (product.tpl) ..etc. En header.tpl pudes meter las meta etiquetas dentro de la etiqueta <head> Por otra parte si en el módulo de banner se sube una imagen lo que debería hacer es renombrarla. En general esto que comentas suele ser un problema para los ficheros css y js, en ese caso es una buena idea algo como comentan en http://blog.belvg.com/forcing-browsers-to-update-cache-after-changes-on-your-prestashop-store.html Hola Enrique, lo primero agradecerte las respuestas sobre este tema ya que andaba algo perdido. En cuanto a los archivos header.tpl y footer.tpl en ellos fue donde puse el código para refrescar la página entre las etiquetas <head> pero no me hizo ningún cambio cuando entraba en prestashop, es decir de igual forma por alguna extraña razón no refrescaba la página. Respecto al enlace que me has indicado del blog le echaré un ojo durante el día de hoy a ver que comentan. Como no me dja editar el post, añado: Como el problema es que no lo hace, una opción es mirar el código de generación de las urls y añadir un parámetro con un timestamp al final -> p.ej url/modulo/img/img_1.jpg?090018032015, así queda única (dependiendo del timestamp->cada día,hora, minuto o segundo) Esta parte no la entiendo bien, no se a que te refieres con la utilización de un módulo. No obstante lo que se pretende es que cada vez que un cliente entre a la web se le actualice automáticamente esa vez que entra para que vea todos los cambios realizados, es decir, no sería útil ponerlo cada "x" tiempo puesto que, si el cliente digamos que tarda 10 minutos en efectuar una compra (por poner un ejemplo) y la actualización la hago cada hora no verá el cambio o, si lo pongo cada 5 minutos igual es molesto si el cliente está navegando por la web que se le actualice derrepente la página. Me quedo a la espera de que me aclares esto último. Gracias de antemano, Un saludo! Link to comment Share on other sites More sharing options...
Enrique Gómez Posted March 18, 2015 Share Posted March 18, 2015 (edited) Ten en cuenta una cosa, en general es bueno que el servidor mande cachear (luego el navegador puede hacer caso.. o no F5) los ficheros estaticos, tu web tendrá menos carga de trabajo y google lo tiene en cuenta. En el htaccess puede ser que tengas <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/gif "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType text/css "access plus 1 week" ExpiresByType text/javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType image/x-icon "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 year" ExpiresByType image/vnd.microsoft.icon "access plus 1 year" ExpiresByType application/font-woff "access plus 1 year" ExpiresByType application/x-font-woff "access plus 1 year" ExpiresByType application/vnd.ms-fontobject "access plus 1 year" ExpiresByType font/opentype "access plus 1 year" ExpiresByType font/ttf "access plus 1 year" ExpiresByType font/otf "access plus 1 year" ExpiresByType application/x-font-ttf "access plus 1 year" ExpiresByType application/x-font-otf "access plus 1 year" </IfModule> En la 1.6 esta opción esta en Rendimiento: ¿Optimizar Apache? Si se pone <IfModule mod_expires.c> ExpiresActive Off </IfModule> posiblemente no mande ninguna directiva de cacheo Pero centrandose en el problema de imagenes promocionales ->banners/sliders. lo ideal es mirar el módulo/s y mirar que gene una url distinta cada vez que hay un cambio. Si la url es distinta cada vez quehay un cambio no habrá cacheo posible por parte del navegador ya que la url es distinta y la tiene que cargar sí o sí. Saludos Edited March 18, 2015 by Enrique Gómez (see edit history) 1 Link to comment Share on other sites More sharing options...
CondonesDeMarca Posted March 20, 2015 Author Share Posted March 20, 2015 (edited) Ten en cuenta una cosa, en general es bueno que el servidor mande cachear (luego el navegador puede hacer caso.. o no F5) los ficheros estaticos, tu web tendrá menos carga de trabajo y google lo tiene en cuenta. En el htaccess puede ser que tengas <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/gif "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType text/css "access plus 1 week" ExpiresByType text/javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType image/x-icon "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 year" ExpiresByType image/vnd.microsoft.icon "access plus 1 year" ExpiresByType application/font-woff "access plus 1 year" ExpiresByType application/x-font-woff "access plus 1 year" ExpiresByType application/vnd.ms-fontobject "access plus 1 year" ExpiresByType font/opentype "access plus 1 year" ExpiresByType font/ttf "access plus 1 year" ExpiresByType font/otf "access plus 1 year" ExpiresByType application/x-font-ttf "access plus 1 year" ExpiresByType application/x-font-otf "access plus 1 year" </IfModule> En la 1.6 esta opción esta en Rendimiento: ¿Optimizar Apache? Si se pone <IfModule mod_expires.c> ExpiresActive Off </IfModule> posiblemente no mande ninguna directiva de cacheo Pero centrandose en el problema de imagenes promocionales ->banners/sliders. lo ideal es mirar el módulo/s y mirar que gene una url distinta cada vez que hay un cambio. Si la url es distinta cada vez quehay un cambio no habrá cacheo posible por parte del navegador ya que la url es distinta y la tiene que cargar sí o sí. Saludos Hola de nuevo Enrique, Antes de nada disculpa la tardanza en contestar, lo he estado mirando todo y la parte de los módulos no llego a entenderla bien, pero vayamos por partes. En el archivo .htaccess efectivamente tengo lo siguiente: <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/gif "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType text/css "access plus 1 week" ExpiresByType text/javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType image/x-icon "access plus 1 year" </IfModule> Teniendo en cuenta esto, que es bastante similar al que me has puesto (pero más corto en mi caso), entiendo que, si cambio la fecha "month" o "week" por "day" por ejemplo, ¿se solucionaría el problema que estoy teniendo? Es decir, ¿bastaría en este caso con cambiar la palabra "month" y "week" por "day" para que el cambio se efectuara al cliente al día siguiente? Igual como comentabas supone un problema con el rendimiento de la web pero si soluciona el problema que tengo, casi prefiero utilizar esta forma al menos para cuando realice cambios en la web y, cuando estén fijos por un timepo, puedo cambiar las fechas anteriormente indicadas, ¿estoy en lo cierto? Por último, respecto a lo que comentas de los modulos, ¿en qué archivo del módulo (por ejemplo homeslider) puedo localizar si genera o no una url distinta cada vez que se produce un cambio? EDITO: Con esto anterior que te he preguntado del módulo, me ha dado por mirar dentro del módulo "homeslider" y en el index.php en la carpeta images, aparece lo siguiente: header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Location: ../"); exit; Entiendo por lo tanto que no almacena caché, pero entonces, ¿por qué no se muestran las nuevas imágenes hasta que no se hace F5? ¿O estoy en el archivo equivocado? Una vez más gracias por tu atención, Un saludo! Edited March 20, 2015 by CondonesDeMarca (see edit history) Link to comment Share on other sites More sharing options...
Enrique Gómez Posted March 20, 2015 Share Posted March 20, 2015 Lo del index.php es para que no se listen los directorios, esta prácticamente en cualquier carpeta. Por otra parte si en homeslider te vas al tpl homeslider.tpl (variara en función de que versión tengas) verás que se generán las imágenes listándolas del directorio {foreach from=$homeslider_slides item=slide} {if $slide.active} <li> <a href="{$slide.url|escape:'htmlall':'UTF-8'}" title="{$slide.description|escape:'htmlall':'UTF-8'}"> <img src="{$smarty.const._MODULE_DIR_}homeslider/images/{$slide.image|escape:'htmlall':'UTF-8'}" alt="{$slide.legend|escape:'htmlall':'UTF-8'}" height="{$homeslider.height|intval}" width="{$homeslider.width|intval}" /> </a> </li> {/if} {/foreach} Pero prestashop ya lo hace bien, es decir, cada vez que subes una imagen esta se genera con un nombre aleatorio por lo que no hay problema con la cache Entonces, en principio si tienes módulos de banners/imagenes/sliders que no generan nombres aleatorios, mira primero a ver si subiendo una imagen con nombre diferente te sigue pasando el problema, y si el módulo esta muy mal hecho entonces sólo te quedará buscar en la plantilla el punto donde se generan las imagenes y añadirle un parámetro data?=la_fecha Esto último sería p.ej ?date={$smarty.now|date_format:'%Y%m%d'} en caso de durar un dia <img src="{$smarty.const._MODULE_DIR_}homeslider/images/{$slide.image|escape:'htmlall':'UTF-8'}?date={$smarty.now|date_format:'%Y%m%d'}" alt="{$slide.legend|escape:'htmlall':'UTF-8'}" height="{$homeslider.height|intval}" width="{$homeslider.width|intval}" /> Link to comment Share on other sites More sharing options...
CondonesDeMarca Posted March 20, 2015 Author Share Posted March 20, 2015 Lo del index.php es para que no se listen los directorios, esta prácticamente en cualquier carpeta. Por otra parte si en homeslider te vas al tpl homeslider.tpl (variara en función de que versión tengas) verás que se generán las imágenes listándolas del directorio {foreach from=$homeslider_slides item=slide} {if $slide.active} <li> <a href="{$slide.url|escape:'htmlall':'UTF-8'}" title="{$slide.description|escape:'htmlall':'UTF-8'}"> <img src="{$smarty.const._MODULE_DIR_}homeslider/images/{$slide.image|escape:'htmlall':'UTF-8'}" alt="{$slide.legend|escape:'htmlall':'UTF-8'}" height="{$homeslider.height|intval}" width="{$homeslider.width|intval}" /> </a> </li> {/if} {/foreach} Pero prestashop ya lo hace bien, es decir, cada vez que subes una imagen esta se genera con un nombre aleatorio por lo que no hay problema con la cache Entonces, en principio si tienes módulos de banners/imagenes/sliders que no generan nombres aleatorios, mira primero a ver si subiendo una imagen con nombre diferente te sigue pasando el problema, y si el módulo esta muy mal hecho entonces sólo te quedará buscar en la plantilla el punto donde se generan las imagenes y añadirle un parámetro data?=la_fecha Esto último sería p.ej ?date={$smarty.now|date_format:'%Y%m%d'} en caso de durar un dia <img src="{$smarty.const._MODULE_DIR_}homeslider/images/{$slide.image|escape:'htmlall':'UTF-8'}?date={$smarty.now|date_format:'%Y%m%d'}" alt="{$slide.legend|escape:'htmlall':'UTF-8'}" height="{$homeslider.height|intval}" width="{$homeslider.width|intval}" /> Amigo...creo que has solucionado mi problema! He subido el código que me has dicho en el .tpl y parece ser que se ha solucionado porque he hecho varias pruebas desde un ordenador en el que tenía cacheada la web y efectivamente se actualiza cuando subo una imagen nueva o quito alguna etc. La duda que me queda ahora es, para el logotipo, porque imagino que se podrá hacer de una forma similar dentro del .tpl con otro código distinto al que utilicé yo en el header ya que no me funcionó. Por cierto, he echado un vistazo a tu web y parece bastante interesante lo que llevas, se nota que entiendes, si te dedicas a esto de forma profesional mándame por privado precios por horas o como consideres tu y para dudas futuras cualquier cosa que vea te la comento a ti ya que te has tomado la molestia en contestar por aquí, que de verdad puede parecer una tontería pero este asunto me traía de cabeza. Un saludo! Link to comment Share on other sites More sharing options...
Enrique Gómez Posted March 20, 2015 Share Posted March 20, 2015 (edited) Insisto en que el modulo home cada vez ques ubes una imagen nueva te genera un nombre aleatorio.. no se, quizás es una versión vieja fijate el nombre 7b902...png. Prueba a borrar y subir de nuevo, pero bueno siempre tienes el truco este del date (la questión es tener una url distinta) Lo del logo en el header.tpl <a id="header_logo" href="{$base_dir}" title="{$shop_name|escape:'htmlall':'UTF-8'}"> <img class="logo" src="{$logo_url}" alt="{$shop_name|escape:'htmlall':'UTF-8'}" {if $logo_image_width}width="{$logo_image_width}"{/if} {if $logo_image_height}height="{$logo_image_height}" {/if}/> </a> donde esta la url del logo {$logo_url} pon {$logo_url}?v2 (y cada vez que lo cambies v3, v4..etc) si lo cambias muy a menudo, lo mismo que antes {$logo_url}?date={$smarty.now|date_format:'%Y%m%d'} duraria un dia , si pones '%Y%m%d%H una hora Por cierto, he echado un vistazo a tu web y parece bastante interesante lo que llevas, se nota que entiendes, si te dedicas a esto de forma profesional mándame por privado precios por horas o como consideres tu y para dudas futuras cualquier cosa que vea te la comento a ti ya que te has tomado la molestia en contestar por aquí, que de verdad puede parecer una tontería pero este asunto me traía de cabeza. Ok Edited March 20, 2015 by Enrique Gómez (see edit history) Link to comment Share on other sites More sharing options...
CondonesDeMarca Posted March 20, 2015 Author Share Posted March 20, 2015 (edited) Generará un nombre nuevo como dices pero la prueba está que sin poner el código la web me sacaba información cacheada y al ponerlo parece que se ha solucionado, quizás haya sido casualidad y ahora funcione pero me parece raro, porque ya te digo que tenía este problema desde hace mucho. Con el logo voy a hacer algo parecido, subiré uno nuevo sin cambiar nada a ver si coge el de antes y si lo hace, probaré a poner el código a ver si coge el nuevo. Edito: Acabo de probar con el logotipo y efectivamente ha funcionado sin problemas mediante el código que me has facilitado. De momento marco este tema como solucionado Un saludo! Edited March 21, 2015 by CondonesDeMarca (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts