Seite 1 von 1

Wie funkioniert "gelesen/ungelesen" im phpbb ?

Verfasst: 15.03.2005 13:30
von DrumCode
Hi Leute,
ich denke dieses Forum ist wohl das passendste:

ich bastel grade wieder am einem EIGENEN(!) Forum einer Seite und möchte gerne bei jedem Unterforum des Boards bzw bei jedem Thread eine Grafik darstellen , ob im jeweiligen Forum neue Beitraege vorhanden sind oder nicht.

Nun meine Frage: Wie ist das im phpbb realisiert?

Meine Idee bisher:
Eine Tabelle in der DB erstellen.
Bei jedem neuen Posting fuer JEDEN user einen Eintrag machen. Sobald der Eintrag betrachtet wird, lösche ich den entsprechenden Datensatz wieder aus der DB.

Das scheint mir aber ungeschickt , weil die Tabelle im laufe der Zeit relativ gross werden würde.
Löschen von "nach X- Tagen nicht gelesen" Datensaetzen ist allerdings auch nicht soo die prickelnde Lösung

Hat jemand von euch eine andere Idee?
Ich hab bei jedem Benutzer ein Datum mitgespeichert wann der letzte Login war.
Allerdings waeren dann nach einem Login alle Postings "gelesen" nur weil das Logindatum neuer ist, obwohl der User die Postings evtl garnicht gelesen hat.

Blöde Sache das.

Danke fuer Denkanstöße


Gruß
DrumCode

Verfasst: 15.03.2005 13:41
von oxpus
Variante 1 (das phpBB Original):
phpBB schickt jedem User durch die Anmeldung ein Cookie, das die letzte Login-Zeit speichert.
Danach prüft das Board, ob jüngere Beiträge vorliegen und markiert diese entsprechend.
Vorteil Sehr schnell
Nachteile
Browser zu = alles gelesen
Cookies gelöscht = alles gelesen
Cookies blockiert = kein Autologin und auch immer alles gelesen.

Variante 2:
Es existieren 2 bekannte Mods, die die Nachteile der Variante 1 beheben, allerdings geringfügig die Performance des Boards reduzieren und die Datenbank vergrösseren. Dazu erhält man einige weitere nützliche Funktionen.
Das wären der UPi2DB Mod und der Keep Unread Mod. Beide durch Suche hier oder auf phpbbhacks.com zu finden.
Diese Mods speichern den Zustand jedes Topics für jeden User in der Datenbank, so daß ein Betrag auch erst dann gelesen ist, wenn man ihn wirklich ansieht. Dabei verwenden beide Mods weit optimierte Datenbank-Routinen.

Ich setze den UPi2DB ein und bin hoch zufrieden damit. Auch und gerade was die Performance anbelangt.

Verfasst: 15.03.2005 14:14
von easygo
DrumCode hat geschrieben:Allerdings waeren dann nach einem Login alle Postings "gelesen" nur weil das Logindatum neuer ist, obwohl der User die Postings evtl garnicht gelesen hat.
:D drum steht da auch: "Neue Beiträge seit dem letzten Besuch" (oder so)
aber das lässt sich bestimmt auch direkter umsetzen...

Nur mal so als Beispiel:
Falls net vorhanden, Tabelle {prefix}topic_view anlegen mit den
Feldern: topic_id, user_id, view_time, view_count

view_time = Last viewed time User (update)
view_count = Topic visits User (update)

sql query -> viewtopic.php (oder vergleichbare Datei)

Zeitwert für topic_last_post_id hast du ja schon. Fehlt also nur
noch ne Abrage, ob und für welche Topics die view_time (falls vorhanden)
aehm... kleiner ist als der Zeitwert für topic_last_post_id

Mit dem Ergebnis: folder_new (z.B.) or not (folder) :wink: easy

Verfasst: 15.03.2005 15:35
von larsneo
...dann skalier 'mal die sich daraus ergebende datenbankbelastung bei z.b. 100.000 beiträgen und 3000 usern hoch - da dürfte selbst die unsägliche search-mimik noch kinderkram gegen sein ;-)