Foren als gelesen markieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Foren als gelesen markieren

    Hi @all,

    ich hab hier auch schon gesucht, bin dadurch aber nicht schlauer geworden.

    Ich habe ein paar Boards in meinem Forum. Wie kann ich es realisieren, dass die Boards mir anzeigen, ob es seit meinem letzten Besuch neue Beiträge gibt?!

    ich komm auf keinen grünen Zweig, da mit der nötige, logische Denkansatz fehlt!

    Da ich die User nicht mit Kecksen überfluten möchte, möchte ich es wenn es geht(!) ohne Cookies machen...

    kann mir hier jemand helfen?

    cya CrazyPip

  • #2
    ne tabelle (visited) mit id, thread-id, forum-id, timestamp und user-id (jenachdem, was du alles hast)

    dann zu jedem beitrag in einem thread ne column mit timestamp, wo der timestamp der Erstellung reinkommt.

    dann, wenn ein thread aufgerufen wird...werte in die visited eintragen...

    später überprüfen, ob es einen höheren timestamp in einem thread gibt, als der visited-timestamp ist.
    tata
    moqui

    [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

    Kommentar


    • #3
      Hi

      Ich glaube, das wirds tun. WErds gleich ausprobieren...

      danke dir
      cya CrazyPip

      Kommentar


      • #4
        ich würd's so machen, zu jedem post einen timestamp machen, den letzten logout auch mit einem timestamp speichern und dann alles was nach deinem logout gekommen ist markieren. wenn du alles als gelesen markieren willst setzt du die logout-zeit auf NOW

        Kommentar


        • #5
          letzere variante würde ich auch bevorzugen. somit würden die DB-tabellen nicht unnötig anwachsen.

          im ersten vorschlag würde dies nämlich der fall sein. und für jeden post bei jedem user was ist die tabs schreiben.... naja. irgendwann potenziert sich das eben.
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            sie alten datensätze, die einen thread betrifft, können ja immer bei einem aufruf gelöscht werden...so wird sie nicht so stark belastet
            tata
            moqui

            [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

            Kommentar


            • #7
              dann sind die einträge aber wieder auf 'ungelesen'. du speicherst dir ja immer ab, wenn du was gelesen hast.

              ich würde das mit der zeit machen. das geht irgendwie besser, sauberer und schöner.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                wie du meinst...
                tata
                moqui

                [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

                Kommentar


                • #9
                  hi sorry das ich mich erst jetzt wieder melde...

                  also...
                  das mit dem timestamp beim logout würde eigentlich schon funktionieren. Das Problem hier ist, dass sich meine User durch ein Cookie identifitzieren, d.h. das der User sich nicht ausloggen/einloggen muss um das Script benützen zu können, solange der Cookie auf dem Rechner noch aktiv ist. Man kann den Cookie manuel löschen durch einen link auf logout.php, aber wenn der Cookie nicht mehr aktiv ist, dann ist der User automatisch ausgeloggt.

                  Könnte man hier im Forum vergleichen: Hier wird ebenfalss ein Cookie gesetzt bis der abgelaufen ist und man loggt sich nicht aus, sondern das geht eben automatisch.

                  Von daher sehe ich ein Problem mit der timestampsache. GIbts andere Alternativen?

                  cya CrazyPip

                  Kommentar


                  • #10
                    ich hatte mir auch schon überlegt einen timestamp zu setzen bei jeder aktion die der User macht (wenn er eingeloggt ist).

                    In den Header halt, so in etwa

                    PHP-Code:
                    <?
                    $now = time();

                    if ($userlog) {
                    mysql_query("UPDATE user set lastaction = $now where username = '$username' ")
                    }

                    ?>
                    das in den header einfügen (der in jede Datei includet wird) und dann einfach daraufhin alle Beiträge als nicht gelesen markieren, die nach dem timestamp entstanden sind...

                    aber ich denke mir, dass das die DB ebenfalls ziemlich belastet...oder?

                    cya CrazyPip

                    Kommentar


                    • #11
                      Ich habe mir für mein Forum auch schon so meine Gedanken für eine Umsetzung eines derartigen Features gemacht. Leider ohne Erfolg. Also das mit dem Denken hat schon funktioniert nur eine Datenbank-Lösung für diese Problem habe ich nicht fnden können

                      Daher werden die ungelesenen Beiträge noch über einen Keks ermittelt.

                      In die Datenbank müsste dann für jeden User und jedes Thema ein Eintrag vorgenommen werden.
                      Bei mir derzeit 387 Mitglieder und 3747 Themen. Nun kann jeder sich ausrechnen wie stark die DB belastet wird undzwar bei jedem Schritt den ein User im Forum tut.

                      In meinem alten YaBB-Forum hatte ich eine interessante Lösung ohne DB realisiert, vielleicht ist dies ein interessanter Ansatz.
                      Dort hatte ich für jedes Mitglied eine eigene *.log-Datei vom Script erstellen lassen in welchem Zeilenweise die einzelnen besuchten Themen als id reingeschrieben wurden.

                      Bsp.:
                      Themen-ID|Timestamp
                      ...
                      ...
                      Timestamp ist heirbei, wie richtig vermutet werden darf, der letzten Besuch des Users in dem entsp. Thema.
                      Geht der User in ein Thema wird geschaut ob es eine Zeile mit der betreffenden Themen-ID gibt. Gibt es sie wird der Timestamp in der log-Datei mit dem Erstellungsdatum des neusten auf der Seite angezeigten Beitrags verglichen und evt. in der log-Datei, falls dieser älteren Datums ist, überschrieben.

                      Also nichts anderes wie ein Cookie Serverseitig.
                      Dies hatte noch einen interessanten Nebeneffekt.
                      Egal von welchem Rechner sich ein Mitglied einloggte, es hatte immer die neuesten und ungelesenen Themen markiert bekommen. Die User hatten dieses Feature geliebt, da es bei ihnen desöfteren vorkam, dass sie sich nicht mit stets dem gleichen PC im Forum bewegten.

                      Ja so lief das in der guten alten YaBB-Zeit.
                      *ingedankenschwelg*

                      HTH
                      Elo
                      > Was ist der Sinn einer Sig?
                      Tja. Das kann ich Dir jetzt auch gerade nicht sagen.
                      Aber eine Gute Frage. Darf ich die als Signatur verwenden?
                      (Joachim Jäger, Nils Ketelsen in de.newusers.questions)

                      Kommentar


                      • #12
                        wie ist das mit den Textdatenbanken? (ist ja im Prinzip nichts anderes als das)

                        also meines wissens, sind die SQL DBs schneller und komfortabler als Textdatenbanken...

                        ich mein vom Ansatz her, ist es ja genau das was ich meinte. Nur das du halt die Timestamps in die log-files schreibst und nicht in eine DB zelle...

                        --

                        warum aber von jedem Thema und jedem User einen Eintrag in eine DB? mein Beispiel war vorher, dass man bei jedem User einen timestamp in der DB hat und bei jedem Beitrag.

                        Tabelle User:
                        username | password | email | ... | timestamp


                        bei jedem seitenaufruf wird nun eine query an die DB geschickt, die die Zeit auf "jetzt" aktualisieren soll.

                        Es gibt auch einen timestamp-eintrag in jedem Beitrag

                        Tabelle Beiträge:
                        nachricht | sender | ... | datum_der_erstellung(timestamp)


                        Nun fragt man den timestamp der user ab und vergleicht diese mit den timestamps der Beiträge / Foren / boards...was auch immer.
                        Dies im Prinzip genau das gleiche, nur halt mir Datenbanken. Das Problem ist nur, wie man den timestamp aktualisiert ohne die DBs großartig zu überlasten...

                        cya CrazyPip

                        Kommentar


                        • #13
                          textdateien auslesen benötigt der mehr "kraft" vom server als eine datenbank abfrage. gab's auchmal probleme das der server dadurch überlastet war? ich meine wenn sich 30 leute herumbewegen und jeder schritt überprüft wird muss das ja ne menge server"kraft" kosten

                          Kommentar


                          • #14
                            ja ist auch so...SQL ist besser...

                            hab aber grad ein logischen Problem bei meiner Mehode, mit der DB festgestellt!

                            Wenn man in den Header die query schreibt, mit der der usertimestamp auf die aktuelle Zeit aktualisiert wird, dann wird ja immer die aktuelle Zeit mit den boad/thread/... timestamps verglichen, d.h. alles wird gelesen markiert, da der usertimestamp auch beim ersten aufruf aktualisiert wird... *fuck*

                            hat denn niemand eine gute Idee zu diesem Thema?

                            cya CrazyPip

                            Kommentar

                            Lädt...
                            X