hi,
ich bin gerade dabei ein forum zu coden und frage mich nach der besten möglichkeit ungelesene posts/foren anzuzeigen.
ist es z.b. gut, wenn man einfach alle neuen posts die seid dem letzten login gemacht wurden anzeigt und dann die einzelnen gelesenen in nem cookie oder sessionvar abspeichert?
bin für jede idee dankbar.
hi,
speichere in der Datenbank, jedesmal die Zeit wann der User das Forum betritt / einloggt und lasse dann alle neuen Beiträge seit dem letzten Besuch anzeigen 🙂.
:::
ja gut, aber was ist wenn er z.b. einen von fünf neuen beiträgen ansieht? wie soll ich kennzeichnen welche er schon gelesen hat? es sollen ja dann nur mehr 4 ungelesene beiträge angezeigt werden.
gelesene extra in cookies, session oder db speichern?
mh, nein das geht mit dieser Methode natürlich nicht. jedoch wozu möchtest du einen Status für jeden einzelnen Beitrag haben? Wenn ich in einem Forum tätig bin interesseirt mich zb. das Thema Linux überhaupt nicht und sehe mir auch keinen Beitrag dazu an, soll es dann so sein, das alle Beiträg als ungelesen markiert werden? Selbst in diesem Forum gibt es nur einen Link der die Themen der letzen 24h anzeigt !?
Also ich würde es so machen wie oben beschrieben! Der Rest ist zu aufwendig oder speicherintensiv !!
:::
also das ist bei vielen foren so. beispiel:
ich logge mich wo ein, ich gehe in das entsprechende board und sehe vor jedem neuen topic ein anderes ('ungelesen') icon. klicke ich ein solches topic an, lese mir es durch und gehe wieder zurück, dann hat dies ein normales icon und die anderen neuen topics haben noch immer ein 'ungelesen' icon davor.
also ich habe das bei fasst jedem forum so gesehen.
klar, die spezifischen "ungelesen-flags" sollten schon an threads und nicht an foren gebunden sein.
erstelle ein column mit genügend grossem datentyp in deiner user-tabelle, in der du die thread-ids einträgst, die seit dem letzten besuch des users hinzugekommen sind...
...ausserdem muss natürlich auch aktualisiert werden, wenn ein vorhandener thread neue posts erhalten hat.
wenn der user sich wieder einlogged, ein forum betritt und dort einen thread auswählt, wird dessen id wieder aus der entsprechenden zeile der user-tabelle gelöscht.
so bleiben die anderen ungelesenen oder geupdateten threads ein und desselben forums in den personalisierten user-sicht erhalten.
grtz
chief
gute idee, aber ist dann nicht die datenbank-belastung zu hoch, wenn es ein viel besuchtes forum ist?
ne - ich denke nicht...
die namhaften, freien php-foren machen das eigendlich alle so oder ähnlich.
grtz
chief
also mein vorschlag ist, du machst eine tabelle in der datenbank mit 3 spalten:
thread-id
user-id
letzte-lesezeit
und beim aufrufen einer threadliste vergleichst du nun jedesmal, ob der thread einen post enthält, der neuer als das letzte lesen des users ist, wenn ja, dann hat der thread ungelesene posts. existiert die zeile des letzten lesens für den user nicht, ist der thread ganz neu.
die datenbankbelastung bleibt gering, vorausgesetzt du bist in der lage effizient zu joinen. immerwieder was in schleifen aus der db auszulesen ist tödlich.
danke erstmals für die tipps 👍
hm... jo also mir gefaellt das von fabse 🙂
@savage mich wuerde mal das datenbank modell intressieren 🙂 und wie du es letztendlich funktionierend umgesetzt hast/wirst
gruss
ich habe es jetzt so gelöst:
ich erstelle ein dataset, welches alle neuen post beinhaltet. dieses dataset befindet sich in einer session-variable. wird ein neuer beitrag geschrieben, so wird das dem dataset hinzugefügt. wird ein thema gelesen, dann wird es einfach aus dem ds entfernt. - ich denk mal das ist ziemlich performant und funktionieren tuts wunderbar.
hier kannst du dir das ganze mal anschauen falls es dich interessiert.