PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gelesene Themen markieren - wie?



dead_orc
22.11.2004, 14:57
Wie ist es in einem Forum möglich festzustellen, ob ein Benutzer ein Thema bereits gelesen hat? Ich kann ja schlecht für jeden Benutzer und jeden Thread einen MySQL-Eintrag machen! Ich habe echt keinen Plan, pls help! :confused: :( :\ http://www.multimediaxis.de/images/smilies/old/sm_12.gif

Latency
22.11.2004, 15:29
hmhm... gute Frage... möglicher weiße lässt sich über ein a:visited etwas machen, denn über Cookies oder mySQL wird das wirklich zu aufwendig sein :rolleyes:

Nun zur erklärung, du könntest entweder in den User cookies oder in der DB einen Timestamp machen wann der User das letze mal online war. Alle beiträge seitdem sind als neu zu markieren, wenn der User nun aber wieder online kommt und er auf einen Link klickt (sozusagen einen Thread liest) wird dieser Link ja vom Browser aus als visited interpretiert. Also müsstest du nur die CSS anpassen und der Thread ist für den User gelesen.

Jedoch weiß ich nicht ob das auch die Lösung des Forums ist, es wäre lediglich die Art und weiße wie ich es zu lösen versuchen würde.

edit:
mir fällt gerade ein Nachteil bei meiner Methode ein, wenn jemand etwas in den Thread postet so bleibt er weiterhin gelesen, da sich diese "mark-as-read" sich nur auf die URL bezieht und diese bleibt ja gleich selbst wenn User in den Thread posten.

-CC-
22.11.2004, 16:24
Natürlich kannst du für jeden User die gelesenen Beiträge in die DB scheriben. So arbeiten viele Forensystem, u.A. das phpBB oder auch dieses vB (optional).

Damit der Datenbestand nicht zu groß wird, nehmen wir mal folgendes an:
Alle Beiträge, die älter als einen Monat sind, gelten automatisch als gelesen. Wenn ein Benutzer nun einen neueren Beitrag (der also innerhalb des letzten Monats geschrieben wurde) ließt, speicherst du User-ID, Topic-ID und Timestamp. So kannst du auch das Datum des letzten Posts vergleichen - wenn das neuer ist als der Timestamp in der Tabelle der gelesenen Beiträge, wird der Thread als 'neu' markiert. Wenn das Datum des letzten Posts älter ist, als der Timestamp in der Read-Table, ist das Thema gelesen.


PS: Ich bin mir bewusst, dass der Text oben ziemlich kompliziert und schwer zu verstehen ist :D Wenn du das also nicht verstehst, frag ruhig. ;)

Grüße,
CC

dead_orc
22.11.2004, 16:30
Ich finde nicht, dass der Text schwer zu verstehen ist! Einen solchen Timestamp, wann der User das letzte Ma online war habe ich schon, also sind alle Themen vor diesem Datum gelesen. Ich kann mir zwar nur schwerlich vorstellen, dass z.B. das vB tatsächlich so arbeitet, aber ich werde es versuchen - bin aber im Moment zu faul :p

-CC-
22.11.2004, 17:06
Wann er das letzte Mal online war ist nicht relevant.

Sonst bleiben die Themen während einer Onlinesession ja ungelesen...
(User A kommt online. In Thema X sind neue Beiträge. User ließt sie. Da du aber nur den Timestamp des letzten Logins hast, werden die Beiträge weiterhin als ungelesen angezeigt).

Du musst also beim Aufrufen eines Threads den Timestamp in die DB schreiben bzw. einen vorhandenen Wert aktualisieren.


Ob die Option zum Speichern der Read- / Unread-Informationen in diesem Forum eingeschaltet ist, kann ich dir nicht sagen. Ich denke mal nein, bei dieser Userzahl...
Aber ich weiß, dass so ziemlich alle aktuellen Forensystem dies anbieten. Entweder per default oder aktivierbar / deaktivierbar im ACP.


Grüße,
Chris

Latency
22.11.2004, 17:37
Ob die Option zum Speichern der Read- / Unread-Informationen in diesem Forum eingeschaltet ist, kann ich dir nicht sagen. Ich denke mal nein, bei dieser Userzahl...
Aber ich weiß, dass so ziemlich alle aktuellen Forensystem dies anbieten. Entweder per default oder aktivierbar / deaktivierbar im ACP.
Wie würde es aber sonst gelöst werden? Per Cookies?

-CC-
22.11.2004, 17:46
Wie würde es aber sonst gelöst werden? Per Cookies?
Jap. In diesem Cookie steht dann halt auch, welcher Thread wann zuletzt gelesen wurde (User-ID entfällt ja, außer da hat jemand einen Doppelaccount :D )