Ver Mensaje Individual
  #8 (permalink)  
Antiguo 19/08/2004, 14:50
Avatar de Webstudio
Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
Bueno, veamos si podemos sacar algo en claro, porque este tema me interesa mucho, el de marcar un foro o tema como Leido/No Leido.
Estuve haciendo un experimento recién, configuré el FireFox para que me pregunte antes de setearme cualquier cookie, y me metí en ForosDelWeb, para ver como hace el vBulletin para marcar los temas, y lo que descubrí es lo siguiente:

1) al Entrar al Foro, recibimos la cookie con el hash de la sesión, que es una cookie de sesión (expira al cerrar el browser o después de x minutos) y dos cookies más, que tienen 1 año de duración que indican la última visita(bblastvisit) y la última actividad(bblastactivity). Estas dos cookies, que contienen un unix timestamp, junto a la información almacenada en la base de datos sobre la ultima actualización de cada tema, sirve para hacer "la magia"
Nota: están las demás cookies de usuario, password, preferencias, etc, pero esas no tienen efecto en esto.

2) El foro se nos muestra todos los Foros completos, y basados en la fecha de última actualización de cada foro, comparada con NUESTRA fecha de última visita (la del usuario logeado y que se guardó en la cookie) muestra resaltados los foros que cambiaron DESPUÉS de nuestra última visita. Esto lo hace para todos los foros y subforos que hay. Y no cambia hasta que nuestra cookie de sessión expira.

3) Al entrar en 1 foro en particular ( en mi ejemplo, usé Aplicaciones Prefabricadas ) se vuelve a repetir el proceso del paso 2) , solo que esta vez los temas van a ser los resaltados, basados nuevamente en su fecha de última modificación y la fecha de última visita del usuario. También, al entrar al Foro, se actualiza la cooki de última actividad (bblastactivity), pero la de última visita queda igual.

4) Y al hacer click en un Tema, es donde comienza lo complicado: antes de entrar en el nuevo tema, el Foro nos deja una cookie, llamada vbthread_lastview que contiene información codificada ( vamos, en un formato bastante simple al parecer ), donde se guarda el id's de todos los threads que estaban marcados "nuevos" y que el usuario está visitando, además de un Timestamp al final que debe indicar la fecha de la ultima modificación de la cookie. Esta cookie, es de sesión también, y no se guarda el histórico de toda la vida ( el ejemplo de los 17.000 threads que comentaba Cluster - aunque me gustaria ver una cookie así de grande ). Así, si el usuario vuelve al foro en particular, se puede discriminar, PARA ESA SESION, los temas que ya visitó.

5) Eso es todo? No, a último momento me doy cuenta, que al volver a un Foro en particular, después de leer algún Thread, el vBulletin debe chequear, si hay temas nuevos en ese foro. O sea, si quedan más temas "nuevos" que deban ser marcados. Si no hay más de esos temas, y el foro no tiene sub-foros aún marcados nuevos, entonces se setea una cookie llamada vbforum_view, donde en el mismo formato que la otra cookie, se guardan los ID's de los foros visitados y el timestamp de modificación de la cookie. De esta manera, si volvemos a un foro Mayor, que contenga un subforo, ya puede marcarlo como leido, porqueya hizo la comprobación de que no habia nuevos temas para leer.

Esto, a grandes razgos, es la manera que usa vBulletin para marcar sus foros como leidos/no-leidos. Si alguno quiere comprobar que lo que digo es verdad, puede hacer el mismo ejercicio que yo, configurando sus navegadores y navegando el foro en distintas situaciones. También sería interesante que alguien haga lo mismo, pero con otro foro, como el phpBB o el Invision, para ver que acercamientos al problema hacen estos softwares.

Espero que les haya sido de ayuda. Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com