• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[Fortgeschrittene]read-Funktion

Status
Für weitere Antworten geschlossen.

Fredmonster

Neues Mitglied
Meine Frage ist etwas kompliziert.. aber vielleciht hat ja jemand ne Ahnung, wie man das realisieren könnte.. Also ich schreibe ein Forum, und dafür brauche ih eine read-Funktion, die die gelesenen Beiträge als gelesen bzw. ungelesen markiert..
Meine erste Idee war das ungefähr so zu machen
PHP:
if //auf Thread-Link geklickt
$read=true;
//in db mit tread-id schreiben
else
$read=false;
//auch einschreiben
so.. da das ganze aber ein großes db-Abgefrage wird und der einzelne User ja unterschiedliche gelesen-Beiträge hat ist das nicht die Lösung.. nun an euch: bitte helft mir, wenn ihr ne Ahnung habt! Danke und Gruß, Fredmonster!
 
Werbung:
Möglichkeit 1:
Wenn dir der verwendete speicher egal ist und du die ungelesenen Beiträge auch nach beenden des Browsers merken möchtest musst du es folgendermasen machen:
Du brauchst eine extra tabelle in der du speicherst:
> Wer hat den beitrag noch nicht gelesen
> Welchen beitrag hat er noch nicht gelesen
> Wann wurde diese eintrag erstellt
Wenn jemand sich einloggt wird als allererstes geprüft welche einträge seit seinem letzten login neu hinzugekommen sind. Für jeden beitrag erstellst du einen eintrag in deiner merktabelle.
Wenn der user nun einen beitrag anschaut wird geprüft ob dieser in der tabelle steht und auch zu diesem user gehört. Wenn ja wird der eintrag gelöscht und dann fortgefahren wenn nicht wird einfach fortgefahren.
Schließst der user nun den browser bleiben die noch nicht gelesenen beiträge erhalten.
Du solltest zur entmüllung dieser funktion bei jedem login alle einträge löschen die älter als zwei wochen sind.

Möglichkeit 2:
Wenn du speicher in der DB sparen willst und die einträge nach beendigung des browsers nicht mehr vorhanden sein müssen:
Trage alle noch nicht gelesenen beiträge in die aktuelle session des users ein. Sind sie älter als zwei wochen nicht eintragen (sonst müllst du den server zu)!
Ansonsten gleiches prozedere wie bei der DB nur das du auf die session zugreifst.

Das sind wohl die gebräuchlichsten varianten.

Wenn du nach Quellcode fragst schließe ich das Theme. Eine detailiertere beschreibung findest du wohl kaum...
 
nach Code werde ich garantiert nicht fragen, dazu bin ich glaube ich im Stande!
Also, wenn ich das Problem mit db löse, ist es natürlich komfortabler... aber ich will so viel Abgefrage wie möglich vermeiden.. also nun zu den Sessions..
Mir ist nach deinem Post die Idee gekommen, dass Problem zu lösen, indem man nur die gelesenen Beiträge in die db speichert.. Mit Sessions macht das ganze wenig Sinn, da ich ja beim ächsten öffnen des Browsers falsche Beiträge als gelesen habe.. also mein Konzept sieht jetzt so aus:
Code:
- alle Beiträge, die nach dem letzten Login eingefügt worden sind, als ungelesen... kann mir da jemand nen Tipp zum Vergleich geben? mit timestamp?
-den Rest in eine db mit user-id und Thread-id
-sobald der Thread gelesen wurde, aus db löschen oder nach 2 Wochen löschen..
Ist das so die Beste Lösung oder gehts auch mit weniger db-Abfragen?
 
Werbung:
ich glaub die eleganteste Lösung ist mit cookies, damit sparst du Speicherplatz und sie die gelesenen Beiträge sind auch bei Browserneustart noch vorhanden (wenn cookies eingeschaltet sind)
 
genau das ist das Problem.. sicherlich kann ich das mit Cookies lösen, bringt mir nur nicht viel, da ich immer eine alternative brauche, für diejenigen, die Cookies, Js etc. ausgeschaltet haben..
 
Werbung:
Wieso ne alternative? Wenn jemand Cookies ausgeschaltet hat, kann er den Service halt net nutzen. Wenn dus doch machen willst, kannst du ja auch abfragen, ob cookies an sind und entsprechend dann in eine Datenbank eintragen.
 
- alle Beiträge, die nach dem letzten Login eingefügt worden sind, als ungelesen... kann mir da jemand nen Tipp zum Vergleich geben? mit timestamp?
-den Rest in eine db mit user-id und Thread-id
-sobald der Thread gelesen wurde, aus db löschen oder nach 2 Wochen löschen..

Ist das nicht genau das was ich sagte?

Zur Session Lösung: Das war bei ist bei phpBB2 und vBulletin auch so das die ungelesen beiträge beim schließen des browsers erhalten bleiben außer man schaltet die db variante an.

Cookies wären da zu unzuverlässig da muss ich dir recht geben. Ich würde beide varianten implementieren. Du kannst dann ja über die konfiguration auswählen welche methode angewandt wird. Aber ich bezweifele das es eine effizientere oder kürzere methode als die beiden oben beschriebenen gibt.

EDIT: Es gibt auf jeden fall keine zuverlässigere.
 
das war dein Beitrag zusammengefügt.. stimmt schon.. würde nur davor ne timestamp-Lösung nehmen.. dann hat man einen Großteil der ungelesenen schon herausgefiltert! Naja, zu den Cookies: Würde da keine Konfiguration nehmen sondern einen Cookie-Test.. aber das ist hier ja nich das Thema.. kann ich das mit dem Timestamp irgendwie machen? Also, dass man mit < / > vergleichen kann? Afu deutsch: ich will mit nem timestamp alle Beiträge, die seit dem letzten Login-verfasst worden sind herausfiltern.. nun will ich nur kruz wissen, ob ich da nen timestamp brauche oder den wie ich das machen soll.. das heißt ich übergebe beim logout einen timestamp und wie überprüfe ich nun, ob der Beitrag nach dem timesatmp verfasst wurde?
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben