Thread als gelesen/ungelesen markieren

Thread als gelesen/ungelesen markieren |

Hallo,

ich schreibe gerade aus rein privatem Interesse eine Forensoftware.
Jetzt stehe ich vor der Frage, wie ich Threads als gelesen/ungelesen markieren kann. Habe mir dazu bereits einige Gedanken gemacht und bin da auf zwei mögliche Wege gekommen, die aber teilweise große Nachteile haben:

  1. Für jeden Thread extra einen Cookie setzen mit dem Wert „gelesen“ und dieses dann auf 1 oder 0 setzen
    → Nachteil: Die große Masse an Cookies; Außerdem kann in seltenen Fällen ein User Cookies ablehnen

  2. Für jeden User die Zeit des letzten Logins speichern und dann mit der Erstellzeit des jewieligen Threads vergleichen. Ist der letzte Login erst nach Erstellung des Threads geschehen, so wird der Thread als ungelesen markiert.
    → Nachteil: Es ist üblich, dass ein User einen Thread nicht liest und sich dann ausloggt. Beim nächsten Login wird dieser Thread als bereits gelesen markiert, obwohl er noch nicht vom User gelesen wurde.

Könnt ihr mir einen kleinen Denkanstoß geben? :confused:

MfG Icy

Edit: Die Überschrift muss „Thread als gelesen/ungelesen markieren“ heißen ^^

Kannst du beim nächsten Mal ja auch selbst ändern :wink:

Kann ich das? Wenn ich auf „Ändern“ klicke, wird mir nur der eigentliche Beitrag zum Ändern angezeigt :slight_smile:

MfG Icy

schau mal im Ankündigungsforum, da stehen zwei Wege.
(Und sag jetzt nicht, es geht so nicht, es wurde erfolgreich von Usern getestet, die keine Mod-Rechte haben.

Geht, hab den Thread dazu noch nie gelesen :stuck_out_tongue:

MfG Icy

Du hast ja selber gemerkt, dass das nicht geht, Cookies sind eigentlich auch nur was temporäres. Der User kann sie ablehnen, er kann sie löschen, sie verfallen vielleicht irgendwann. Das ist blöd. Man will das ja dauerhaft markiert haben.

Für jeden User die Zeit des letzten Logins speichern

Die Nachteile, die Du hier nennst, sind natürlich auch so gravierend, dass mich das als Nutzer nerven würde.

Die einfachste Lösung ist, was auch der Nutzbarkeit dienlich ist und sowieso dringend empfohlen wird: Besuchte Links andersfarbig markieren. Dann nimmt die History des Browsers dieses Problem für Dich ab.
Hat natürlich auch einen ähnlichen Nahcteil wie die Cookies, der Nutzer kann seine History löschen, und außerdem ist das dann - wie bei den Cookies auch - nur auf den einen Browser beschränkt, nicht auf den Nutzer. Sprich, ist er woanders, hat er alle Beiträge noch nicht gelesen.

Nein, Du brauchst eine Lösung, die dem Benutzer zugeordnet wird, d.h. alles, was nur im Browser gespeichert wird, ist nicht akzeptabel. Du musst es also serverseitig speichern.
Wie wärs, wenn Du jedem Beitrag eine ID verpasst (hast Du doch wahrscheinlich ohnehin) und in einer Tabelle für Nutzerdaten speicherst, welche Beiträge der Bediener schon gelesen hat.
Entweder speicherst Du die ID in der Form „1,2,3,4,7,8,12,13,15“ oder Du machst Dir noch Gedanken, diesen String etwas zu verkürzen, dass statt obigem String dann „1-4,7-8,12-13,15“ eingetragen wird.

So geht es auf jeden Fall (so hab ich es auch schon gemacht), nur an der Art der Speicherung lässt sich vielleicht optimieren.

Genug Denkanstoß? :slight_smile:
-Efchen

Das ist auch eigentlich die beste Form, sowas zu regeln, aber eine Frage hab ich da. Beispiel: Ein Forum mit 20.000 Usern, 25.000 Threads und doppelt so vielen Posts.

Nun bist du rund 1-2 Jahre aktiv in diesem Forum und hast also schon viiiiele Threads angeschaut. Wie mussn dann dieses ein Feld aussehen? :smiley:

Ist unter anderem auch eine Frage, die ich mir schon länger stelle und aus Foren wie dem Wbb nicht nicht entnehmen konnte, wie man dies am sinnvollsten programmiert.

Wie schon gesagt, ich könnte mir ein von-bis vorstellen.
Wenn jemand 20000 Artikel gelesen hat, ist das der selbe Speicherbedarf, wie wenn jemand 3 Artikel gelesen hat (naja, fast): „1-3“ oder „1-20000“.

Doof ist es natürlich, wenn jemand nur die ungeraden Beiträge liest.

Man könnte aber auch Beiträge ab einem bestimmten Alter archivieren und aus dieser Kennzeichnung rausnehmen oder automatisch als „gelesen“ markieren.

Ich habe diese Art der Kennzeichnung aus dem .newsrc des nn (Usenet News) von früher. Da wurde für jede Newsgroup in das rc-File eingetragen, welche Artikel Du schon gelesen hast. Irgendwann sind die Artikel rausgeflogen, waren also auch nicht mehr lesbar, dann waren die IDs ohnehin uninteressant, deswegen die Idee mit dem Archivieren.

Wenn Du von einem User sprichst, der 2 Jahre lang aktiv ist, dann ist anzunehmen, dass er die Beiträge nahezu alle gelesen hat, sein „Gelesen“-String also relativ kurz ist „1-12482,12487-13001,13003-14999“ oder so. Viel länger wird der String von leuten, die nur hin und wieder mal was lesen: „12,442,3543,22422,22424-22426,22567“. Und Leute, die eine bestimmte Zeit nicht mehr aktiv waren, können inaktiv gesetzt und irgendwann gelöscht werden.