André Laugks: Funktionsweise der Features dieses Forums

Hallo!

Man, ist das schon wieder spät. Dafür schlafe ich aber morgen länger. :-)

Die Frage geht wohl ehr an die Leute, die sich mit diesem Forum auskennen.

Ich habe versucht dieses Forum nachzubauen, mit PHP. Zu meiner Freude kann ich sagen, es hat geklappt, ich bin richtig stolz auf mich. Die "Aststrukturen" bauen sich schön auf, keine Fehler, nichts. Jedes Posting findet seinen richtigen Platz. Schön :-) !!!
Ich würde es Euch gern zeigen, aber es liegt lokal. :-)

Problem, mir fehlen noch ein paar Features. Zum Beispiel der Schwanzabschneider, Suchfunktion und das die Threads unter einem Postings angezeigt werden, also wenn ich ein Posting lese, kann ich ja den Ast verfolgen, der ja unter dem Posting steht.

Über den Schwanzabschneider denke ich ein anderes mal nach.

Mich würde interessieren, wie die Suchfunktion funktioniert und das der Threadast unter einem Posting angezeigt wird. Also nur vom Prinzip. Ich komme nicht drauf, wie ich das anstellen könnte.

Vielen Dank, und mfg André

  1. Hallo André,

    das Forum ist wohl in Perl geschrieben, da könnte ich Dir gerne helfen! Aber mit PHP kenne ich mich leider nicht aus.

    Reiner

    Hallo!

    Man, ist das schon wieder spät. Dafür schlafe ich aber morgen länger. :-)

    Die Frage geht wohl ehr an die Leute, die sich mit diesem Forum auskennen.

    Ich habe versucht dieses Forum nachzubauen, mit PHP. Zu meiner Freude kann ich sagen, es hat geklappt, ich bin richtig stolz auf mich. Die "Aststrukturen" bauen sich schön auf, keine Fehler, nichts. Jedes Posting findet seinen richtigen Platz. Schön :-) !!!
    Ich würde es Euch gern zeigen, aber es liegt lokal. :-)

    Problem, mir fehlen noch ein paar Features. Zum Beispiel der Schwanzabschneider, Suchfunktion und das die Threads unter einem Postings angezeigt werden, also wenn ich ein Posting lese, kann ich ja den Ast verfolgen, der ja unter dem Posting steht.

    Über den Schwanzabschneider denke ich ein anderes mal nach.

    Mich würde interessieren, wie die Suchfunktion funktioniert und das der Threadast unter einem Posting angezeigt wird. Also nur vom Prinzip. Ich komme nicht drauf, wie ich das anstellen könnte.

    Vielen Dank, und mfg André

    1. HAllo!

      das Forum ist wohl in Perl geschrieben, da könnte ich Dir gerne helfen! Aber mit PHP kenne ich mich leider nicht aus.

      Wie würdest Du es machen? Wie würdest Du die Archivsuche aufziehen? Was würdest Du von Anfang an vorsehen, um eine Suche zu bewerkstelligen?
      Das ganze ohne Perlsytax, also nur vom Prinzip her.

      Wie ich die Threads in einem Posting anzeige, bin ich jetzt drauf gekommen. Irgendwie hatte ich einen Geistesblitz.

      mfg, André Laugks

  2. Hallo André,

    zu der Sache mit den Threads. Schau dir mal die Forumshauptdatei an, was faellt auf? Richtig. es sind anker gesetzt. Am besten du uebergibst mit deinem Posting die Msg. Nr. auf die es sich beziehst, oeffnest dann die Hauptdatei, suchst nach dem Trennzeichen zu der Datei die du ja  mit dem geschriebenen Posting uebergeben hast, und haengst dann dahinter den link des neuen Postings an. natuerlich auch wieder mit markern.

    MfG Olli

    1. Hallo Oliver!

      zu der Sache mit den Threads. Schau dir mal die Forumshauptdatei an, was faellt auf? Richtig. es sind anker gesetzt. Am besten du uebergibst mit deinem Posting die Msg. Nr. auf die es sich beziehst, oeffnest dann die Hauptdatei, suchst nach dem Trennzeichen zu der Datei die du ja  mit dem geschriebenen Posting uebergeben hast, und haengst dann dahinter den link des neuen Postings an. natuerlich auch wieder mit markern.

      So sieht ein Teil meiner Hauptdatei aus.

      ---------------------------------><8-------------------------------------
      <!--ende27--></ul>
      <!--anfang19--><ul><a href="19.html">
      <!--anfang20--><ul><a href="20.html"></a>
      <!--anfang22--><ul><a href="22.html"></a>
      <!--ende22--></ul>
      <!--anfang21--><ul><a href="21.html"></a>
      <!--anfang23--><ul><a href="23.html"></a>
      <!--anfang25--><ul><a href="25.html"></a>
      <!--anfang28--><ul><a href="28.html"></a>
      <!--ende28--></ul>
      <!--ende25--></ul>
      <!--ende23--></ul>
      <!--ende21--></ul>
      <!--ende20--></ul>
      ------------------------------------8><----------------------------------

      Mir ist dann nach dem Absenden des Postings eingefallen, wie ioch es machen könnte.

      z.B.
      1Blabla
      2   Blabla
      3      Blabla
      4         Blabla

      Im Posting 2 und 3 schleppe ich die 1 mit. Wenn ich jetzt den Threadast darstellen möchte, lese ich die Hauptdatei einfach aus,  von 1 bis 4, nach dem ich die Zeile Nr.4 eingefügt habe, kopiere das und setze es einfach unter das Posting. Dann erst erstelle ich die Datei mit der Message.

      mfg, André Laugks

      1. Rehi!

        z.B.
        1Blabla
        2   Blabla
        3      Blabla
        4         Blabla

        Im Posting 2 und 3 schleppe ich die 1 mit. Wenn ich jetzt den Threadast darstellen möchte, lese ich die Hauptdatei einfach aus,  von 1 bis 4, nach dem ich die Zeile Nr.4 eingefügt habe, kopiere das und setze es einfach unter das Posting. Dann erst erstelle ich die Datei mit der Message.

        Wenn ich das jetzt drüber nachdenke, ist mir doch einiges nicht so klar. Wie kann ich den beim Posting 1 wissen, wie sich der Thread entwickelt. Wenn man sich meine erste Frage anschaut http://www.teamone.de/selfaktuell/forum/messages/61477.html sieht man unter dem Posting die ganzen "Äste". Wieso, wie kommen die dahin. Werden die beim Aufruf des Postings noch nachträglich eingefügt?

        mfg, André

        1. Hi andre,

          ich "skitziere dir mal wie ich das meine. Dazu ein kleines Szenario ;-)

          Eine Person postet einen neun Beitrag. In der Forumshauptdatei wird  oben  ein neuer thread inizialisiert.

          <!--anfang1-->
            <a href="1.htm">posting 1</a>
          <!--ende1-->

          so, nun kommt eine weitere Person und will auf Posting 1 antworten. Also durchsuchst du die hauptdatei nach anfang1, suchst dann das naechste </a> und fuegst dort folgendes ein:

          <!--anfang2-->
            <img src="trenner.gif><a href="2.htm">posting 2</a>
          <!--ende2-->

          so das dann da steht:

          <!--anfang1-->
            <img src="trenner.gif><a href="1.htm">posting 1</a>
            <!--anfang2-->
              <img src="trenner.gif><a href="2.htm">posting 2</a>
            <!--ende2-->
          <!--ende1-->

          so, nun kommt die naechste person, und antwortet wieder auf posting eins. nun suchst du wieder anch anfang1, dann wieder nach dem naechsten </a> gehst ne zeile nach unten und fuegst dann folgendes ein:

          <!--anfang3-->
            <img src="trenner.gif><a href="3.htm">posting 3</a>
          <!--ende3-->

          so das dann da steht:

          <!--anfang1-->
            <a href="1.htm">posting 1</a>
            <!--anfang3-->
              <img src="trenner.gif><a href="3.htm">posting 3</a>
            <!--ende3-->
            <!--anfang2-->
              <img src="trenner.gif><a href="2.htm">posting 2</a>
            <!--ende2-->
          <!--ende1-->

          So, nun antwortet eine person auf die nachricht 3. also suchst  du nach anfang3, dann das naechste </a>. wieder in die naechst zeile und fuegst ein

          <!--anfang4-->
            <img src="trenner.gif><img src="trenner.gif><a href="4.htm">posting 3</a>
          <!--ende4-->

          ein. So das dann da steht:

          <!--anfang1-->
            <a href="1.htm">posting 1</a>
            <!--anfang3-->
              <img src="trenner.gif><a href="3.htm">posting 3</a>
              <!--anfang4-->
                <img src="trenner.gif><img src="trenner.gif><a href="4.htm">posting 3</a>
              <!--ende4-->
            <!--ende3-->
            <!--anfang2-->
              <img src="trenner.gif><a href="2.htm">posting 2</a>
            <!--ende2-->
          <!--ende1-->

          Prinzip verstanden? ok. nun musst du natuerlich noch rausfinden, wieviele img's du als trennzeichen zur  einrueckung setzen musst. Ich wuerde forschlagen, bei posting 1 ein weiters unsichtbares input feld in dem antwort feld zu machen, wo du eine "2" reinschreibst. schikcst du das dann ab, ueberprueft das script was die hauptdatei schreibt die variable, und fuegt so viele  img tags ein, wie gross die var  ist. anschliessend inkrementierst (erhoehst um 1) du die variable und packst sie vieder ins antwort feld in nen hidden input feld.

          Ich hoffe ich hab jetzt keine denkfehler drinne ;-)

          MfG Olli

          1. , wo du eine "2" reinschreibst.

            kleiner fehler ;-) du must beim ausgangsposting eine 1 reinschreiben

            MfG Olli

            1. Aso, nochwas ;-.)))

              um die neu hinzugekommenden  antworten auch in den hirqarchisch unter den antworten stehenden postings "einzutragen", solltest du die "reinfolge" vom threadausgangsposting bis zur antwort immer mitschleppen, also die nummern. soll heisen, du must in jedem antwortformular die nr. angeben, auf welches du antwortest, udn auf welches das wiederrum geantwortet hat, udn auf welches das wieder.... immer os weiter. halt vom ursprungsposting aus. die einzlenen  nr. kannst du ja mit nem komma trenenn und dann wieder ausplitten. nun hast du alel messg nr. wo du den darin enthaltenen thread aendern musst. und d as machst du am besten so wie in der hautpdatei...

              MfG Olli

              1. Hi Olli

                um die neu hinzugekommenden  antworten auch in den hirqarchisch unter den antworten stehenden postings "einzutragen", solltest du die "reinfolge" vom threadausgangsposting bis zur antwort immer mitschleppen, also die nummern. soll heisen, du must in jedem antwortformular die nr. angeben, auf welches du antwortest, udn auf welches das wiederrum geantwortet hat, udn auf welches das wieder.... immer os weiter. halt vom ursprungsposting aus. die einzlenen  nr. kannst du ja mit nem komma trenenn und dann wieder ausplitten. nun hast du alel messg nr. wo du den darin enthaltenen thread aendern musst. und d as machst du am besten so wie in der hautpdatei...

                Ja, so macht es dieses Forum ja auch. Ich moechte nur darauf hinweisen, dass dies ein Security hole ist, denn jemand kann sich ja ein Formular zusammenbauen, in dem Nummern genannt werden, die gar nichts miteinander zu tun haben. Sieht dann halt doof aus, wenn in einem voellig anderen Posting ein Link in einen Thread steht.

                So lange, Roland

                1. Hi Roland,

                  ich pers. wuerde das forum auch mit DB unterstuetzung bauen, ganz einfach um nicht zig tauend dateien andauernd veraendern zu muessen. und man koennte ja auch den http_refferer auswerten.... von wo er denn das psoting abgeschickt hat, und ob das auf das ding ist wo die aw hinkommt...

                  MfG Olli

          2. Hallo Oliver!

            Das einfühgen der Zeieln ist kein Problem. Ich mache das so:

            <!--anfang1--><ul><a href="1.html"></a>
            <!--ende1--></ul>

            Wir nehmen an, es möchte jemand auf Posting 1 anrufen.

            Ich lese per file() die komplete Hauptdatei in ein Array ein. Dann suche ich in dem Array nach <!--anfang1-->. Habe ich es gefunden, füge ich an <!--anfang1--><a href="1.html"></a>,  \n<!--anfang2--><ul><a href="2.html"></a>\n<!--ende2--></ul> an

            <!--anfang1--><ul><a href="1.html"></a>
            <!--anfang2--><ul><a href="2.html"></a>
            <!--ende2--></ul>
            <!--ende1--></ul>

            Das ganze(Hauptdatei) schreibe ich in ein neues Array, welches ich dann wieder in die Datei schreibe.

            Kommt ein neues Posting, lese ich die Datei wieder aus, füge zuerst das neue Zeile ein und dann wird alles wieder in die Hauptdatei geschrieben.

            Mein Problem war nun, wie stelle ich den Thread unter ein Posting dar, also die Aststruktur. Michael hat ja in seinem Posting, und zwar im letzten Absatz geschrieben, wie es gemacht wird. Mal schauen wie ich das mache... Aber das werde ich auch noch schaffen.

            mfg, André Laugks

            1. Mein Problem war nun, wie stelle ich den Thread unter ein Posting dar, also die Aststruktur. Michael hat ja in seinem Posting, und zwar im letzten Absatz geschrieben, wie es gemacht wird. Mal schauen wie ich das mache... Aber das werde ich auch noch schaffen.

              Wenn ich Dich richtig verstehe, dann willst Du dieselbe Link-Liste in allen Postings eines Threads sehen.
              Das schreit natürlich nach "reuse".

              In Deinem Falle wäre das: Lagere die Link-Liste eines jeden Threads in eine separate Datei aus (24360_links.html) und binde sie via SSI in jedes Posting des Threads ein.
              Das reduziert die Arbeit für das Ändern von Dateien erheblich.

  3. Über den Schwanzabschneider denke ich ein anderes mal nach.

    Der läßt sich allerdings nicht von der Suchfunktion trennen.

    Mich würde interessieren, wie die Suchfunktion funktioniert

    Die Suchfunktion ist eine Phrasensuche. Sie findet also
    beliebige Textstellen auch über Wort- oder Satzgrenzen
    hinweg, macht dafür aber keinen Gebrauch von binären
    Suchbäumen etc. Deshalb ist die Suchdauer direkt propor-
    tional zur Menge der zu durchsuchenden Daten.
    (Rate mal, wieso "NI" eingeführt wurde ... ;-)

    Durchsucht werden nicht die HTML-Dateien mit den Postings,
    sondern eine auf die Bedürfnisse der Suche optimierte
    sequentielle ASCII-"Indexdatei".
    Der Schwanzabschneider hat nicht nur die Aufgabe, Beiträge
    aus dem Forum-"Cache" in das Archiv zu übertragen, sondern
    er erzeugt dabei auch gleich die passenden Indexeinträge.
    (Sofern der Beitrag nicht mit "NI" markiert ist.)

    Jeder Indexeintrag (eine Zeile) enthält:

    • relativer URL der Archivdatei (die einen gesamten
        Thread enthält)
    • target des Postings innerhalb der Archivdatei
        (um exakte Treffer-Links bauen zu können)
    • Thema des Beitrags (darf auch leer sein)
    • Überschrift des Beitrags
    • Name des Verfassers
    • Datum des Beitrags
    • kompletter Inhalt des Beitrags (nach Entfernen von
        senkrechten Strichen, welche als Trennzeichen zwischen
        den Feldern einer Zeile dienen)
      Der Kompromiß mit dem senkrechten Strich basiert auf
      der vorliegenden Datenstruktur; würde jedes Feld in
      einer eigenen Zeile stehen, wäre er nicht nötig.

    Das Such-Skript wertet seine CGI-Parameter aus,
    baut sich seine Suchtermliste zusammen, liest die
    komplette Indexdatei (> 40 MB) sequentiell durch und
    "sucht", d. h. vergleicht die zu durchsuchenden Felder
    mit den Werten der Suchterme, inklusive Regulärer
    Ausdrücke, Case-Sensitivität und was auch noch alles.
    (Das zu beschreiben ist eine längere Geschichte.)

    Die Treffer werden in einem array gespeichert; am Ende
    kann für die Ausgabe Trefferzahl und Ausgaberichtung
    variabel gehandhabt werden.

    Es existiert ein *sehr* viel ausführlicherer Artikel
    über die Funktionsweise des Such-Skripts. Bisher ist
    er noch nicht allgemein zugänglich, aber falls Stefan
    nichts dagegen hat ...

    Technisches Detail: Das Suchskript selbst gibt sein
    Eingabeformular aus. Die Suchmaschine besteht aus genau
    einem einzigen Perl-Skript, keine zusätzlichen HTML-
    Dokumente oder was auch immer.

    und das der Threadast unter einem Posting angezeigt wird.

    Alle Dateien des Forums, die Du liest, sind statisch.
    Das bedeutet, daß der "Poster" alles, was Du als features
    eingebaut haben willst, während des Einfügen eines neuen
    Beitrags tun muß. Er muß also alle Dateien des gesamten
    Threads ändern, nicht nur den neuen Beitrag erzeugen und
    die Hauptdatei anpassen. Die Vorgehensweise ist dabei
    immer dieselbe, und die Verweis-Struktur enthält immer
    dieselben Meta-Informationen als HTML-Kommentare.

    Welche Dateien er ändern muß, das erkennst Du durch die
    Thread-Struktur in der Hauptdatei, wo ja der gesamte
    Thread zusammenhängend beschrieben ist.