Neu-Markierung für Forum

Prophet05

Erfahrenes Mitglied
Ich schreibe an einem eigenen Forum für meine HP. Nun bis jetzt habe ich alles hinbekommen nur bei einer Sache komme ich nicht weiter. Wie schaffe ich es das jeder User beim betreten die Foren angezeigt werden welche neues enthalten. Ich habe mir mal gedanken gemacht aber bin nur zu Systemen gekommen die unendlichviel Speicherplatz fresen.

Weis jemand wie das geht?(Ich suche kein fertiges System, Coden möchte ich selber aber ich brauche einen Gedanken anstoss)

MfG Prophet05
 
Ich würde das irgendwie mit Cookies machen. Sobald jemand ein Forum liest wird ein Cookie gesetzt wo drin steht welches Forum und wieviel Beiträge gerade vorhanden sind.
 
Das wäre ein gute Alternative zur DB, sie hat bloß den Nachteil das man Cookies deaktivieren kann.
Gibt es noch andere Möglichkeiten?
 
willst du das alle die neu sind von den posts markiert weren ?
das is ganz einfach...

du brauchst 3 dinge:
einmal in deiner Datenbank den TIMESTAMP der zeit, wo das letzte mal in dem POST gepostet wurde.
Und du brauchst einen Array.
Dazu noch die Zeit, wann der User sich das letzte mal angemeldet hat.

dann kontrollierst du:
Wähle alle Post-ID's aus, wo der Timestamp der letzten Posterei GRÖßer ist als der Timestamp des letzten Logins, UND wo die Post-ID nicht IM Array ist.

In dem Array speicherst du dann alle ID's, die der user angesehen hat.

Vielleicht hat dir das ja geholfen ;-)
 
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
 
Schau mal hier:
[thread=129856]Forumuser neue topics anzeigen[/thread]
[thread=193945]Wie speichern, dass Datensatz gelesen wurde.[/thread]
[thread=196312]Wie realisiert man "ungelesene" Postings in einem Forum?[/thread]

Gruß hpvw
 
Die links muss ich mir noch anschauen. Aber scheinbar geht es ja nur relativ umständlich.
Gut dann werde ich mir was zusammenbasteln. Danke!

MfG Prophet05
 

Neue Beiträge

Zurück