Michael Wölk: Technik und System des SelfForums

Hallo,

Ich überlege mir jetzt schon seitdem ich PHP wie ich vom system her ein ähnliches forum wie dieses entwickeln kann. ich meine die verschachtelungen - der eine antwortet auf den anderen und der wiederum auf den usw.

ich hab mir hier mal die links angeguckt, doch sinn gibt es in meinen augen nicht.

ich habe mir überlegt das mit dem simplen system zu machen wie auch ein verzeichniss von nem handbuch oder so aufgebaut ist

Posting 1.0.1
Posting 1.0.2
Posting 1.0.3
Posting 1.1.1
Posting 1.1.2
Posting 1.1.3

nur komm ich nicht dahinter wie es funktioniert das das in tabs aufgebaut ist

Thread 1546 (zb)
  Posting 1
  Posting 2
    Posting 2.1
      Posting 3.1  <<
    Posting 2.2
      Posting 3.1  <<
  Posting 3

ich hoffe mir kann das einer erklären.

MfG
Michael Wölk

  1. hi

    ich habe mir überlegt das mit dem simplen system zu machen wie auch ein verzeichniss von nem handbuch oder so aufgebaut ist

    machs dir einfacher, vergib einfach eine id für jedes posting und gib jedem posting eine parent-id mit.
    dann kannst du dir den "baum" ganz einfach ausgeben in dem du einfach für jedes eltern element die elemente mit der entsprechenden parent-id raussuchst.

    nur komm ich nicht dahinter wie es funktioniert das das in tabs aufgebaut ist

    das einfachste sind verschachtelte listen

    <ul>
     <li>Eintrag
     <li>
      <ul>
       <li>Eintrag
       <li>Eintrag
       <li>
        <ul>
         <li>Eintrag
        </ul>
       <li>Eintrag
      </ul>
     <li>Eintrag
     <li>Eintrag
    </ul>

    so long
    ole
    (8-)>

    --
    Die Summe aller menschlichen Intelligenz ist eine Konstante.
    Das Problem ist das Bevölkerungswachtum...
    sh:( fo:) ch:| rl:° br:& n4:° ie:% mo:} va:| de:] zu:| fl:( ss:) ls:\ js:|
    If you can't beat 'em...eat 'em !
    1. hi

      servus

      machs dir einfacher, vergib einfach eine id für jedes posting und gib jedem posting eine parent-id mit.
      dann kannst du dir den "baum" ganz einfach ausgeben in dem du einfach für jedes eltern element die elemente mit der entsprechenden parent-id raussuchst.

      also erstmal danke.
      das hört sich plausibel an, aber so ganz ohne beispiel ist es schwer zu verstehen. also diese parent-id ist so gesehen ein anhang des eltern postings - oder wie ist das?

      MfG
      Michael Wölk

      1. hi
        servus

        machs dir einfacher, vergib einfach eine id für jedes posting und gib jedem posting eine parent-id mit.
        dann kannst du dir den "baum" ganz einfach ausgeben in dem du einfach für jedes eltern element die elemente mit der entsprechenden parent-id raussuchst.

        also erstmal danke.
        das hört sich plausibel an, aber so ganz ohne beispiel ist es schwer zu verstehen. also diese parent-id ist so gesehen ein anhang des eltern postings - oder wie ist das?

        MfG
        Michael Wölk

        Ich denke, Ole meint das so:

        Posting 1: parent_id=non ( Da es keinen vorgänger gibt)
        Posting 2: parent_id=non (wieder kein vorgänger)
          Posting 2.1 parent_id=Posting 2
          posting 2.2 parent_id=Posting 2
            posting 2.2.1 parent_id=Posting 2.2
        usw....

        Ich hoffe, ich konnte Dir damit helfen...
        MfG
        Christof

        1. Hallo

          Thread 0 | 0
             Posting 1 | 0
             Posting 2 | 0
                Posting 3 | 2
                   Posting 8 | 3
                   Posting 9 | 3
                      Posting 10 | 9
                Posting 4 | 2
                   Posting 5 | 4
                Posting 6 | 2
             Posting 7 | 0

          jetz hat jedes posting eine id (fortlaufend) und eine parent-id (immer die nr des vorgängers) soweit nicht schwierig.

          jedoch stelle ich mir gerade vor wie die einträge in der db stehen und ich sie auslesen möchte:

          die reihenfolge ergibt sich durch die parent-id (klasse ding!), aber wie mache ich die verschachtelung der for-schleifen?

          ich muss doch von 0 ausgehen und abfragen: welche posts haben die parent-id 0 - ergibt = 1,2,7
          während des einlesens welche posts die parent-id 0 hat muss ich doch bei posting nr 1 gucken pb es postings mit der parent-id 1 gibt - gut nochmal glück gehabt, aber bei post nr.2 muss ich gucken welche posts die parent id 2 haben und... und? ... 3,4 und 6 jetzt bin ich ertam bei 3 und muss gucken welche die parent id 3 haben und das ist 8 und 9.............................. immer so weiter - das ist genau das selbe problem wie wenn ich ein dirlisting hinbekommen möchte. wie geht das??????????????????
          das wär doch ne schleife in ner schleife in ner schleife ...

          ich muss doch irgendwie erst die einträge in ein array einlesen um dann später drauf zurück zu kommen. bitte helft mir. ich brauch nur ein gedanken gerüst.

          MfG
          Michael Wölk

          1. hi

            ich brauch nur ein gedanken gerüst.

            das zauberwort heißt: rekursion

            mal theoretisiert:

            du hast eine funktion der übergibst du einen startparameter, in deinem fall die "0" als start-id um eben threads rauszusuchen.

            in der funktion werden in einer schleife die ergebnisse ausgegeben, bevor aber nach dem ersten ergebniss das zweite ausgegeben wird, rufst du die funktion wieder auf und übergibst ihr die id des ergebnisse. usw.

            schematisch:

            <meine_funktion id=0>
              <db_abfrage>
                suche mir alle eintraege mit parentid = 0
              </db_abfrage>

            <schleife für ausgabe>
                 gib mir den gefundenen eintrag aus
                 <meine_funktion id=gefundene_id>
              </schleife>

            so long
            ole
            (8-)>

            --
            Die Summe aller menschlichen Intelligenz ist eine Konstante.
            Das Problem ist das Bevölkerungswachtum...
            sh:( fo:) ch:| rl:° br:& n4:° ie:% mo:} va:| de:] zu:| fl:( ss:) ls:\ js:|
            If you can't beat 'em...eat 'em !
            1. hi,

              <meine_funktion id=0>
                <db_abfrage>
                  suche mir alle eintraege mit parentid = 0
                </db_abfrage>

              <schleife für ausgabe>
                   gib mir den gefundenen eintrag aus
                   <meine_funktion id=gefundene_id>
                </schleife>

              das problem liegt doch in der mehrzahl!
              ich finde doch nicht nur ein posting sondern mehrere, so viele postings wie ich finde muss ich auch auf weitere unterpostings durchsuchen.

              ausserdem wo ist "</meine_funktion>"?

              1. hi

                das problem liegt doch in der mehrzahl!

                liegt es nicht, da pro schleifen durchlauf nur ein eintrag ausgegeben wird und nach jedem eintrage dessen id an die funktion weitergegeben wird.

                ich finde doch nicht nur ein posting sondern mehrere, so viele postings wie ich finde muss ich auch auf weitere unterpostings durchsuchen.

                mal angenommen...

                deine datenbankabfrage liefert für parentid = 0 drei eintraege
                mit ihren ids (0)1(1), (0)2(2),(0)3(3) {(parentid)eintrag(id)}

                beim ersten schleifen durchlauf bekommst du den ersten eintrag angezeigt und bevor die schleife von vorne beginnt um dir den nächsten eintrag anzuzeigen wird die funktion mit der id 1 weitergegeben

                in coldfusion würde sowas so aussehen (PHP kann ich leider nicht):

                als erstes wird ein CustumTag definiert (sowas wie eine auslagerbare funktion die in einer eigenen datei steht): ShowTree

                <!-- Definition des Startparameters, hier 0 -->
                <cfparam name="attributes.parent" default="0">

                <!-- Die Datenbankabfrage // gibt werte "bezeichnung" & "id" zurück-->
                <cfquery datasource="myDB" name="auslesen">
                select * from auftrag where parentid = #attributes.parent#
                </cfquery>

                <!-- Ausgabe -->
                <cfoutput query="auslesen">
                <ul><li>#auslesen.bezeichnung#

                <!-- Rekursion // Aufruf des CustomTags -->
                <cf_ShowTree parent="#auslesen.id#>

                </li></ul>
                </cfoutput>

                das ganze in einer CFML-Datei eingebunden würde so aussehen:

                <html>
                <head>
                <title>Beispiel für Rekursion</title>
                </head>
                <body>
                 <cf_ShowTree parent="0">
                </body>
                </html>

                diese seite würde mir nun alle eintraege der datenbank in baumstruktur auflisten.

                vieleicht hilft dir die veranschaulichung, oder evtl. kann dir das auch jemand in PHP übersetzen :)

                so long
                ole
                (8-)>

                --
                Die Summe aller menschlichen Intelligenz ist eine Konstante.
                Das Problem ist das Bevölkerungswachtum...
                sh:( fo:) ch:| rl:° br:& n4:° ie:% mo:} va:| de:] zu:| fl:( ss:) ls:\ js:|
                If you can't beat 'em...eat 'em !
          2. Moin!

            jetz hat jedes posting eine id (fortlaufend) und eine parent-id (immer die nr des vorgängers) soweit nicht schwierig.

            jedoch stelle ich mir gerade vor wie die einträge in der db stehen und ich sie auslesen möchte:

            Damit du die Datenbank nicht endlos quälst mit ständigen neuen Querys, solltest du in deiner Datenbank auf jeden Fall noch eine Thread-ID mit reinschreiben. Alle Postings eines Threads haben dieselbe Thread-ID - damit kannst du gesammelt genau einen Thread aus der Datenbank auslesen und Threads überhaupt unterscheiden.

            Und das Sortieren solltest du dann im Speicher machen. Das ist wesentlich schneller, als wenn du die Datenbank quälst. Schließlich willst du ja nicht so schnell dasselbe Schicksal erleiden, wie dieses Forum hier, was ständig unter Performanceproblemen leidet.

            - Sven Rautenberg

            --
            ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
    2. <ul>
       <li>Eintrag
       <li>
        <ul>
         <li>Eintrag
         <li>Eintrag
         <li>
          <ul>
           <li>Eintrag
          </ul>
         <li>Eintrag
        </ul>
       <li>Eintrag
       <li>Eintrag
      </ul>

      hi nochmal,

      wie bekomme ich die zeichen (kreis, viereck usw) weg?

      1. hi

        wie bekomme ich die zeichen (kreis, viereck usw) weg?

        schau mal:
        http://selfhtml.teamone.de/html/text/listen.htm#html_eigenschaften
        http://selfhtml.teamone.de/html/text/listen.htm#formatieren ff.

        warum hast du das nicht alleine gefunden?

        so long
        ole
        (8-)>

        --
        Die Summe aller menschlichen Intelligenz ist eine Konstante.
        Das Problem ist das Bevölkerungswachtum...
        sh:( fo:) ch:| rl:° br:& n4:° ie:% mo:} va:| de:] zu:| fl:( ss:) ls:\ js:|
        If you can't beat 'em...eat 'em !
  2. Sup!

    Ich überlege mir jetzt schon seitdem ich PHP wie ich vom system her ein ähnliches forum wie dieses entwickeln kann. ich meine die verschachtelungen - der eine antwortet auf den anderen und der wiederum auf den usw.

    Du koenntest statt auch einfach das Self-Forum oder die aeltere Perl-Version installieren.
    Warum willst Du Dir unbedingt mit PHP einen abbrechen, zumal Du schon bei der strukturierten Speicherung und Ausgabe der Postings ueberfordert scheinst?

    Gruesse,

    Bio

    --
    Im übrigen bin ich der Meinung, daß der Bereich ASP abgeschafft werden soll!
    1. Guden.

      Du koenntest statt auch einfach das Self-Forum oder die aeltere Perl-Version installieren.
      Warum willst Du Dir unbedingt mit PHP einen abbrechen, zumal Du schon bei der strukturierten Speicherung und Ausgabe der Postings ueberfordert scheinst?

      Ich bin insofern überfordert, dass ich das mit der auflistung nicht hinbekomme, aber da fehlt mir ja nur noch der ruck bzw. blitz gedanke im kopf, der kommt meistens pünktlich ;-)

      nur fehlt es diesmal echt an... an... äh... ja was auch immer, aber ich leg jetzt einfach mal los und es wird schon schief gehen.

      MfG
      Michael Wölk

      1. Hi!

        nur fehlt es diesmal echt an... an... äh... ja was auch immer, aber ich leg jetzt einfach mal los und es wird schon schief gehen.

        Ich rate Dir den von Stefan Bach verlinkten Artikel von Henryk Plötz als Vorlage zu nehmen. Arbeit eden Akrtikel durch und versuche das zu verstehen, mit dem so gewonnenen Wissen wird es Dir sehr leicht fallen das Forum auf Deine Bedürfnisse anzupassen... Ich habe das auch mal gemacht und ich kann nur sagen dass es mir sehr geholfen hat.

        Das gilt auch für viele andere Artikel, daher lohnt es sich öfter mal bei

        http://aktuell.de.selfhtml.org/tippstricks/ und http://aktuell.de.selfhtml.org/artikel/index.htm

        vorbei zu gucken!

        Grüße
        Andreas

    2. Hallo!

      Warum willst Du Dir unbedingt mit PHP einen abbrechen...

      Vermutlich weil PHP viel besser ist als das altmodische PERL...

      *SCNR*

      Grüße
      Andreas

  3. Hallo,

    Ich überlege mir jetzt schon seitdem ich PHP wie ich vom system her ein ähnliches forum wie dieses entwickeln kann.

    Guckst du hier:
    http://aktuell.de.selfhtml.org/artikel/phpasp/php-forum/index.htm

    Viele Grüße,

    Stefan

    --
    Lass dir das Tanzen NICHT verbieten
    http://tanzverbot.de
    1. Hallo an Alle nochmal,

      Alternative lösung (auszug der seite < http://selfaktuell.teamone.de/artikel/phpasp/php-forum/index.htm

      ):

      ################################################################
       function zeichneBaum($eintrag, $aktuellerEintrag = 0, $aktuelleTiefe = 0)
       {
        global $forumarray, $kindarray;  // Die hilfreichen Arrays importieren

      // Irgendwie eine Einrückung erzielen, zum Beispiel durch wiederholte  
        for($i = 0; $i < $aktuelleTiefe; $i++) echo "    ";

      //[... Zeile mit den Eintragsdaten oder einem Link ausgeben ...]

      //[... Anfang der Schleife über alle Kinder ...]
          zeichneBaum($kind, $aktuellerEintrag, $aktuelleTiefe+1);
        //[... Rest der Funktion ...]
       }
      ################################################################

      wie kann das gehen ->   //[... Rest der Funktion ...]
      wie denn, wenn vorher schon die funktion wieder neu aufgerufen wurde?

      ################################################################
      rdin(3);
      function rdin($x)
      {
       print "OBEN: $x<br>";
       for ($i=0; $i<=5; $i++)
       {
        print "DAZWISCHEN: $x<br>";
        rdin($x);
       }
       print "UNTEN: $x<br>";
      }
      ?>
      ################################################################

      ich bekomme als ausgabe NIE "UNTEN: $x<br>", weil rdin() innerhalb der schleife bereits nach dem ersten bzw. im ersten durchlauf aufgerufen wird.

      kann mir das einer erklären (also das alternative beispiel von Henryk Plötz)?

      MfG
      Michael Wölk

      1. Hallo,

        wie kann das gehen ->   //[... Rest der Funktion ...]
        wie denn, wenn vorher schon die funktion wieder neu aufgerufen wurde?

        Was meinst Du damit? Die Funktion ruft sich selbst auf und kehrt dann zurück, die Ausführung geht dann normal weiter. Wo ist Dein Problem?

        ich bekomme als ausgabe NIE "UNTEN: $x<br>", weil rdin() innerhalb der schleife bereits nach dem ersten bzw. im ersten durchlauf aufgerufen wird.

        *ARGH* Nein! Du bekommst nie "UNTEN", weil Du eine Endlosschleife produzierst! Die Funktion ruft sich uendlich oft selbst auf. Das solltest Du bei Rekursion _unbedingt_ vermeiden.

        Viele Grüße,
        Christian

        1. Hi,

          *ARGH* Nein! Du bekommst nie "UNTEN", weil Du eine Endlosschleife produzierst! Die Funktion ruft sich uendlich oft selbst auf. Das solltest Du bei Rekursion _unbedingt_ vermeiden.

          Achso oh mann wie blöd. aber wie ist denn jetzt der ablauf einer  einer for-schleife in einer function

          function foo ()
          {
           for()
           {
            foo();
           }
          }

          die function wird aufgerufen und geht dann in die forschleife wo dann die function aufgerufen wird. wird vorher die schleife zu ende gebracht oder wie?

          MfG
          Michael Wölk

          1. Hallo,

            Achso oh mann wie blöd. aber wie ist denn jetzt der ablauf einer  einer for-schleife in einer function

            function foo ()
            {

            _vor_der_schleife

            for()
            {
              foo();
            }

            _nach_der_schleife

            }

            Also, du rufst deine Funktion foo auf. Dann währen wir bei _vor_der_schleife angelangt. Jetzt wird die Funktion selbst in der Schleife einem Durchgang aufgerufen. Diese neu aufgerufene Funktion erledigt ihre Arbeit, irgendwann ist die Schleife mal fertig. Und dann sind wir _nach_der_schleife.

            Du kannst das von dir oben angeführte so natürlich nicht programmieren, da hättest du wieder ein Endloskonstrukt. Irgendwann brauchst du eine Abbruchbedingung welche dafür sorgt, dass die Funktion sich nicht mehr selbst aufruft.

            Wenn die Funktion sich selbst z.B. 10 mal aufgerufen hat, dann wird auch nach Eintritt der Abbruchbedingung _nach_der_schleife 10 mal ausgeführt.
            Zuerst für den Aufruf, der als letztes erfolgte, dann für den vorletzten, dann für den vorvorletzten, ..., und letzten Endes wird dann _nach_der_schleife für den allerersten Funktionsaufruf ausgeführt.

            Viele Grüße,

            Stefan

            --
            Lass dir das Tanzen NICHT verbieten
            http://tanzverbot.de
  4. Hallo,

    du kannst dir ja mal dieses Forum:
    http://alex.ilosuna.org/forum.html

    anschauen. Basiert auf PHP/mySQL, den Quelltext kenne ich nicht, aber vom Aussehen her entspricht es dem Selfforum.

    Gruß,
    Christian

    1. Hi!

      du kannst dir ja mal dieses Forum:
      http://alex.ilosuna.org/forum.html

      Jepp, und da steht:

      "Info

      Die Idee war, ein schlichtes Forum mit Thread- und Board-Ansicht zu entwerfen. Mehr über die Thread- und Board-Darstellung wird in diesem Artikel von Stefan Münz erklärt: Foren und Boards. Als Basis diente mir dieser Artikel von Henryk Plötz: Threadbasiertes Forum mit PHP und MySQL."

      ;-)

      Grüße
      Andreas