Direktlinks zu Beiträgen?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
SemiX
Mitglied
Beiträge: 154
Registriert: 05.09.2004 19:39
Wohnort: NRW
Kontaktdaten:

Direktlinks zu Beiträgen?

Beitrag von SemiX »

Hallo alle zusammen (:

Ich modifizier für mein Forum zur Zeit ein wenig das Cricca-Guestbook-Script und hatte mit gedacht, die einzelnen Gästebucheinträge ähnlich kompfortabel verlinken zu wollen, wie das phpBB mit seinen Beiträgen handled. Prinzipiell wollte ich dazu den Code aus der viewtopic entsprechend abwandeln -der entsprechende Codeabschnitt ist freundlicherweise sogar kommentiert-, allerdings... "This rather complex gaggle of code [..]" triffts ins Schwarze...denn nun Rätsel ich: :D

Wie bewerkstellige ich es möglichst unkompliziert, dass beim Aufruf von von forum/guestbook.php?idmsg=16 (Beispiel Idealfall: Anzahl der Eintrage ist mit der höchsten ID identisch) das Script erkennt: "Aha! Da will jemand den 16 Beitrag haben, ich darf aber nur 10 Beiträge pro Seite anzeigen, also muss ich ihm die zweite Seite mit den Beiträgen 11-20 ausgeben..."
(Wer sich den obigen Link anschaut: Für die Ausgabe zuständig ist das meiste ab Zeile 814)

Momentan komme ich nämlich nur zum ganz einfachen Verlinken über guestbook.php#16, welches in meinem Beispiel nur mit #1 bis #10 funktionieren würde. Da es beim Gästebuch keine Topics und mehrfachen Themen gibt, fällt das Ganze hoffentlich etwas einfacher aus. Es existiert nur eine Tabelle, in der sämtliche Einträge mit ihren jeweiligen IDs aufgelistet sind. Evtl. hat jemand bereits sowas für seine eigene Seite realisiert...

Liebe Grüße, SemiX
Kein Privatsupport. Das Forum leistet gute Hilfe- und bessere als ich allemal... (:
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Du kennst doch die ID des gewünschten Eintrags oder?
Im Prinzip kannst du es genau so machen wie du es beschrieben hast.
Als erstes holst du dir die Information, wie viele Einträge vor dem jeweiligen Eintrag liegen mit einer SQL Anweisung in etwa so:

Code: Alles auswählen

SELECT count(*) AS anzahl FROM z WHERE id <= $id
Hierbei muss natürlich statt $id die Id des gewünschten Eintrags hinein. Jetzt hast du quasi die Anzahl der Einträge, die vor dem Eintrag liegen (wobei der Eintrag mitgezählt wird).
Jetzt musst du im Prinzip nur noch ein paar kleinere Berechnungen durchführen:
Teilst du die Anzahl der Posts durch die Posts pro Seite, so erhältst du die Anzahl der benötigten Seiten. Diese Zahl ist nicht immer glatt (bei 10 pro Seite erhältst du bei der Zahl 15 natürlich 1,5 was auf 2 aufgerundet werden muss) und muss in jedem Fall auf die nächste ganze Zahl aufgerundet werden (Stichwort ceil()). Diese Zahl ist im Prinzip die Seite die dargestellt werden muss. Jetzt musst du nur noch herausfinden welche Einträge noch auf der Seite zu finden sind. Da gibt es jetzt mehrere Möglichkeiten, die beste die mir einfällt ist aber denke ich diese:
Betrachte noch mal die Anzahl der benötigten Seiten ohne Aufrundung. Der Nachkommateil gibt im Prinzip an, an welcher Stelle der Seite sich das Posting befindet. Ist der Nachkommateil eine 0, so befindet sich das Posting ganz am Anfang der Seite, ist er sehr groß, dann weit am Ende. Um die tatsächliche Position herauszufinden können wir einfach den Teil vor dem Komma abziehen (intval oder floor) und dann wieder mit den Posts pro Seite multiplizieren. Jetzt haben wir die tatsächliche Position, im Beispiel oben also die 5 (die als 5. Eintrag auf der 2. Seite steht). Das bedeutet wir müssen noch 4 Einträge (also N - 1) vorher und 5 Einträge (also Posts_pro_Seite - N) nachher aus der Datenbank holen:

Code: Alles auswählen

SELECT xy FROM z WHERE id <= $id ORDER BY id DESC LIMIT 0, ($N - 1)
und

Code: Alles auswählen

SELECT xy FROM z WHERE id > $id ORDER BY id ASC LIMIT 0, ($posts_pro_seite - $N)
Ich hoffe damit ist das vorgehen einigermaßen klar. Wenn du die Seite auf der sich das ganze befindet nicht brauchst, dann kannst du die entsprechende Berechnung natürlich auch weglassen.

Ich habe auch irgendwie das Gefühl, dass ich das hier alles schon mal an einem ganz Ähnlichen Beispiel vorgekaut habe, wenn da also was schief laufen sollte kannst du ja erst mal suchen...
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
SemiX
Mitglied
Beiträge: 154
Registriert: 05.09.2004 19:39
Wohnort: NRW
Kontaktdaten:

Beitrag von SemiX »

hmm tja was soll ich sagen...DANKE gn#36...den Ansatz habe ich gebraucht :oops: Dass / wie man mit der Übermittlung von $idmsg sozusagen die Main-SQL auf eine bestimmten Beitragssparte begrenzt, wollte mir nicht so recht klar werden...dabei ist es so einfach, stimmt. Gut die letztendliche "Begrenzung" habe ich schließlich etwas anders umgesetzt, denn die zweite Nachkommastelle als Indikator für die Position des Beitrages zu nehmen, ist doch etwas umständlich, wenn man nun nicht gerade 10 Beiträge pro Seite hat...ich beeinfluss jetzt einfach die Variable $start (welche nach dem selben Prinzip funktioniert wie die in der Viewtopic), das geht perfekt :)

Vielen Dank, SemiX
Kein Privatsupport. Das Forum leistet gute Hilfe- und bessere als ich allemal... (:
Antworten

Zurück zu „Coding & Technik“