Dynamisches HTML Menü aus einer SQL Datenbank

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

  • Dynamisches HTML Menü aus einer SQL Datenbank

    Hallo,

    ich möchte ein Menü generieren. Dieses Menü bezieht die Haupt- und Unterüberschriften aus einer Datenbank. Und es sollen immer nur genau DIE Unterüberschriften angezeigt werden, die zu einer (vom user angeklickten) Hauptüberschrift gehören.

    ?!? Hat das wer verstanden ?!?

    Am besten noch ein kleines Beispiel:
    Nach dem Aufruf der Seite erscheinen ersteinmal alle Hauptüberschriften (wie in einem Buch das Inhaltsverzeichnis):
    PHP-Code:
    Auto
    Schiff
    Flugzeug 
    Der User klickt nun auf "Schiff" und bekommt angezeigt:
    PHP-Code:
    Auto
    Schiff
      
    - Die Schraube
      
    Der Bug
      
    Der Motor
    Flugzeug 
    Die Datenbank sieht bisher so aus:
    PHP-Code:
    muell_id h_id u_id caption 
    -------------------------------- 
    1        1    0    Auto
    2        
    1    1    | Die Reifen 
    3        
    1    2    Der Auspuff
    4        
    2    0    Schiff
    5        
    2    1    | Die Schraube
    6        
    2    2    Der Bug
    7        
    2    3    Der Motor
    8        
    3    0    Flugzeug 
    9        
    3    1    Der Flügel 
    Also: h_id Zahl und u_id gleich 0 heißt immer "Das ist eine Hauptüberschrift".
    Beispiel Ende.

    Gibt es für solche Menüs einen "Standart-Lösungsweg"? Also einen Weg, wie man das elegant löst?
    Wenn jmd. einen besseren Vorschlag hat: ich wäre SEEEH Dankbar!!!

    GLORIA PERPETUA

  • #2
    PS:
    Das ganze soll in eine HTML Tabelle. Da muss man doch mit Schleifen arbeiten, richtig?
    GLORIA PERPETUA

    Kommentar


    • #3
      Ich glaube dieses Rad ist bereits erfunden:
      http://www.zend.com/codex.php?CID=321
      dort gibts 2 Lösungen (cascading menu)
      "nested menu" sieht auch gut aus.
      Zuletzt geändert von CHnuschti; 16.09.2002, 22:26.

      Kommentar


      • #4
        Soll bei einem Klick auf einen Menüpunkt die Seite neu angefordert / aufgebaut werden oder soll das Untermenü sofort aufklappen ?

        (1. Variante holt erst Menu aus DB und dann bei Klick die Untermenüs
        2. Variante würde mit JS gelöst werden müssen.)

        taratus

        Kommentar


        • #5
          @CHnuschti
          hmm... es sind schon ganz classe codes da auf der Seite, aber nicht das, was ich wirklich brauche. Ich möchte das Menü ja aus einer Datenbank heraus generieren, ich brauche also nicht wirklich eine selbstgeschriebene Klasse. Trotzdem Danke!

          @taratus
          Ja, die seite soll neu angefordert werden. Mit javaScript habe ich schon probiert. Ist zwar eine schöne Lösung, funzt aber nicht in allen Browsern. Und das ist GANZ wichtig!!!

          Also, meine bisherige Lösung sieht so aus:

          PHP-Code:
          // auslesen der daten aus der db, und speichern in $result

          echo '<table>';

          while(
          $row=mysql_fetch_object($result)) {

            
          // überpfrüft ob es eine Hauptüberschrift ist (wegen h_id "größer" 0 undund u_id "gleich" 0).
            // das ist immer ein hauptüberschrift (siehe oben in der Datenank)
            
          if($row->h_id && $row->u_id == 0) {
              echo 
          '<tr><td> - ',$row->caption,'</td></tr>';
            }

            
          //überprüft ob es eine Unterüberschrift ist (u_id muss auch größer 0 sein)
            
          if($row->h_id && $row->u_id 0) {
              echo 
          '<tr><td> -- ',$row->caption,'</td></tr>';
            }
          }

          echo 
          '</table>'
          Problem: Ich kann nur eine Hauptüberschirft und darunter noch EINE Unterüberschrift (also nur 2 Ebenen). Ich bräuchte allerding min. 3 Ebenen. Habt ihr ein Lösungsvorschlag?
          GLORIA PERPETUA

          Kommentar


          • #6
            Re: Dynamisches HTML Menü aus einer SQL Datenbank

            hab ich dich richtig verstanden, das du jetzt ein weiteres untermunü haben willst ?
            tut, mir leid, da kenn ich mich absolut nicht aus, hab sowas noch nie gemacht, aber da würde ich folgendes vorschlagen:

            PHP-Code:
            muell_id h_id u_id caption 
            -------------------------------- 
            1        0    0    Auto
            2        
            1    1    | Die Reifen 
            3        
            1    1    Der Auspuff
            4        
            2    3    audi-auspuff
            5        
            0    0    Schiff
            6        
            1    4    | Die Schraube
            7        
            1    4    Der Bug
            8        
            1    4    Der Motor
            9        
            0    0    Flugzeug 
            10      
            1    8    Der Flügel 
            h_id gibt die ebene an. also auto, schiff und flugzeug haben null, 1 die erste ebebe usw. und u_id gibt die wurzel an, also die reifen gehären zu auto, weil die u_id auf die muell_id verweiss.. audi-auspuff verweiss auf der auspuff, weil muell_id 3 ist
            son kleiner denkanstoss
            meine Projekte bestaunen: http://www.kleiza.de

            Kommentar


            • #7
              ja, das prinzip ist richtig.
              allerdings darfst du die muell_id nicht dazu zählen (bzw die darfst du nicht verwenden). das ist ja nur die id, die als Prim. schlüssel gesetzt ist und bedeutungsllos ist. sie hat einen autowert und ändert sich als (bzw ist änderbar). also darf ich den nicht zur identifizierung der menü punkte benutzen.

              habe aber schon eine lösung für mein problem gefunden. funktioniert auch schon (fast). ihr braucht also nicht weiter postet

              Außer ihr habt ein tutorial oder ein "profi"-lösungsvorschlag!

              Danke!
              GLORIA PERPETUA

              Kommentar


              • #8
                Ich würde es noch ein klein wenig anders machen:

                Dazu brauchst Du in Deiner Tabelle nur die muell_id
                (warum auch immer die so heisst) und eine parent_id (Eltern-ID).

                Alle Menüpunkte in der ersten Ebene haben die parent_id "0".
                Die Abfrage lautet also:
                "Hole alle Einträge wo parent_id = 0"

                Mit dieser Abfrage erhälst Du zu jedem Menüpunkt eine muell_id. also z.B.: 1, 2 und 3)
                Mit dieser ID kannst Du die gleiche Abfrage wie oben noch mal machen:
                "Hole alle Einträge wo parent_id = 1" (oder 2 oder 3)

                Auf diese Art kannst Du durch die Ebenen gehen.
                Dort wo keine parent_id gefunden wird, handelt es sich um die letzte Ebene
                und es gibt keine Ebene darunter.

                easy

                taratus

                Kommentar


                • #9
                  taratus, also du hättest einfach sagen können, das mein vorschlag auch ohne h_id gehen würde, aller ding könnte man dasn nicht explizit eine ebene zugreifen
                  meine Projekte bestaunen: http://www.kleiza.de

                  Kommentar


                  • #10
                    @Campus

                    ...aller ding könnte man dan nicht explizit eine ebene zugreifen
                    ... und genau das ist mein problem!

                    GLORIA PERPETUA

                    Kommentar


                    • #11
                      hmm, brauchs du jetzt noch hilfe oder has du es schon hingekriegt ?
                      meine Projekte bestaunen: http://www.kleiza.de

                      Kommentar


                      • #12
                        würd mich auch interessieren, ob Du's hinbekommen hast. Wenn nicht, könnte ich Dir evtl. auch weiterhelfen.
                        Schau Dir z.b. mal das hier an. Suchst Du etwas in der Art?
                        Hier hab ich auch ein Menü mit Untermenü programmiert, das in einer HTML Tabelle liegt und dessen Layout komplett Template-basiert ist. Zwar verwende ich TXT-Dateien, aber auch die Anpassung an eine Datenbank dürfte nicht schwer sein.
                        Kannst Dich ja melden, wenn es Dich interessiert..

                        Kommentar


                        • #13
                          @zzet

                          Alter Schede!!! Das ist ja ne suuuuper Seite! Geiles Design... total Profihaft würde ich sagen!!!!!!!!
                          Ist die noch in Arbeit? Willste die verkaufen?

                          Das Menü ist jenau sowas, wie ich mir vorgestellt habe, allerding bräuchte ich (wie gesagt) min 3 Unterebenen. Kann das dein Script auch?

                          Um auf die Hilfe zurück zu kommen:
                          Ich habe jetzt eine Lösung (immerhin eine) gefunden. Danke
                          Ich werde sie bei Gelegenheit hier posten (aber es gibt noch kleine Macken, die sollen erst noch raus!)
                          Es ist eine gute Idee, aber umständlich! Um 3 Überschriftebenen zu bekommen brauche ich 3 ineinander geschachtelte Schleifen und If() Abfragen. Nicht so schön, aber funktioniert klasse!

                          GLORIA PERPETUA

                          Kommentar


                          • #14
                            danke, danke... ja, die is noch in Arbeit. Bin aber in der Endphase
                            Werd sie aber nicht verkaufen, sondern verschenken... ja, Du hast richtig gelesen... mach das Teil für nen Freund.

                            Bisher habe ich das Menü nur mit 2 Ebenen am Laufen, aber eine 3. einzubauen wäre ne Kleinigkeit.
                            Schick mir ne Mail, wenn Du mehr Infos willst... oder poste hier...

                            Gruss, zzet

                            Kommentar


                            • #15
                              JAAAAAA, klar möchte ich mehr Infos!!!

                              Ich denke auch, das es nicht so schwer sein wird, statt einer txt datei einfach eine DB dran zu knüpfen. Hauptsache es funzt mit den 3 Ebenen.

                              also, wenn du den code posten würdes... wär nett :-)

                              danke
                              GLORIA PERPETUA

                              Kommentar

                              Lädt...
                              X