Probleme mit Menübaum, bzw. "versteckten" Links

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

  • Probleme mit Menübaum, bzw. "versteckten" Links

    Hi Leute,

    ich bin leider ein ziemlicher Neuling im Bereich PHP. Vor kurzem habe ich mir ein Script für einen "Menü - Baum" aus dem Internet geladen und entsprechend angepasst. Das Menü läuft auch einwandfrei, alle Punkte werden angezeigt / aufgeklappt etc.

    Aber ich habe ein Problem : Ich möchte unter dem Submenüpunkt "Songtexte & Sounds" eine Site einrichten wo diverse Songtexte von A - Z angesehen werden können. Solange sich der User auf der Site "songtexte.php" befindet wird der Menpunkt "Discographie" aufgeklappt dargestellt. Sobald aber der User einen Songnamen aus der Übersicht auswählt um auf die Site mit dem Text zu gelangen klappt "Discographie" wieder zu, weil ja der jeweilige Songtext nicht über die Hauptnavigation erreichbar ist, sondern nur über die "Songtexte.php" - Site.
    Wie kann ich erreichen, dass der Menüpunkt aufgeklappt bleibt, selbst wenn der User auf eine Site "springt" die nicht über das Hauptmenü erreichbar ist ?

    Habe unten meinen kompletten Code eingefügt. Dieser befindet sich in der Datei menue.inc und wird per "Include" in die einzelnen Sites eingefügt.

    Ich habe schon ziemlich viel gegoogelt und auch in diesem und anderen Foren gesucht. Da sich diese Frage aber nicht mit einem Schlagwort definieren lässt wurde ich leider nicht fündig. Mir ist auch kein Befehl bekannt, über den ich googeln könnte um eine Lösung zu finden.

    Wäre super, wenn mir jemand helfen könnte und erklären kann wie eine entsprechende Lösung aussehen muss oder zumindest den Befehl kennt den ich googeln könnte. Bin, wie gesagt ein absoluter "Dummie" was PHP angeht, da ich erst begonnen habe es zu lernen.

    Vorab schon einmal vielen Dank für Eure Hilfe und liebe Grüße

    Diablo


    PHP-Code:

    <?php

    $menu 
    = array (

    "HOME" => array ("home.php"),
    "NEWS" => array ("news.php"),
    "TERMINE" => array ("termine.php"),

    "DISCOGRAPHIE" => array ("discographie.php",
    "Songtexte & Sounds" => "songtexte.php",
    "CD - Kritiken" => "cdkritiken.php"),

    "BIOGRAPHIE" => array ("biographie.php",
    "Vita" => "vita.pdf"),

    "LINKS" => array ("links.php"),
    "KONTAKT" => array ("kontakt.php"),
    "BOOKING" => array ("bookings.php"),
    "IMPRESSUM" => array ("impressum.php")

    );

    ?>

    <?php

    $uri 
    basename(getenv("REQUEST_URI"));

    foreach(
    $menu as $main => $mainlink){
    foreach(
    $mainlink as $sub =>$sublink){
    $x count ($mainlink);

    if(
    $sub[0] == "" && $mainlink[0] == $uri && $x 1) {
    echo 
    "<div class=\"menue\"><a class=\"navigation\">$main</a></div>";
    }

    else
    if(
    $sub[0] == "" && $mainlink[0] == $uri && $x == 1) {
    echo 
    "<div class=\"menue\"><a class=\"navigation\">$main</a></div>";
    }

    else
    if(
    $sub[0] == "" && $x 1) {
    echo 
    "<div class=\"menue\"><a class=\"navigation\" href=\"$mainlink[0]\"> $main</a></div>";
    }

    else
    if(
    $sub[0] == "" && $x == 1) {
    echo 
    "<div class=\"menue\"><a class=\"navigation\" href=\"$mainlink[0]\"> $main</a></div>";
    }

    else
    if(
    $mainlink[0] == $uri) {
    echo 
    "<div class=\"menue\" style=\"margin-top: 0px\"><a class=\"navigation_u\" href=\"$sublink\"> $sub</a></div>";
    }

    if(
    array_search($uri,$mainlink)&& $sub[0] != ""){
    if(
    $uri == $sublink){
    echo 
    "<div class=\"menue\" style=\"margin-top: 0px\"><a class=\"navigation_u\"> $sub</a></div>";
    }

    else{
    echo 
    "<div class=\"menue\" style=\"margin-top: 0px\"><a class=\"navigation_u\" href=\"$sublink\"> $sub</a></div>";
    }

    }
    }
    }
    ?>

  • #2
    Ehm.. Rekursion?
    Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

    Kommentar


    • #3
      Hi,
      vielen Dank für den Tipp. Also, ich habe eine Funktion übernommen und versucht für meine Zwecke anzupassen. Aber es funktioniert nicht so richtig.
      Die Funktion zählt jetzt einfach alle Sites die im Hauptverzeichnis liegen auf, aber eigentlich möchte ich ja, dass einfach nur der Menüpunkt "Discographie" aufgeklappt bleibt, selbst wenn ich einen Link auswähle der nicht im Menüpunkt "Discographie" enthalten ist.

      Sollte also so aussehen :

      - Discographie (Mainlevel)
      - Songtexte & Sounds (Sub) --> und hier geht ein Link ab, der nicht unter "Discographie" zu finden ist, sondern nur über "Songtexte..." erreichbar.

      Das Problem, sobald man diesem Link folgt und sich die neue Site öffnet klappt "Discographie" wieder zu, sollte aber eigentlich offen bleiben, damit man sich weiterhin in diesem Menüpunkt bewegen kann.

      Habe meinen Code folgendermaßen erweitert, weiß aber nicht ob diese Funktion überhaupt für mein Problem geeignet ist, bzw. wie ich sie so anpassen kann / muss, dass sie wie oben beschrieben funktioniert.

      Vielleicht hat jemand eine Lösung, ich bin langsam am verzweifeln weil ich seit Tagen nach einer Möglichkeit suche...:-(

      Hier der neue Code

      PHP-Code:

      <?php

      $menu 
      = array (

      "HOME" => array ("home.php"),
      "NEWS" => array ("news.php"),
      "TERMINE" => array ("termine.php"),

      "DISCOGRAPHIE" => array ("discographie.php",
      "Songtexte & Sounds" => "songtexte.php",
      "CD - Kritiken" => "cdkritiken.php"),

      "BIOGRAPHIE" => array ("biographie.php",
      "Vita" => "vita.pdf"),

      "LINKS" => array ("links.php"),
      "KONTAKT" => array ("kontakt.php"),
      "BOOKING" => array ("bookings.php"),
      "IMPRESSUM" => array ("impressum.php")

      );

      ?>

      <?php
          
      function get_dir ($dir)
                   {
          
      $fp=opendir($dir);
          while(
      $datei=readdir($fp))
                   {

               if (
      is_dir("$datei") && $datei!="." && $datei!="..") {echo "$datei";}

               else {echo 
      $datei."";}
              }
          
      closedir($fp);
              }
      ?>

      <?php get_dir("../neu/"); ?>

      <?php

      $uri 
      basename(getenv("REQUEST_URI"));

      foreach(
      $menu as $main => $mainlink){
      foreach(
      $mainlink as $sub =>$sublink){
      $x count ($mainlink);

      if(
      $sub[0] == "" && $mainlink[0] == $uri && $x 1) {
      echo 
      "<div class=\"menue\"><a class=\"navigation\">$main</a></div>";
      }

      else
      if(
      $sub[0] == "" && $mainlink[0] == $uri && $x == 1) {
      echo 
      "<div class=\"menue\"><a class=\"navigation\">$main</a></div>";
      }

      else
      if(
      $sub[0] == "" && $x 1) {
      echo 
      "<div class=\"menue\"><a class=\"navigation\" href=\"$mainlink[0]\"> $main</a></div>";
      }

      else
      if(
      $sub[0] == "" && $x == 1) {
      echo 
      "<div class=\"menue\"><a class=\"navigation\" href=\"$mainlink[0]\"> $main</a></div>";
      }

      else
      if(
      $mainlink[0] == $uri) {
      echo 
      "<div class=\"menue\" style=\"margin-top: 0px\"><a class=\"navigation_u\" href=\"$sublink\"> $sub</a></div>";
      }

      if(
      array_search($uri,$mainlink)&& $sub[0] != ""){
      if(
      $uri == $sublink){
      echo 
      "<div class=\"menue\" style=\"margin-top: 0px\"><a class=\"navigation_u\"> $sub</a></div>";
      }

      else{
      echo 
      "<div class=\"menue\" style=\"margin-top: 0px\"><a class=\"navigation_u\" href=\"$sublink\"> $sub</a></div>";
      }

      }
      }
      }
      ?>

      Kommentar


      • #4
        Mal kurz so als Frage... du hast dir aber schon durchgelesen was Rekursion eigentlich is ne? Du verwendest Sie nämlich nirgendwo. Tipp falls du das mit der Rekursion hinbekommen hast: Verwende eine Variable (bestenfalls ein Array) um den Elter-Pfad zu speichern. Denk mal drüber nach

        Sicherlich haben mehrere hier eine Lösung für dein Problem, aber besser ist allenfalls, dass du da von alleine drauf kommst.
        Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

        Kommentar


        • #5
          Hi,

          das ist eben genau mein Problem. Ich habe heute zum ersten Mal von Rekursionen gehört und mir einiges dazu durchgelesen. Aber PHP ist für mich noch zu komplex, um es wirklich zu verstehen.

          Ich lerne gerade PHP und kann einige kleinere Sachen (Formulare etc.) auch schon realisieren.

          Hilfe für das oben genannte Problem suche ich ja gerade deshalb, weil ich es momentan noch nicht selbst lösen kann, aber relativ schnell eine Lösung brauche...wenn es nicht eilen würde wäre es für mich kein Problem so lange zu basteln bis es passt, aber die Menüstruktur wird schnell gebraucht, daher muss ich schnellstmöglich eine Lösung finden.

          Vielleicht hat ja jemand Mitleid und hilft mir auf die Sprünge ;-)

          Ich wäre jedenfalls dankbar...:-)

          LG,
          Diablo

          Kommentar


          • #6
            OffTopic:
            Wenigstens biste jemand der nicht gleich ausrastet wenn er im ersten Post keine vorgelegte Lösung findet.


            Also, Rekursion bedeutet kurzgesagt, dass du eine Funktion hast, die sich selbst wieder aufruft. Ich schreib dir mal kurz den logischen Ablauf auf und hoffe, dass dir das ein Wenig weiterhilft.
            [list=1][*]Die oberste Ebene des Menüs wird ausgegeben. Ist dein Pfad nur 1 Lang (also nur eine Seite im Array enthalten z.B.) brauchst du garkeine Unterseiten ausgeben lassen.[*]Ist dein Pfad länger als 1, dann rufst du die anzeigefunktion an Stelle der ersten Position des Pfades wieder auf, undzwar mit dem entsprechenden Menüpunkt als geforderte Ebene.[*]Ist dein Pfad jetzt immernoch länger als 2, dann lässt du an Position[obersteEbene][zweiteEbene] die Dritte ausgeben. Folgend verfährst du analog hierzu.[/list=1]

            Darauf wie du den Pfad aufbauen musst kommst du denke ich mal grade noch selber.

            Hint: Von unten nach oben aufbauen! (und ggf. )array_reverse() verwenden um das Array umzudrehen.

            Viel Erfolg.
            Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

            Kommentar

            Lädt...
            X