Menü - Link aktivieren

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

  • Menü - Link aktivieren

    Hallo,
    das Menü:
    PHP-Code:
    error_reporting(E_ALL);

    $s basename($_SERVER['SCRIPT_NAME']);
    //basename extrahiert den Namen einer Datei aus einem Pfad
    echo OMList($s);
    function 
    OMList($site) {
      
    $site str_replace('''',$site);

    $menu 'language/de.csv';
     
      
    $cr chr(13).chr(10);
      
    $nav '<ul class="listmenu">'.$cr;
      
    $li 0
      
    $dat file($menu);

     for(
    $i=0$i<count($dat); $i++) {
        
    $x explode('|',trim($dat[$i]));
        if(
    $x[0]) {
          
    $link $x[0]; 

          
    $s $x[1];
                
          
    $level 0;
          while (
    strpos($link,'-') === 0) {
            
    $level++; 
            
    $link substr($link,1);
          }
          if(
    $level $li+2) {
            if(
    $level <= $li && $i>0) {
              
    $nav .= '</li>'.$cr;
            }
            if(
    $level $li) {
        
              
    $li++; $nav .= '<ul>'.$cr;
            }
            while (
    $level $li) {
              
    $li--; $nav .= str_repeat('  '$li+1).'</ul></li>'.$cr;
            }
                    
            
    $nav .= str_repeat('  '$li+1);
                

    $seite $site;
     
          if(
    $s == $seite) {

                   
    $ul $li;
                
             while((
    $p strripos($nav'<ul>')) && $ul) {
        
                
    $ul--;
        
                
    $plink strripos(substr($nav,1,$p),'<a href=');

                            
    $nav substr($nav0$p+3).' title="'.$link.'" class="active"'.substr($nav$p+3);
                          }
                            
    $nav .= '<li class="active"><span>'.$link.'</span>';
                             
                          }
            else 
                            {
                            
    $nav .= '<li><a href="';
                            
    $nav .= ''$s .'" title="'.$link.'">'.$link.'</a>';
                         }
                    }   
                }
      }
     
      
    $nav .= '</li>'.$cr;
      while (
    $li) {
        
    $li--; $nav .= str_repeat('  '$li+1).'</ul></li>'.$cr;
      }
        
    $nav .= '</ul>'.$cr;
      return 
    $nav;

    aktiviert mir momentan nur den Link, dieser angeklickt ist:
    HTML-Code:
    <ul class="listmenu">
    
      <li>
        <a href="xxx" title="xxx">xxx</a>
        <ul title="xxx" class="active">
        <li>
        <a href="xxx" title="xxx">xxx</a></li>
        <li class="active"><span>xxx</span></li>
      </ul></li>
    
    </ul>
    wünschenswert wäre aber diese Form, dass die Oberkatergorie auch aktiviert ist:
    HTML-Code:
    <ul class="listmenu">
    
      <li>    <ul title="xxx" class="active">
        <a href="xxx" title="xxx">xxx</a>
        <li>
        <a href="xxx" title="xxx">xxx</a></li>
        <li class="active"><span>xxx</span></li>
      </ul></li>
     
    </ul>
    bitte um Hilfe.
    vielen Dank im voraus
    schischi

  • #2
    Hast du eine Frage? Wo liegt dein Problem?

    Kommentar


    • #3
      @tobiaZ Hab ich mich undeutlich ausgedrückt??

      bei dem Menü, werden nur einzelne Links aktiviert, ich hätte gerne das auch
      die Kategorie darüber aktiviert ist.

      z. B.:

      <aktiviert>Rockoper
      Hamlet
      <aktiviert>Faust

      ist das verständlicher?

      danke

      Kommentar


      • #4
        Hallo,

        ich habe es zwar verstanden (TobiaZ sicherlich auch), aber es scheint, als verlangst du von deinen Helfern, sich durch deinen unkommentierten und unformatierten (Einrückungen!) Code zu quälen und dir darin den Fehler zu korrigieren. Das wird nicht passieren.

        Wenn du konkretere Fragen stellst und etwas übersichtlicheren, nachvollziehbaren Code präsentierst, könnte das schon anders aussehen.

        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Ack

          Kommentar


          • #6
            @AmicaNoctis u. @tobiaZ entschuldigung für den schlecht formatierten code! ich hoffe, so sieht er leserlicher aus.

            PHP-Code:
            $s basename($_SERVER['SCRIPT_NAME']);
            //basename extrahiert den Namen einer Datei aus einem Pfad
            echo OMList($s);


            function 
            OMList($site) {
            // wer oder was ist $site?
              
            $site str_replace('.php','',$site);
            //csv datei mit den menuelinks
              
            $menu 'language/de.csv';
              
            $cr chr(13).chr(10);
              
            $nav '<ul class="listmenu">'.$cr;
              
            $li 0$dat file($menu);

              for(
            $i=0$i<count($dat); $i++) {
                
            $x explode('|',trim($dat[$i]));
                if(
            $x[0]) {
                  
            $link $x[0]; $s $x[1];
                  
            $level 0;
                  while (
            strpos($link,'-') === 0) {
                    
            $level++; $link substr($link,1);
            // var_dump($link); gibt hier die Unterkategorien aus
                  
            }
                  if(
            $level $li+2) {
                    if(
            $level <= $li && $i>0) {
                      
            $nav .= '</li>'.$cr;
                    }
                    if(
            $level $li) {
                      
            $li++; $nav .= '<ul>'.$cr;
                    }
                    while (
            $level $li) {
                      
            $li--; $nav .= str_repeat('  '$li+1).'</ul></li>'.$cr;
                    }
                    
            $nav .= str_repeat('  '$li+1);
                    if(
            $s == $site) {
                      
            $ul $li;
                        while((
            $p strripos($nav'<ul>')) && $ul) {
                        
            $ul--;
                        
            $plink strripos(substr($nav,0,$p),'<a href=');
                        
            $nav substr($nav0$p+3).' title="'.$link.'" class="active"'.substr($nav$p+3);
                      }
                      
            $nav .= '<li class="active"><span>'.$link.'</span>';
                    }
                    else {
                      
            $nav .= '<li><a href="';

                      
            $nav .= ''$s .'.php" title="'.$link.'">'.$link.'</a>';
            // var_dump($s); gibt den href namen aus
            // var_dump($link); gibt den link namen aus
                    
            }
                  }
                }
              }
              
            $nav .= '</li>'.$cr;
              while (
            $li) {
                
            $li--; $nav .= str_repeat('  '$li+1).'</ul></li>'.$cr;
              }
              
            $nav .= '</ul>'.$cr;
              return 
            $nav;

            mit dem kommentieren hab ich noch Probleme, hoffe es ist entschuldigt!

            Wie kann man nun das Script ändern, dass wenn eine Kategorie eine Unterkategorie vorweist beides aktiviert wird?

            Kommentar


            • #7
              Wie sieht denn diese CSV-Datei aus? Ich entnehme dem Code, dass da irgendwie mit Bindestrichen gearbeitet wird, um die Tiefe der Levels zu kennzeichnen.

              Aber auch das ist schon wieder so ein Punkt. Warum bist du nicht in der Lage, solche essentiellen Informationen von alleine darzulegen, statt uns hier sinnlos ins Blaue raten zu lassen?

              Statt den Code zu präsentieren, wäre es sinnvoller, den Algorithmus dahinter zu erklären, dann kann man viel leichter Denkfehler darin ausmachen und eliminieren und natürlich vor allem erstmal das Prinzip erkennen, das sich dahinter verbirgt oder mal verbergen soll.

              Es ist halt schwer, aus mittelschlechtem Code rauszulesen, wofür er da ist, vor allem ohne Kenntnis der Daten, auf denen er operiert. Hoffe, das ist jetzt angekommen.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                @AmicaNoctis, das ist richtig es wird mit Spiegelstrich gearbeitet und sorry wegen den fehlenden Daten um es zu vereinfachen! werde mich bemühen in diesem Forum hilfreicher zu sein.

                Jede Menüebene ist mit einem Spiegelstrich gekennzeichnet
                Ebene 0 ist die Wurzel und hat keinen Spiegelstrich
                - Ebene 1 hat einen (1) Spiegelstrich und ist die 1. Unterebene

                Die csv:
                Code:
                Aktuell|aktuell.php
                Home|home.php
                Rockoper|javascript:void(0)
                -Faust|faust.php
                -Hamlet|hamlet.php
                Zuletzt geändert von schischi; 21.10.2010, 04:24.

                Kommentar


                • #9
                  Hallo.

                  Ich habe mir die Mühe gemacht, mir den Code anzusehen, den CSS-Bereich zu erweitern (sonst sieht man nämlich gar nix) und auch eine CSV mit dem Menü habe ich erstellt.

                  Zuerst einmal funktioniert das so schon mal gar nicht, denn so wie die CSV aufgebaut ist, ist es nicht mit Deinem Skript "kompatibel". Durch die Zeile

                  PHP-Code:
                            $nav .= ''$s .'.php" title="'.$link.'">'.$link.'</a>'
                  erhält der jew. Skriptname immer noch ein ".php" ans Ende gepappt, wodurch sich Namen wie faust.php.php und hamlet.php.php ergeben.
                  Also muss das ".php" weg.

                  Das reicht aber nicht, denn durch diese Änderung funktioniert

                  PHP-Code:
                          if($s == $site) { 
                  nicht mehr, denn in $site steht nun der Skriptname ohne ".php". Deshalb hängen wir's an

                  PHP-Code:
                          if($s == $site ".php") { 
                  und das Skript funktioniert erst einmal so, wie Du es beschrieben hast.

                  Ich vermute mal, dass Deine CSV anders aufgebaut ist oder Dein Skript schon anders aussieht, als Du's hier beschrieben hast, denn ansonsten hättest Du schon viel früher gemerkt, dass etwas grundsätzlich fehlerhaft ist.

                  Wie dem auch sei.

                  *phew*

                  Nun aber zu Deinem eigentlichen Problem, denn das habe ich erst verstanden, als ich das Skript korrekt ausführen konnte und gesehen habe, was überhaupt passiert.

                  Das zeigt (uns da muss ich den MODs Recht geben), dass man zwar versuchen muss, den prüfenden Quellcode so klein wie möglich zu halten ("Auf den Punkt bringen!"), aber trotzdem alles mitliefern muss, damit das jew. Skript überhaupt startbar ist und der Tester/Helfer das sieht, was Du siehst.

                  So. Das Problem ist, dass bspw. beim Klick auf den Menüpunkt "Hamlet" der HTML-Code für die Kategorie (hier: "Rockoper") bereits erstellt wurde.

                  Die Schwierigkeit liegt also darin, nachträglich den Code zu ändern. Es gibt nun zwei Möglichkeiten, wie man's machen könnte:

                  1. Möglichkeit
                  An der Stelle, an der Du erkennst, dass Du eine Kategorie abarbeitest, fügst Du dem Link einen Platzhalter hinzu. (bspw. %CSS%)
                  Kommst Du nun in den Block, in dem

                  PHP-Code:
                          if($s == $site ".php") { 
                  gegriffen hat, ersetzt Du %CSS% durch die CSS-Anweisung, also bspw. class="active".

                  Am Ende des Skripts (idealerweise direkt vor der Ausgabe) ersetzt Du alle übrig gebliebenen Platzhalter durch "":

                  PHP-Code:
                          $nav str_replace("%CSS%"""$nav); 
                  2. Möglichkeit
                  Du fängst in der Datei nicht oben an, sondern unten. Sobald Du erkennst, dass das aktuelle Skript das ist, das auch im Menü aktiviert ist, setzt Du Dir eine Markierung (bspw. $active_kat = TRUE) und fügst beim Erstellen der jew. Kategorie den bereits genannten CSS-Code ein, indem Du den Zustand von $active_kat abfragst. (Nicht vergessen, $active_kat wieder auf FALSE zu setzen!)


                  Ich hoffe, ich konnte Dir helfen. Du kannst ja darüber berichten, ob (und wie) Dein Menü läuft...

                  cya

                  Kommentar


                  • #10
                    @sallow2001, ein dickes Lob an dich, dass du dir soviel Mühe machst.
                    ich hab das menü mal soweit gebracht um dies online(die seite selbst ist noch in process) zu stellen, dennoch hab ich das Problem mit dem aktivieren, hab aber auch noch nicht deine 2 Möglichkeiten angewendet!
                    Ist ja nur zum besseren Verständnis.

                    danke nochmal
                    schischi
                    Zuletzt geändert von schischi; 21.10.2010, 17:54.

                    Kommentar


                    • #11
                      dennoch hab ich das Problem mit dem aktivieren,
                      Welches könnte das nun schon wieder sein? *rat*

                      Kommentar


                      • #12
                        @TobiaZ immernoch das gleiche siehe Nachricht #3!
                        wusste nicht, dass man das immer wieder hinzuschreiben muss, da das Thema schon so heisst.

                        Kommentar


                        • #13
                          Nochmals: Wir lösen hier konkrete Probleme! sallow2001 hat sich viel mühe gegeben und dir eine recht anschauliche Lösung konkret auf dein Vorhaben geschneidert. Du kannst sie nicht umsetzen, das habe ich verstanden, woran du nun konkret scheiterst, was du bisher versucht hast, etc. kann ich leider nicht erkennen. Deshalb habe ich abermals konkret nachgefragt, woran du scheiterst.

                          Ich werd mich erstmal aus dem Aktiven ausklinken, wenn der Thread keine Fortschritte macht, wird er nachträglich nach Projekthilfe verschoben, dort kannst du auch erwarten, dass jemand den Code für dich schreibt.

                          Kommentar


                          • #14
                            Nun hab ich beim Urheber des Scriptes nachgefragt und dieser erlaubt mir leider nicht etwas am Code zu ändern, man tut mir das leid um swallow2001, der sich so viel Mühe gegeben hat. Ich bitte vielmals um Entschuldigung.

                            Kommentar


                            • #15
                              Zitat von schischi Beitrag anzeigen
                              Nun hab ich beim Urheber des Scriptes nachgefragt und dieser erlaubt mir leider nicht etwas am Code zu ändern, man tut mir das leid um swallow2001, der sich so viel Mühe gegeben hat. Ich bitte vielmals um Entschuldigung.
                              OffTopic:
                              Darf man erfahren, wer das ist? Falls der mal hier Forum um Hilfe bittet.


                              Peter
                              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                              Meine Seite

                              Kommentar

                              Lädt...
                              X