Mensajes no leídos en un foro
|
| #0 |
 |
cmacias |
Usuario |
14 ago 05 (13:47) |
|
|
Acabo de terminar mi propio foro en php+MySQL, y le estoy añadiendo mejoras tales como un panel de control para los usuarios, estadísticas de acceso, etc, etc.
Me gustaría que cuando un usuario registrado acceda al foro, se le mostrara de alguna forma los mensajes "no leídos". Necesitaba si es posible una orientación de como debería hacerlo.
Pensé en almacenar en un campo de la tabla usuarios, la última fecha de acceso, de forma que al volver a ingresar en el foro, se mostraran estos, pero si dejara alguno sin leer, al siguiente ingreso no aparecería.
En fin, cualquier idea será bienvenida, Gracias ;)
|
Crea una tabla nueva en la base de datos
|
| #1 |
 |
Electros |
Usuario |
17 ago 05 (05:42) |
|
|
Está bien lo de actualizar la fecha de acceso, sólo crea una una nueva tabla llamada por ejemplo "recordatorios" con los siguientes campos:
Tabla "recordatorios":
ID - Número identificador único, sin signo y autoincrementable
Fecha - La fecha de los recordatorios
Usuario - Ya sea el ID o el nick del usuario para identificar que mensajes son nuevos para él y cuáles ya ha leído
Foro - El ID del foro donde se encuentra el mensaje
Mensaje - El ID del mensaje en sí.
Bien, debes crear un archivo que inserte en "recordatorios" los recordatorios de mensajes nuevos para el usuario que acaba de ingresar, y eliminar los restantes en caso de que haya pasado el tiempo límite.
Lo voy a explicar suponiendo que tienes un foro que a su vez tiene distintos subforos dentro de él, tal como el de esta web.
Esto es lo que tienes que hacer, lo voy a explicar en forma de código, algunas partes del código sólo traen la descripción:
<?
# * Eliminar recordatorios que sobrepasen el tiempo límite
$tiempo_limite = 86400 ; # Tiempo en segundos (24 horas = 86400 segundos) ;
$fecha_actual = time() ;
$tiempo_limite = $fecha_actual - $tiempo_limite ;
mysql_query("delete from recordatorios where fecha<'$tiempo_limite'") ;
# * Obtener la fecha de último acceso
...
$ultimo_acceso = ... ;
# * Obtener el identificador de todos los foros existentes
$consulta = mysql_query("select id from foros order by id asc") ;
while($datos = mysql_fetch_assoc($consulta)) {
# * Hacer una subconsulta para obtener el identificador de los mensajes correspondientes a cada foro y que tengan una fecha mayor a la de ultimo acceso del usuario
$consulta_2 = mysql_query("select id from mensajes where foro='$datos[id]' and fecha>'$ultimo_acceso' order by fecha desc limit 10") ; # Limite de 10 que será el máximo de mensajes recordados
while($datos_2 = mysql_fetch_assoc($consulta_2)) {
mysql_query("insert into recordatorios values ('','$fecha_actual','$id_usuario','$datos[id]','$datos_2[id]') ;
}
mysql_free_result($consulta_2) ;
}
mysql_free_result($consulta) ;
# * Una vez creados los recordatorios puedes actualizar la fecha de ultimo acceso del usuario
mysql_query("update usuarios set ultimo_acceso='$fecha_actual' where id='$id_usuario'") ;
?>
Este archivo lo insertas en todas las páginas del foro, lo puedes hacer a través de include() o require().
Ahora falta marcar los mensajes nuevos, para esto haz una simple consulta hacia la tabla "recordatorios" buscando los recordatorios que pertenezcan al usuario, al foro y al mensaje.
Espero que esto te de una idea de lo que tienes que hacer, todavía falta poner que además de recordarte los mensajes nuevos, también te recuerde todos aquéllos mensajes que han recibido nuevas respuestas.
|
Re: Mensajes no leídos en un foro
|
| #2 |
 |
cmacias |
Usuario |
17 ago 05 (07:13) |
|
|
Gracias ! Trabajaré sobre ello
|
Re: Mensajes no leídos en un foro
|
| #3 |
 |
Bhagavad |
Usuario |
23 mar 07 (09:34) |
|
|
Yo esto no lo veo del todo claro tios, se q es un tema antiguo, pero esq no se yo eso de las fechas si va a resultar...porq si no los lee, pues a la siguiente vez q ingrese no se les va a marcar los mensajes no leidos...y ya lo de los mensajes ni hablamos...alguien tiene otra solucion?alguien sabe como carajo lo hacen en los foros ya hechos?xD
Saludos!!
|
Re: Mensajes no leídos en un foro
|
| #4 |
 |
norman785 |
Usuario |
23 mar 07 (14:04) |
|
|
esquema de la tabla
ID---| TITULO--| DESTINATARIO--| REMITENTE--| MENSAJE--| FECHA--| ESTADO
------|------------|---------------------|----------------|--------------|-----------|--------------
1----| bla....... | 1------------------| 5---------------| texto......|1002.....| 0
obs.: en la ultima linea de mi tabla omitan los "---" los puse para que no se desface
ID es el identifiacdor del mensaje
DESTINATARIO el ID del usuario que recibe el mensaje
REMITENTE el ID del usaurio que envio el mensaje
MENSAJE cuerpo del mensaje
FECHA esta en.. integer... se toma con la funcion time() creo que se le llama timestamp
ESTADO 0 = no leido, 1 = leido
espero que esto sirva, suerte!!
|
Re: Mensajes no leídos en un foro
|
| #5 |
 |
Bhagavad |
Usuario |
23 mar 07 (14:18) |
|
|
La verdad esq no =) porq no es un servicio de mensajeria, es un foro donde los post no van dirigido a nadie en concreto, q se contestan los mensajes pero a nadie en concreto...jum...
He pensado en crear una tabla "recordatorios" en la q cada fila contenga "idUsuario", "idPost", "fechaLeido" por ejemplo
y almacenar todos los post leidos por todos los usuarios y en la fecha en la q fue leido, entonces para comprobar cuales se han leido o no, tendremos una fecha en cada hilo donde se guarde la fecha del ultimo post escrito en el (por ejemplo, porq tb podriamos utilizar la fecha del ultimo post) y se comprobará con las fechas de la tabla "recordatorios"...
Q te parece tio?no se si me has entendio xD
Gracias, por cierto ;)
|
Re: Mensajes no leídos en un foro
|
| #6 |
 |
elgame |
Usuario |
29 may 07 (20:50) |
|
|
si quieres que a cada usuario le aparescan los mensajes que no a leido no seria correcto por que en un foro los mensajes no estan dirigidos a una persona en particular, pero si se puede hacer. tu idea esta bien solo tienes que agregar una nueba tabla en donde tengas una guia de los mensajes que no a leido el usuario.
otra mas facil es mostrar a los usuarios los mensajes que no se an leido de un foro en particular. pero como veas.
elgame - programacion y mas
|
Responder mensaje
Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano,
:: Registrar ::