Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Thema anpinnen und Thema als gelesen markieren?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Thema anpinnen und Thema als gelesen markieren?

    Hallo PHP Gemeinde!

    Ich habe eine Frage wie ich es realisieren kann in meinem Forum was ich grad schreibe in gewissen Boards Themen als wichtig ganz oben anzupinnen so das sie mit der Order By datum desc sortierung nichts zu haben.

    Und wie kann ich es machen ein Thema als gelesen zu markieren wenn man darin gelesen hat,also wie es hier ist! Wenn ich drin gelesen habe sieht der Link zum Thema anders aus und wenn jemand einen neuen Beitrag in das Thema schreibt das der Link zum Thema dann wieder im eigentlich zustand ist!

    Ich möchte keine Codes oder so nur Vorschläge und Tipps wie ich das machen kann!

    Danke für eure Tipps und Voschläge.

    mfg der litter
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    [URL]http://www.lit-web.de[/URL]

  • #2
    Zum ersten Problem. Da könntest du eine extra Spalte anlegen in der du dann ein Flag setzt.
    0 = normal
    1 = angepinnt
    2 = wichtig
    3 = Ankündigung
    Und dann kannst du beim auslesen erstmal die Einträge mit diesem Flag ganz oben anzeigen und dann die restlichen Beiträge. Vielleicht so in etwa:
    Code:
    SELECT ... 
    FROM threads 
    WHERE (das ganze normale was du hast) OR (status > 0)
    ORDER BY status DESC, time DESC
    So liest du zu den normalen Beiträgen noch alle aus die den status > 0 haben, also alle "angepinnten" Beiträge bzw. die anderen Kategorien falls du noch mehr möchtest.
    Mit ORDER BY status sortierst du erstmal nach dem status. Damit die Beiträge als erstes kommen die angepinnt sind. Am Ende kommen alle Beiträge mit status 0, also die normalen Userbeiträge. Diese sortierst du dann ganz normal nach der Zeit wo sie geschrieben wurden.



    Zum anderen Problem, das ist schon etwas schwieriger. Da gibt es auch keine super Lösung für, zumindest ist mir keine bekannt.

    phpbb löst das glaube ich indem es den letzten Zugriff des Users im Cookie speichert und dann danach die Threads als ungelesen/gelesen markiert.

    Man kann es natürlich auch mit einer eigenen DB Tabelle lösen. Dort irgendwie speichern wann ein User wo zuletzt gelesen hat. Aber dass dürfte dann irgendwann die Datenbank sprengen. Da im worst-case "Anzahl der Threads * Anzahl der User" Einträge entstehen. Außer du löst es irgendwie intelligenter. Da fehlt mir noch die richtige Lösung

    Kommentar


    • #3
      Na in dem du zu den Themen weitere Flags in der Datenbank einfügst und in die ORDER BY-Clause kannst du mehrere Felder angeben und diese auch einzeln mit ASC oder DESC sortieren. Dabei wird dann die Reihenfolge von Links nach Rechts abgearbeitet.

      [edit] verdammt, zu langsam

      Kommentar


      • #4
        Zitat von Flor1an Beitrag anzeigen
        phpbb löst das glaube ich indem es den letzten Zugriff des Users im Cookie speichert und dann danach die Threads als ungelesen/gelesen markiert.

        Man kann es natürlich auch mit einer eigenen DB Tabelle lösen. Dort irgendwie speichern wann ein User wo zuletzt gelesen hat. Aber dass dürfte dann irgendwann die Datenbank sprengen. Da im worst-case "Anzahl der Threads * Anzahl der User" Einträge entstehen. Außer du löst es irgendwie intelligenter. Da fehlt mir noch die richtige Lösung
        Also die phpbb Lösung mag ich überhaupt nicht... das geht mir als User immer ziehmlich auf den Geist, weil das eigentlich keine gelesen/ungelesen Lösung ist, sondern eine 'seit dem letzten Login neu und noch nicht gelesen'-Lösung.

        Dein zweiter Vorschlag ist doch gar nicht mal so schlecht. Du musst ja nicht für jeden Thread den Status speichern, sondern _nur_ die ungelesenen. Und die musst du auch nur nach einem Login neu befüllen, so fallen die User raus die sich nur Registrieren, vielleicht 1 mal schreiben und dann nie wieder kommen..., man könnte gegen überfüllung vielleicht auch noch einbauen das ein Thread der älter als nen Monat ist nicht mehr als ungelesen markiert wird. Die die vor der Registrierung erstellt wurden sowieso schonmal nicht markieren.

        Kommentar


        • #5
          Allerdings muss doch dann, wenn ein neuer Post gemacht wird, für JEDEN User des Boards durchgecheckt werden ob er einen neuen Eintrag bekommt oder nicht. Ich glaube dass wäre doch auch recht schlecht für die Performance.

          Vielleicht wäre es schlauer wenn der User auf einen Thread klickt dann ein Eintrag erstellt wird dass er zum Zeitpunkt x diesen Thread aufgerufen hat. Dann kann immer geprüft werden ob der Zeitpunkt zum letzten Aufruf vor oder nach dem letzten Post im Thread steht.

          Aber dann gibt es für jeden aufgerufenen Thread einen Eintrag. Ich glaube das wird irgendwann auch zu viele Einträge nach sich ziehen.

          Kommentar


          • #6
            Zitat von Flor1an Beitrag anzeigen
            Allerdings muss doch dann, wenn ein neuer Post gemacht wird, für JEDEN User des Boards durchgecheckt werden ob er einen neuen Eintrag bekommt oder nicht. Ich glaube dass wäre doch auch recht schlecht für die Performance.
            Nee, warum? Es reicht doch wenn man das bei den Usern macht die sich in den letzten X Stunden eingeloggt haben (bzw. eine Aktion ausgeführt haben), bei den anderen kann man das doch nach dem Login für jeden einzeln machen.

            Kommentar


            • #7
              Hallo,

              ich stehe vor selben Problem...

              Ich habe mir dazu folgendes überlegt:
              - Eintrag erstellen, wann der Thread gelesen wurde,
              - Überprüfen, ob alle Threads gelesen wurden, fals ja, alle Einträge entfernen und in der User-Tabelle irgendwo ne Spalte mit last_read_mark oder sowas in der Art
              - Oder das selbe wie oben beschrieben, wenn man auf alle Foren gelesen markiert....
              [B]Mfg Tomtaz[/B]
              [I]"Es soll jetzt diese Erfindung geben.... Kugel oder so heißt die. Ist so eine Art Suchmaschine..." [/I]:!::shock:

              Kommentar


              • #8
                Vielleicht schaut sich mal einer an wie das im vBulletin gelöst ist (also hier) weil das funktioniert doch wunderbar und gefällt mir als User wesentlich besser als die phpbb Lösung.

                Kommentar


                • #9
                  Alternativ dazu kann man auch alle Einträge löschen lassen, wenn man sich ausloggt, andernfals aber gesagt, was passiert dann wenn sich dieser Benutzer nie ausloggt und immer wieder eingeloggt wird mit dem autologin, dann werden die Daten ja nie gelöscht...
                  [B]Mfg Tomtaz[/B]
                  [I]"Es soll jetzt diese Erfindung geben.... Kugel oder so heißt die. Ist so eine Art Suchmaschine..." [/I]:!::shock:

                  Kommentar


                  • #10
                    Ist doch eigentlich ganz einfach, man macht jedes mal sobal der User irgendetwas anklickt folgende SQL-Abfragen:

                    Code:
                    INSERT INTO readed_table (id_user,id_thread) 
                      SELECT $_SESSION['id_user'],id_thread FROM posts WHERE post_time > $_SESSION['time_last_action']
                    Code:
                    UPDATE user_table SET time_last_action = NOW () WHERE id = $_SESSION['id_user']
                    und noch ein
                    PHP-Code:
                    $_SESSION['time_last_action'] = date('Y-m.d H:i:s',time()); 
                    und schon hat man alles was man braucht oder nicht?

                    Kommentar


                    • #11
                      Aber dann hast du doch auch nur die Threads nach der letzten "Aktion" und nicht die bei dennen der User auch wirklich gelesen hat.

                      Oder verpeil ich grad was?

                      Kommentar


                      • #12
                        Nun wie soll er denn was lesen ohne eine Aktion zu machen?

                        EDIT:
                        Achsoo hab glaub ich grad gepeilt was da schief gelaufen ist, die Tabelle oben muss natürlich unreaded_table heissen

                        Kommentar


                        • #13
                          read ist ein unregelmäßiges Verb ...
                          [FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
                          — The best things in life aren't things[/FONT]

                          Kommentar


                          • #14
                            argh, na wenigstens bin ich kein linguist

                            Kommentar


                            • #15
                              Hallo Leute danke für die Antworten!

                              Ich konnte mich erst jetzt zurück melden weil ich den ganzen Tag unterwegs war.

                              Ich werde eure Vorschläge und Ideen auf alle Fälle versuchen umzusetzen.

                              Ich markiere den Thread aber noch nicht als erledigt,falls noch andere Vorschläge kommen.

                              Hoffe das ist Ok!

                              mfg der litter
                              Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                              [URL]http://www.lit-web.de[/URL]

                              Kommentar

                              Lädt...
                              X