Navigationsmenü mit 3 Ebenen

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

  • Navigationsmenü mit 3 Ebenen

    Hallo Forum

    Ich suche für meine Webseite eine Möglichkeit das Navigationsmenü dynamisch bis in die dritte Ebene zu erstellen. Nach längerem Lesen in HOWTO's diversen Foren und Mailinglisten habe ich leider noch nichts dazu gefunden.

    Zwei Ebenen funktionieren prima.
    PHP-Code:
    <?
    $siteRoot="/test/";
    $menuStruct=array(
    "Home"=>array("root"=>$siteRoot."content/Home/index.php"),
    "Programme"=>array("root"=>$siteRoot."content/Prog/prog.php",
       "Audio"=>$siteRoot."content/Prog/audio.php",
       "Video"=>$siteRoot."content/Prog/video.php",
       "Grafik"=>$siteRoot."content/Prog/grafik.php"),
    "AGB"=>array("root"=>$siteRoot."content/AGB/agb.php")
    );
    foreach ( $menuStruct as $key => $value ) {
       if ( $PHP_SELF == $value['root'] ) {
          echo "<a class=\"linka1\" href=".$value['root'].">$key</a><br/>\n";
       } else {
          echo "<a class=\"linka2\" href=".$value['root'].">$key</a><br/>\n";
       }
     foreach ( $value as $key2 => $value2 ) {
       if ( array_search ( $PHP_SELF,$value ) ) {
          if ( $key2 != "root" ) {
             if ( $PHP_SELF == $value2 ) {
                echo "<a class=\"linkb1\" href=".$value2.">$key2</a><br/>\n";
             } else {
                echo "<a class=\"linkb2\" href=".$value2.">$key2</a><br/>\n";
             }
          }
       }
     }
    }
    ?>
    Konkret sollen weitere Menüpunkte unter "Audio" "Video" usw. aufklappen. Bisher habe ich mich nur in wilden Schleifen und arrays verheddert. (Bin auch noch nicht so fit in php).

    Danke im Voraus.

    jay-ar
    Zuletzt geändert von jay-ar; 08.11.2005, 23:07.

  • #2
    benutze bitte die [php]- statt der [code]-tags zum darstellen von php-code. danke.

    ausserdem ... was spricht dagegen noch eine dritte array-ebene einzubinden?

    die darstellung kannst du ja dann rekursiv machen.

    alternativ wäre eine DB-lösung....
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Hallo Abraxax, Hallo Forum
      Original geschrieben von Abraxax
      benutze bitte die [php]- statt der [code]-tags zum darstellen von php-code. danke.
      Danke. OK, habe ich nachträglich geändert
      ausserdem ... was spricht dagegen noch eine dritte array-ebene einzubinden?
      die darstellung kannst du ja dann rekursiv machen.
      Das suche ich ja, nur bei meinen jetzigen Ansätzen drehe ich mich irgendwie im Kreis. Entweder die Werte im array können nicht zugewiesen werden oder jede dritte Ebene wird so oft gelistet wie es zweite Ebenen gibt usw. Wie schon im ersten Beitrag geschrieben, bin ich wenig erfahren was php angeht.
      alternativ wäre eine DB-lösung....
      Die Alternative kann ich mangels DB leider nicht realisieren.

      Vielleicht kann mir einer von Euch auf die Sprünge helfen.

      Danke

      jay-ar
      Zuletzt geändert von jay-ar; 08.11.2005, 23:13.

      Kommentar


      • #4
        du hast doch hier doch schon ein tolles array aufgebaut ...
        PHP-Code:
        $menuStruct=array(
        "Home"=>array("root"=>$siteRoot."content/Home/index.php"),
        "Programme"=>array("root"=>$siteRoot."content/Prog/prog.php",
           
        "Audio"=>$siteRoot."content/Prog/audio.php",
           
        "Video"=>$siteRoot."content/Prog/video.php",
           
        "Grafik"=>$siteRoot."content/Prog/grafik.php"),
        "AGB"=>array("root"=>$siteRoot."content/AGB/agb.php")
        ); 
        du muss doch nun nur noch z.b. grafik wieder als array anlegen, deine schleifen anpassen und fertig ....
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Hallo Abraxax
          du hast doch hier doch schon ein tolles array aufgebaut
          Danke
          du muss doch nun nur noch z.b. grafik wieder als array anlegen, deine schleifen anpassen und fertig ....
          Das wollte leider noch nicht funktionieren. Na ja, werde mich noch mal reinarbeiten. Vielleicht ist ja nur ein kleiner Denkfehler dabei.

          Danke nochmals

          jay-ar

          Kommentar


          • #6
            Hallo Forum

            nach vielen testen von Schleifen und arrays bin ich nicht weiter gekommen, deshalb möchte ich noch mal um Hilfe bitten.
            Ausgehend von den zwei Dimensionen, möchte ich eine 3 te Ebene in die Navigationsleise integriert wissen. Hier in meiner Datei soll das in Audio geschehen. Dazu habe ich dort ein weiteres array angelegt.
            PHP-Code:
            <?
            $siteRoot="/test/";
            $menuStruct=array(
            "Home"=>array("root"=>$siteRoot."content/Home/index.php"),
            "Programme"=>array("root"=>$siteRoot."content/Prog/prog.php",
               "Audio"=>array("sub"=>$siteRoot."content/Prog/audio.php",
                 "Amarok"=>$siteRoot."content/Prog/Audio/amarok.php",
                 "Totem"=>$siteRoot."content/Prog/Audio/totem.php"),
               "Grafik"=>$siteRoot."content/Prog/grafik.php"),
            "AGB"=>array("root"=>$siteRoot."content/AGB/agb.php")
            );
            foreach ( $menuStruct as $key => $value ) {
               if ( $PHP_SELF == $value['root'] ) {
                  echo "<a class=\"linka1\" href=".$value['root'].">$key</a><br/>\n";
               } else {
                  echo "<a class=\"linka2\" href=".$value['root'].">$key</a><br/>\n";
               }
             foreach ( $value as $key2 => $value2 ) {
               if ( array_search ( $PHP_SELF,$value ) ) {
                  if ( $key2 != "root" ) {
                     if ( $PHP_SELF == $value2 ) {
                        echo "<a class=\"linkb1\" href=".$value2.">$key2</a><br/>\n";
                     } else {
                        echo "<a class=\"linkb2\" href=".$value2.">$key2</a><br/>\n";
                     }
                  }
               }
             }
            }
            ?>
            Hier fängt schon das erste Problem an. Dem Zuweisen eines arrays zu dem Schlüssel "Audio" hat zur Folge, dass der Pfad nicht mehr stimmt
            statt
            http://servername/test/content/Prog/audio.php
            wird ein
            http://servername/test/content/Prog/Array
            gesetzt, da value2 in diesem fall ein komplettes array ist

            Wie kann ich mittels Schleifen es hinbekommen, dass einerseits der Pfad wieder stimmt und andererseits die 3 te Ebene aufklappt. Ich bitte um Vorschläge.

            Danke im Voraus
            jay-ar

            Kommentar


            • #7
              erstelle dir eine rekursive funktion.

              innerhalb der fkt prüfst du ab, ob es sich um ein array handelt. (is_array()) wenn ja, führe die fkt noch einmal aus, mit dem unterarray.

              eine rekursion hat den vorteil .... dass wenn im unterarray wieder ein array ist, die gleiche prüfung auf 'array' erfolgen kann und ein weitere aufruf der fkt stattfinden kann.

              soweit alles klar?
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                Hallo Abraxax
                soweit alles klar?
                Theoretisch schon, damit habe ich mich auch schon rumgequält. Nur viel weiter bin ich auch nicht gekommen. Unten, ab dem Kommentar geht es los.

                PHP-Code:
                <?
                $siteRoot="/test/";
                $menuStruct=array(
                "Home"=>array("root"=>$siteRoot."content/Home/index.php"),
                "Programme"=>array("root"=>$siteRoot."content/Prog/prog.php",
                   "Audio"=>array("sub"=>$siteRoot."content/Prog/audio.php",
                     "Amarok"=>$siteRoot."content/Prog/Audio/amarok.php",
                     "Totem"=>$siteRoot."content/Prog/Audio/totem.php"),
                   "Grafik"=>$siteRoot."content/Prog/grafik.php"),
                "AGB"=>array("root"=>$siteRoot."content/AGB/agb.php")
                );
                foreach ( $menuStruct as $key => $value ) {
                   if ( $PHP_SELF == $value['root'] ) {
                      echo "<a class=\"linka1\" href=".$value['root'].">$key</a><br/>\n";
                   } else {
                      echo "<a class=\"linka2\" href=".$value['root'].">$key</a><br/>\n";
                   }
                 foreach ( $value as $key2 => $value2 ) {
                   if ( array_search ( $PHP_SELF,$value ) ) {
                      if ( $key2 != "root" ) {
                         if ( $PHP_SELF == $value2 ) {
                            echo "<a class=\"linkb1\" href=".$value2.">$key2</a><br/>\n";
                         } else {
                /* diese zeile habe ich entfernt
                            echo "<a class=\"linkb2\" href=".$value2.">$key2</a><br/>\n";
                und folgendes hinzugefügt*/
                        if ( is_array($value2)){
                                        foreach ( $value2 as $key3 => $value3 ) {
                                                echo $value3. "<br/>";
                //bis hierher ist alles noch so wie es sein sollte
                //Ab hier funktioniert gar nichts mehr
                                        if ( array_search ( $PHP_SELF,$value2 ) ) {
                                                if ( $key3 != "sub" ) {
                                                    if ( $PHP_SELF == $value3 )    {
                                              echo "<a class=\"linka3\" href=".$value3.">$key3</a><br/>\n";
                                                           } else {
                                               echo "<a class=\"link3\" href=".$value3.">$key3</a><br/>\n";}
                                                        }
                                                }
                                        }
                                }
                         }
                      }
                   }
                 }
                }
                ?>
                Keine Ahnung woran das liegen könnte.

                jay-ar
                Zuletzt geändert von jay-ar; 11.11.2005, 13:00.

                Kommentar


                • #9
                  du solltest es eigentlich mal rekursiv versuchen .....
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Hallo Abraxax

                    Ich habe einige Beispiele betreffs (array_merge_recursive) gefunden und werde versuchen, dass ich es hinbekomme.
                    Wenn nicht, benötige ich noch mal Hilfe.


                    Danke

                    jay-ar
                    Zuletzt geändert von jay-ar; 11.11.2005, 12:58.

                    Kommentar


                    • #11
                      Hallo
                      Irgendwie geht nichts mehr. Ich habe versucht mich im Erstellen von Funktionen einzuarbeiten. Außer heftigen
                      Kopfschmerzen hat sich nichts getan.
                      Konkret heißt es, dass ich an einen Problem hänge. Eine vorher definierte variable die ist der
                      Funktion nicht mehr bekannt.
                      zum Beispiel.
                      PHP-Code:
                      function test () {
                           
                      print_r ($value);
                      }
                      ///und dann weiter
                      foreach ( $menuStruct as $key => $value ) {
                         
                      test();
                         if ( 
                      $PHP_SELF == $value['root'] ) {
                            echo 
                      "<a class=\"linka1\" href=".$value['root'].">$key</a><br/>\n";
                         } else {
                            echo 
                      "<a class=\"linka2\" href=".$value['root'].">$key</a><br/>\n";
                         }
                       } 
                      das ausführen mittels
                      Code:
                      php -f dateiname.php
                      liefert mir immer den gleichen Fehler
                      Notice: Undefined variable: value in dateiname.php .....

                      Fehlen da irgendwelche Einstellungen oder bin ich heute besonders Erkenntnisresistent.

                      bis morgen

                      jay-ar
                      Zuletzt geändert von jay-ar; 11.11.2005, 12:58.

                      Kommentar


                      • #12
                        Original geschrieben von jay-ar
                        Fehlen da irgendwelche Einstellungen oder bin ich heute besonders Erkenntnisresistent.
                        beide male ja.

                        das sollte dein problem verdeutlichen.
                        PHP-Code:
                        // $_input und $_add sind hier im beispiel integer-zahlen
                        // die 0 ist der default-wert
                        function addieren($_input 0$_add)
                        {
                            
                        // das (int) bewirkt, dass die werte auf jeden fall
                            // zahlen sind/werden
                            
                        return (int)$_input + (int)$_add;
                        }

                        echo 
                        addieren (1025); // ausgabe: 35

                        echo addieren (25); // ausgabe: 25 
                        mehr dazu auch im manual .....
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          Hallo Abraxax

                          Danke für den Wink mit dem Gartenzaun. Jetzt habe ich es in den Grundzügen begriffen. (Hoffe ich zumindest)
                          In meinen Fall ist mir aber immer noch nicht klar, wie ich es realisieren kann.
                          An folgenden Problem hänge ich immer noch fest. Dazu habe ich mal die Navigationsleiste schematisch aufgezeigt.
                          Klicke ich auf Programme erscheint Audio und Grafik.
                          Code:
                          Home
                          Programme
                             Audio
                             Grafik
                          AGB
                          Soweit so gut. Da aber value2 von key2=Audio ein komplettes Array ist, ist dort kein Link vorhanden.

                          Wenn ich nun angebe, dass in diesem Fall (is_array ($value2)) eine Ebene tiefer geschaut werden soll, und der Link
                          $value3 von key3=sub zu benutzen ist , dann poppen beim Klick auf Programme sofort zu den 2ten Ebenen auch alle
                          3ten Ebenen auf. Wie hier gezeigt.
                          Code:
                          Home
                          Programme
                             Audio
                                Amarok
                                Totem
                             Grafik
                                 .
                                 .
                          AGB
                          Klicke ich jetzt auf Amarok, wird brav die richtige Seite angezeigt, nur die Ansicht der Navigationsleiste katapultiert sich in die erste Ebene.

                          Wo liegt mein Denkfehler???? Fragen über Fragen.

                          jay-ar
                          Zuletzt geändert von jay-ar; 11.11.2005, 12:57.

                          Kommentar


                          • #14
                            du hast das prinzip einer rekursion noch nicht verstanden.

                            das ist das , wenn sich eine fkt selber wieder aufruft....

                            PHP-Code:
                            <?php

                            function add_one($_ende 20$_input 0$_durchlauf 1)
                            {
                                
                            // +1 auf den input wert
                                
                            $_input++;

                                
                            // ist das ende erreicht, wird
                                // die anzahl der rekursionen
                                // zurück gegeben
                                
                            if ( $_input == $_ende )
                                    return 
                            $_durchlauf ' durchläufe ';

                                
                            // ansonsten rufe ich die fkt selber mit dem
                                // aktuellen input-wert wieder auf <REKURSION>
                                // und gebe den wert zurück.
                                // die rückgabe erfolgt entsprechend auch über
                                // die 'ebenen', wieoft die fkt intern wieder
                                // aufgerufen wurde.
                                
                            return add_one($_ende$_input$_durchlauf+1);
                            }

                            echo 
                            add_one(); // ausgabe: 20 durchläufe

                            echo add_one(10); // ausgabe: 10 durchläufe

                            echo add_one(103); // ausgabe: 7 durchläufe

                            ?>
                            [color=red]aber vorsicht ... ist deine abbruchbedingung fehlerhaft, läuft der aufruf einer solchen fkt endlos und du musst ggfls den apache neu starten![/color]


                            ps. und brich mal wieder oben deinen code um, damit ich nicht immer scrollen muss.
                            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                            Kommentar


                            • #15
                              Hallo Abraxax

                              1. Danke, dass Du Dir so viel Mühe gibst, einem DAU wie mir das zu erklären.
                              2. Der Groschen ist gerutscht, was die rekursive Funktion angeht.
                              3. Scrollbewegung ab sofort nur noch vertikal.


                              Ich mache mir jetzt mal einen vernünftigen PAP dazu, und hoffe, dass ich
                              es für mein Problem angewendet bekomme.

                              jay-ar

                              PS: Sollte ich nicht weiterkommen..... na,ja Du kennst ja das Spielchen.

                              Kommentar

                              Lädt...
                              X