2010-01-04 8 views
8

Tengo foros de discusión de usuarios codifiqué en php/mysql, quiero saber cómo los foros de nombres grandes pueden mostrarle qué temas tienen publicaciones nuevas en ellos, generalmente cambiando una imagen de icono al lado del hilo sin usar apenas cualquier recurso?¿Cómo los foros te muestran temas no leídos?

Respuesta

7

La forma más simple es rastrear la última vez que alguien inició sesión. Cuando vuelven a visitar, todo lo que se ha actualizado desde entonces es obviamente "nuevo".

Esto tiene algunos problemas, ya que el cierre de sesión marca efectivamente todos los elementos como leídos.

La única otra forma en que podría pensar sería mantener una tabla que contenga todos los hilos y la última publicación en ese hilo que cada usuario haya visto.

user_id thread_id post_id 
     1   5  15 
     1   6  19 

Con esa información, si hay un post en el hilo # 5, que tiene un diámetro interior mayor que 15, entonces usted sabe que hay mensajes sin leer allí. Actualice esta tabla solo con el post_id de la última publicación en esa página. Esto significa que si hay 3 páginas de publicaciones nuevas, y el usuario solo ve la primera, aún sabrá que hay publicaciones no leídas.

+2

y, por supuesto, la forma difícil es registrar cada visita a cada hilo por cada usuario. –

+1

Creo que los foros de renombre tienen algo que ver con el uso de cookies para esto también, así que no hay una gran tabla de registros de DB y de lectura/escritura solo para esta función – JasonDavis

+1

'Sería un PITA masivo si cambiara las computadoras y el foro me dijo que todo era nuevo ... – nickf

0

Como dijo nickf anteriormente, excepto que se realiza un seguimiento de los hilos que el usuario realmente ha visitado. entonces cualquier cosa que el usuario no haya visitado se considera nueva para ese visitante. para un control de grano más fino, se ignoran los hilos creados antes de que el usuario se registre y posiblemente se ignoren los hilos no visitados dentro de un período de tiempo. esto evitaría que cada hilo no visitado se convirtiera en un hilo nuevo para ellos.

Por supuesto, hay muchas maneras de pelar un gato y en función de lo que los creadores foro querían lo anterior se puede cambiar para adaptarse

DC

+1

También foros como vbulletin y phpbb le permitirán hacer clic en un enlace y establecer cada tema como leído – JasonDavis

0

Se podía registrar la última vez que se seleccionan ese tema y luego ver si una publicación tiene una marca de tiempo posterior y luego su último "clic" en la cadena.

0

Puede crear una tabla especial en su base de datos con columnas como USER_ID y THREAD_ID y con las restricciones apropiadas para sus tablas USER y THREAD y una clave principal que contiene USER y THREAD IDs.

Ahora cuando alguien abre un hilo, simplemente inserta ese USER-THREAD-PAIR en esa tabla especial.

En sus listados de hilos, ahora puede simplemente unir externamente esa tabla a lo que se adapte a su uso allí. si su nueva tabla contiene NULL en un punto determinado, ese hilo no se ha leído. Esto permitirá a las listas como:

  • sus temas con el marcador "sin leer"
  • todos los temas no leídos
  • Hilos leídos por XY usuario

Si se agrega una columna de fecha de esta tabla, puede hacer cosas aún más interesantes.

Simplemente observe sus llaves e índices para evitar impactos negativos en el rendimiento. Intente leer desde la tabla USER-THREAD solo uniéndolo a sus consultas existentes. Eso funcionará mucho más rápido que la ejecución de consultas individuales todo el tiempo.

0

Puede obtener una tabla que se inserta cada vez que se lee un hilo, si el usuario que lo está leyendo todavía no lo ha hecho. Luego, cuando alguien agrega el hilo, puede eliminar todas las entradas en la tabla para ese hilo, lo que lo hace no leído para todos los usuarios.

La estructura de la tabla sería algo así como

forum_id thread_id user_id 

Con el opcional has_read_id adicional para su clave primaria, con los otros campos haciendo una clave compuesta.

+0

Sí, estaba pensando en eso pero esperaba que hubiera una mejor solución (menos lectura y escritura) Voy a estudiar cómo vbulletin y phpbb y otros trabajos tal vez revelen una solución aún mejor – JasonDavis

+0

phpBB debe hacer algo diferente. Cuando inicio sesión en elitebastards.com y veo la lista de publicaciones nuevas (nuevas desde mi última visita), después de que mi sesión expira, la lista de publicaciones nuevas está vacía, incluso si no he visitado todos los temas en la lista. . Sin embargo, los hilos están marcados como no leídos si los busco. –

Cuestiones relacionadas