Ich habe das mir so gelöst.
Ich frage jetzt z.B. auf der Startseite vom Forum ab, ob der User eingeloggt ist. Wenn ja dann wird weiter geprüft. wenn nicht alles als gelesen markiert.
Zum prüfen:
Hab in der Usertabelle eine Spalte READED_TOPICS. Darin speichere ich den Unix-Timetsamp, wann der Post (Posr-Id ist fortlaufend) in dem jewiligen Topic gelesen wurde gelesen wurde sowie die Themen ID. Dise Daten habe ich mit serialze (siehe:
http://de.php.net/serialize) bearbeitet und dann in die Tabelle geschrieben.
Nun wird bei jeder Seite, wo die Daten benötigt werden abgerufen und mit unzerialize bearbeitet.
Dann vergleiche ich die Post Datn in der DB mit den Daten im 'gelesenen-Array' ich die Daten folgendermaßen:
So hole ich mir ersteinmal die Daten für die jeweiligen Topics des Forums in dem ich mich befinde
PHP:
$sql = "SELECT t.forum_id, t.topic_id, p.post_time
FROM topics t, posts p
WHERE p.post_id = t.last_post
AND p.topic_id=t.topic_id
AND p.post_time > '".$_SESSION['userdata']['LAST_LOGIN']."'";
if(!$sql = mysql_query($sql))
{
error_die('Schwerer Fehler',__LINE__-3,__FILE__,mysql_errno(),mysql_error(),$sql);
}
while ($row=mysql_fetch_assoc($sql)){
$all_topics[$row['forum_id']][$row['topic_id']] = $row['post_time'];
}
musst natürlich anpasssen, bzw deines so umbauen, das man das Array $all_topics in diesem aufbau erhält.
Geprüft wird so
PHP:
if($f_daten['STATUS'] == "closed")
{
$f_daten['STATUS'] = $f_daten['STATUS'];
}
else
{
$forum_id=$f_daten['ID'];
$unread_topics = false;
if (isset($_SESSION['userdata']['logged_in']))
{
if ( !empty($all_topics[$forum_id]) )
{
$forum_last_post_time = 0;
while( list($check_topic_id, $check_post_time) = @each($all_topics[$forum_id]) )
{
if ( empty($readed_topics[$check_topic_id]) )
{
$unread_topics = true;
$forum_last_post_time = max($check_post_time, $forum_last_post_time);
}
else
{
if ( $readed_topics[$check_topic_id] < $check_post_time )
{
$unread_topics = true;
$forum_last_post_time = max($check_post_time, $forum_last_post_time);
}
}
}
}
}
if($unread_topics)
{
$f_daten['STATUS'] = "new";
}
else
{
$f_daten['STATUS'] = "no_new";
}
}
Gibt vielleiht besseres, wirkt aber. Musst es deinem Code allerdings anpassen.
Die Variable $readed_topics das Array, in dem die Daten vom User drin sind, also ob das Forum schongelesen wurde und wann.
Ich hoffe das hilft dir. Das ganze ließe sich auch auf Cookies aufbauen.
mb fanste