[request] gelesen/ungelesen (über DB-only) Hack
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
[request] gelesen/ungelesen (über DB-only) Hack
Servus,
wir beabsichtigen auf phpBB2 umzustellen, vermissen jedoch ein Feature, welches unser modifiziertes UBB bietet: eine korrekte gelesen/ungelesen Anzeige.
Die ungelesenen Beiträge werden bei uns serverseitig gespeichert, so dass man sich am Arbeitsplatz ein paar Threads für zu Hause aufheben kann und dort sofort sieht, welche man schon gelesen hat und welche nicht usw. - dürfte klar sein, was gemeint ist.
Was soll der Hack bieten:
- Da die User größtenteils von verschiedenen Rechnern (Arbeit, Freundin, home) aus auf das Forum zugreifen, scheidet eine clientseitige Speicherung der ungelesenen Beiträge per cookie o.ä. aus.
- Damit die DB nicht gesprengt wird, sollten Beiträge, die älter als x Tage sind von einer Aufnahme in die DB ausgeschlossen sein bzw. dort gelöscht werden. (z.B. alles was älter ist als eine Woche wird durch diesen Hack nicht mehr erfasst).
Ich denke, dass dieser Hack für zahlreiche kleinere Boards sehr interessant sein dürfte.
PS: Ist es richtig, dass ich mich hier nicht registrieren kann?
wir beabsichtigen auf phpBB2 umzustellen, vermissen jedoch ein Feature, welches unser modifiziertes UBB bietet: eine korrekte gelesen/ungelesen Anzeige.
Die ungelesenen Beiträge werden bei uns serverseitig gespeichert, so dass man sich am Arbeitsplatz ein paar Threads für zu Hause aufheben kann und dort sofort sieht, welche man schon gelesen hat und welche nicht usw. - dürfte klar sein, was gemeint ist.
Was soll der Hack bieten:
- Da die User größtenteils von verschiedenen Rechnern (Arbeit, Freundin, home) aus auf das Forum zugreifen, scheidet eine clientseitige Speicherung der ungelesenen Beiträge per cookie o.ä. aus.
- Damit die DB nicht gesprengt wird, sollten Beiträge, die älter als x Tage sind von einer Aufnahme in die DB ausgeschlossen sein bzw. dort gelöscht werden. (z.B. alles was älter ist als eine Woche wird durch diesen Hack nicht mehr erfasst).
Ich denke, dass dieser Hack für zahlreiche kleinere Boards sehr interessant sein dürfte.
PS: Ist es richtig, dass ich mich hier nicht registrieren kann?
Hier kannst Du dich registrieren.
Zuletzt geändert von Sekey am 29.07.2002 13:39, insgesamt 1-mal geändert.
Was mir grad noch eingefallen ist..
Vielleicht wäre es möglich, die gelesen/ungelesen Anzeige defaultmäßig so zu lassen wie sie ist und nur wenn ein User das im Profil explizit anwählt, eine Verwaltung der ungelesenen Beiträge über die DB durchzuführen.. Dadurch würde die DB ebenfalls kleiner gehalten, weil ja nicht jeder User automatisch dieses Feature nutzen möchte. Allerdings wäre dies Luxus, den wir mit unseren 160 Usern nicht benötigen
Vielleicht wäre es möglich, die gelesen/ungelesen Anzeige defaultmäßig so zu lassen wie sie ist und nur wenn ein User das im Profil explizit anwählt, eine Verwaltung der ungelesenen Beiträge über die DB durchzuführen.. Dadurch würde die DB ebenfalls kleiner gehalten, weil ja nicht jeder User automatisch dieses Feature nutzen möchte. Allerdings wäre dies Luxus, den wir mit unseren 160 Usern nicht benötigen

Ich bin da auch sehr dran interessiert! Mich stört an der aktuellen Lösung auch das oft beiträge sich selber als gelesen markieren weil man länger als 5 Min mal nix getippt hat!
Imho ist der Aufwand auch überschaubar... BISHER werden - so hab ich das verstanden - die Zwischenstände (und zwar für Foren und Toppics einzeln) in einem Cookie gespeichert. Wenn man sich ausloggt oder zu lange inaktiv ist wird beim erneuten Besuch eine neue session generiert und alles vor diesem Zeitpunkt gilt als 'gelesen'...
Auf jeden Fall gibt es Probleme wenn man an mehreren rechner sitzt...
Eine Lösung könnte so aussehen:
In der DB muss stehen:
1. Letzter Zeitpunkt an dem ALLE Nachrichten als 'gelesen' markiert waren (LAR). Alles was neue ist ist könnte ungelesen sein.
2. für jedes Topic mit Nachrichten neuer als LAR in dem gelesen wurde muss die Zeit gespeichert werden wo das letzte mal drauf zugegriffen wurde. (LTR)
Man braucht also eine Funktion die beim Aufruf der index.php, oder viewforum.php prüft ob für jedes topic eine LTR existiert... dann muss die
LAR neu gesetzt werden und alle älteren LTR's werden gelöscht.
In der Viewtopic muss nur dir LTR gesetzt werden wenn der letzte Post entweder neuer als der LAR ist, oder neuer als ein existierender LTR...
Den LAR würde ich einfach als Uhrzeit speichern.... bei den LTR's weis ich nicht ob man nicht durch relative Zeitangaben ein paar Bytes sparen kann...
Diese LAR und LTR könnte man mit der Dunktion erzeugen die zur Zeit in das cookie schreibt... das ist ein string der immer eine Zeit und eine Topic-ID enthält... oder eben eine Forum-ID ...
Ganze Foren als gelesen zu markieren ist aber ein extra-Aufwand und ich weis nicht ob man dadurch speicher in der DB oder zeit spart...
Die Datenbank würde dann natürlich größer...
Entweder man erzeugt für jeden User einen großen String in dem man das speichert. (ist aber bei umfangreichen Boards ein Problem weil da dann evtl. nicht alles reinpasst)
oder besser man macht eine Tabelle im Stil von _topics_watch...
Also alle Infos für alle user in EINE tabelle.... jeder Eintrag nach dem Muster
UserID,TopicID,Time wobei eine TopicID von "0" den LAR-Eintrag darstellt...
Dabei wäre der Vorteil das man nur exakt den Platz belegt den man braucht....
Wenn man mal annimmt das jeder user im Durchschnitt 50 Themen noch nicht gelesen hat wenn er das Board verlässt hat man pro User dann 800 Byte zusätzlichen Platzbedarf in der DB... also bei 150 Usern... 120kb.... Das ist nicht so furchtbar...
Abgesehen davon das ich von meinen usern weis das sie entweder eh ALLES lesen (süchtige halt) oder wenigstens ab und zu auch mal den "markiere alles als gelesen markieren"-Knopf drücken... Das würde jeweils für diesen User die Menge an Daten auf ca. 20 Byte reduzieren.
WER MACHT MIT? Alleine ist mir das vermutlich zu viel Arbeit...
und wech
Imho ist der Aufwand auch überschaubar... BISHER werden - so hab ich das verstanden - die Zwischenstände (und zwar für Foren und Toppics einzeln) in einem Cookie gespeichert. Wenn man sich ausloggt oder zu lange inaktiv ist wird beim erneuten Besuch eine neue session generiert und alles vor diesem Zeitpunkt gilt als 'gelesen'...
Auf jeden Fall gibt es Probleme wenn man an mehreren rechner sitzt...
Eine Lösung könnte so aussehen:
In der DB muss stehen:
1. Letzter Zeitpunkt an dem ALLE Nachrichten als 'gelesen' markiert waren (LAR). Alles was neue ist ist könnte ungelesen sein.
2. für jedes Topic mit Nachrichten neuer als LAR in dem gelesen wurde muss die Zeit gespeichert werden wo das letzte mal drauf zugegriffen wurde. (LTR)
Man braucht also eine Funktion die beim Aufruf der index.php, oder viewforum.php prüft ob für jedes topic eine LTR existiert... dann muss die
LAR neu gesetzt werden und alle älteren LTR's werden gelöscht.
In der Viewtopic muss nur dir LTR gesetzt werden wenn der letzte Post entweder neuer als der LAR ist, oder neuer als ein existierender LTR...
Den LAR würde ich einfach als Uhrzeit speichern.... bei den LTR's weis ich nicht ob man nicht durch relative Zeitangaben ein paar Bytes sparen kann...
Diese LAR und LTR könnte man mit der Dunktion erzeugen die zur Zeit in das cookie schreibt... das ist ein string der immer eine Zeit und eine Topic-ID enthält... oder eben eine Forum-ID ...
Ganze Foren als gelesen zu markieren ist aber ein extra-Aufwand und ich weis nicht ob man dadurch speicher in der DB oder zeit spart...
Die Datenbank würde dann natürlich größer...
Entweder man erzeugt für jeden User einen großen String in dem man das speichert. (ist aber bei umfangreichen Boards ein Problem weil da dann evtl. nicht alles reinpasst)
oder besser man macht eine Tabelle im Stil von _topics_watch...
Also alle Infos für alle user in EINE tabelle.... jeder Eintrag nach dem Muster
UserID,TopicID,Time wobei eine TopicID von "0" den LAR-Eintrag darstellt...
Dabei wäre der Vorteil das man nur exakt den Platz belegt den man braucht....
Wenn man mal annimmt das jeder user im Durchschnitt 50 Themen noch nicht gelesen hat wenn er das Board verlässt hat man pro User dann 800 Byte zusätzlichen Platzbedarf in der DB... also bei 150 Usern... 120kb.... Das ist nicht so furchtbar...
Abgesehen davon das ich von meinen usern weis das sie entweder eh ALLES lesen (süchtige halt) oder wenigstens ab und zu auch mal den "markiere alles als gelesen markieren"-Knopf drücken... Das würde jeweils für diesen User die Menge an Daten auf ca. 20 Byte reduzieren.
WER MACHT MIT? Alleine ist mir das vermutlich zu viel Arbeit...
und wech
Jo, klar... ich hab normal eh' immer keine Langeweile und soooo brennend ist es ja nicht
Ich werde mal sehen ob ich mir ein paar Gedanken mache....
Den Teil der die LAR und LTR einträgt ist ja nicht soooo schwer zu machen... damit werde ich mal anfangen...
Nur eine Frage noch:
Wenn du auf Cookies verzichtest.... wie willst du da dann einen Autologin hinbekommen? Die einzige Idee die ich dabei hätte wäre es das als POSTVARS mit im ersten Aufruf mit übergeben... so wie
index.php?user=bitboy&pass=010029838726434
Klar das man das passwort md5- verschlüsselt schickt, aber wenn das jemand zu sehen bekommt ist es auch wieder nix mit Sicherheit weil man den Link so ja von jedem Browser ausführen könnte...
und wech


Nur eine Frage noch:
Wenn du auf Cookies verzichtest.... wie willst du da dann einen Autologin hinbekommen? Die einzige Idee die ich dabei hätte wäre es das als POSTVARS mit im ersten Aufruf mit übergeben... so wie
index.php?user=bitboy&pass=010029838726434
Klar das man das passwort md5- verschlüsselt schickt, aber wenn das jemand zu sehen bekommt ist es auch wieder nix mit Sicherheit weil man den Link so ja von jedem Browser ausführen könnte...
und wech
Zuletzt geändert von Gast am 29.07.2002 13:34, insgesamt 1-mal geändert.
Hibitboy0 hat geschrieben:Nur eine Frage noch:
Wenn du auf Cookies verzichtest.... wie willst du da dann einen Autologin hinbekommen? Die einzige Idee die ich dabei hätte wäre es das als POSTVARS mit im ersten Aufruf mit übergeben... so wie
index.php?user=bitboy&pass=010029838726434
Klar das man das passwort md5- verschlüsselt schickt, aber wenn das jemand zu sehen bekommt ist es auch wieder nix mit Sicherheit weil man den Link so ja von jedem Browser ausführen könnte...
und wech
Na ja, aufs auto login werde ich dann wohl verzichten. Da das ganze dann bei mir über HTTP AUTH geht, ist das kein probleme weil einige Browser da ja schon selbst das passende mitbringen.
Mfg jensemann