elite Mitglied
Angemeldet: 20.07.2004 Beiträge: 1005
Interessen: Coding, DLRG, Radsport
|
Verfasst am: 05.04.2006, 13:35 Titel:
[PHP] Forum: Neue Beiträge anzeigen |
|
|
|
|
Guten Tag,
ich bastele derzeit wieder ein bisschen an meinem Forum rum und würde nun gerne die Funktion einbauen, dass neue Beiträge in Foren auch angezeigt werden, z.B. durch andere Icons vor den Threads ( wie es halt in diesem Forum auch ist ).
Allerdings scheitere ich schon am theoretischen Teil, sprich ich weiß nicht wie ich sowas umsetzen soll.
Hat vielleicht hier jemand schonmal ähnliches programmiert und könnte mir einige Denkanstöße geben wie so etwas gemacht wird bzw. einige Tipps geben?
Ich hab mir gedacht man könnte den letzten Aufenthaltszeitpunkt des Users speichern und dann mit dem Timestamp der Topics vergleichen, nur müsste dieser Zeitpunkt ja mit jedem Seitenaufruf aktualisiert werden und dann stimmt das ganze ja nicht, da dann - vermutlich - alle Topics einen kleineren Timestamp haben als der "Latlogin" des Users. Außerdem is das Problem wie macht man dass, das wenn man die neuen Topics angezeigt bekommt und nur einen anschaut, dasss die anderen immer noch auf "Ungelesen" stehen?
Fragen über Fragen - vielleicht hat sich ja jemand schon mal mit der Materie befasst und kann ein paar Tipps geben -> ich wäre sehr dankbar.
Mfg
elite |
|
rey Mitglied
Angemeldet: 24.07.2004 Beiträge: 810 Wohnort: Bad Homburg Interessen: synth ;)
|
Verfasst am: 05.04.2006, 15:39 Titel:
|
|
|
|
|
Es gibt sicher einige mehr oder weniger gute Lösungen für dein Problem. Um überhaupt erstmal ein paar Wege kennenzulernen, würde ich an deiner Stelle mal das phpbb oder das WoltLab Burning Board unter die Lupe nehmen. Dann siehst du schonmal, welche Techniken dahinter stecken und kannst dich dann nochmal alleine mit der Materie beschäftigen. |
|
mo` Mitglied
Angemeldet: 08.12.2004 Beiträge: 74
|
Verfasst am: 05.04.2006, 16:23 Titel:
|
|
|
|
|
am besten ist du speicherst in der datenbank die letzte aktivität des benutzers ab
wenn nach der letzten aktivität ein neuer beitrag geschrieben wurde, dann legste du ein einer extra tabelle zB. "noch_nicht_gelesen" mit user_id & thread_id ab ...
dieser eintrag muss dann gelöscht werden sobald der benutzer den neuen beitrag gelesen bzw das thema aufgerufen hat ... du könntest noch eine "Alles als gelesen markieren" funktion einbinden, dann werden einfach alle einträge in der "noch_nicht_gelesen"-tabelle gelöscht bei der die user_id die des benutzers entspricht ...
hoffe ich konnte dir damit helfen ... wenn du noch hilfe brauchen solltest oder etwas nicht ganz verstanden hast, dann kannst du mich einfach mal über icq zu texten (bin ab und an online) ; ) |
|
Skeet Newcomer
Angemeldet: 15.02.2005 Beiträge: 20 Wohnort: Bremen
|
Verfasst am: 05.04.2006, 16:38 Titel:
|
|
|
|
|
bei mir ist das so:
es gibt ein tabelle (z.b. "forum_read"). in die wird immer die user_id und die thread_id eingetragen wenn jemand ein thread list und noch nicht drin steht, ihn also noch nicht gelsen hat. wenn ein neuer post hinzukommt werden alle einträge aus der tabelle gelöscht, die die thread_id des posts haben. so bekommen dann wieder alle user den thread als ungelesen angezeigt, weil es keinen eintrag mehr in der tabelle mit der thread_id und user_id gibt. |
|
unex`9dots Administrator
Angemeldet: 02.08.2003 Beiträge: 1106 Wohnort: Karlsruhe Interessen: Coding, Segeln, Schwimmen, PC
|
Verfasst am: 05.04.2006, 21:40 Titel:
|
|
|
|
|
wie rey schon sagt kann man wohl lange diskutieren welche Möglichkeit am idealsten ist. Ich habe bei unserem idot Forum die Sache in etwas so gelöst wie Skeet es geschrieben hat.
Der Nachteil ist dabei eben das man bei vielen Usern relativ gewaltige Abfragen bekommt, aber mit nem halbwegs vernünftigen regex sollte es eigentlich gut funktionieren.
bei der Lösung wie mo sie beschrieben hat befürchte ich das es Probleme mit der Performance geben könnte, da die entsprechende Tabelle gigantisch viele Einträge in Form von zeilen bekommt und in mySql das durchsuchen vieler Zeilen viel Länger dauert als das durchsuchen lediglich einer spalte in einer Zeile |
|