Rekursives Menü

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

  • Rekursives Menü

    Hallo,

    habe mir ein Rekursives Menü gebaut welches nicht ganz so funktioniert wie ich es wollte.
    Ansich geht das Menü ja schon recht gut, hier kann man es begutachten Menü

    Mein Problem ist nur noch das auf- und zuklappen einzelner Menüpunkte!
    Zurzeit ist es so dass sich das Menü in der ersten Hauptkategorie also bei Dichtungstechnik und
    Chemisch-technische Produkte voll aufklappt,
    bei Industriefarben und Beschichtungen soll es sich wie es jetzt ist bis zur zweiten Subnav aufklappen.
    Und wenn ich dann auf eine dieser Subnav's klicke soll sich nur diese Unterkategorie aufklappen.
    Was es aber nicht macht, es klappen alle auf.

    Und ich blick echt nicht mehr durch wie ich es anstellen soll dass es geht.

    Hier mal der Quelltext:
    Bin noch nicht dazu gekommen ihn zu Kommentieren.
    PHP-Code:
    function testrek($id,$pos,$do="no",$kat=0,$sub=0)
    {
        
    //Hier werden die per Get übergebenen Werte Variablen zugewiesen
        
    $clicked=$_GET['clicked'];
        
    $katid=$_GET['katid'];
        
    $hkat=$_GET['hkat'];
        
    $skat=$_GET['skat'];
        
        
        
    //Hier wird überprüft ob die Variable für die Hauptkatekorie gesetzt ist
        //falls ja dann wird ihr Wert der $katid vari zugewiesen    
        
    if(isset($hkat))
            
    $katid $hkat;
        
    //Hier werden die Daten aus der DB geholt    
        
    $query=mysql_query("SELECT * FROM `produktcms_kat` WHERE subkat='$id' ORDER by rang");
        while(
    $kat=mysql_fetch_array($query))
        {
            
    //prüfe ob Hauptkategorien ausgelesen werden sollen und die Subkat gleich 0 ist also
            //eine Hauptkategorie
            
    if($do=='yes' && $kat[subkat]==0)
            {
                
    //Hier werden die Hauptkategorien ausgegeben
                
    print '<table width="212" border="0" cellspacing="0" cellpadding="2">'
                print 
    '<tr><td width="16" bgcolor="#C7D6F1"';
                if(
    $katid!=$kat[katid]) print ' class="linesubnav"';
                print 
    '><img src="img_allg/icon_subnav.gif" width="16" height="8" border="0"></td>';
                print 
    '<td align="left" bgcolor="#C7D6F1"';
                if(
    $katid!=$kat[katid]) print  ' class="linesubnav"';
                
    //Hier werden die Katid und Subkat_id an die URL gehängt, die clicked Variable 
                //wird benötigt damit sich das Menü nicht gleich komplett aufbaut!
                
    print '><a href="produkte_uebersicht.php?katid='.$kat[katid].'
                        &skat='
    .$katid.'&clicked=1&subkat='.$kat[subkat].'" class="subnav">';
                print  
    $kat[bezeichnung].'</a></td><tr></table>';
                
    //Hier wird geprüft ob sich das Menü aufklappen soll und welches!
                
    if($clicked==&& $kat == || $katid==$kat[katid] || $hkat==$kat[katid])
                {
                    
    //Hier wird ausgwertet wie sich die einzelnen Menüs verhalten sollen
                    
    switch($kat[katid])
                    {
                        
    //die letzte 1 bedeutet dass sich diese Menü komplett aufklappen soll
                        
    case 100testrek($katid,$pos+3,"no",0,1); 
                            break;
                        case 
    101testrek($katid,$pos+3,"no",0,0);
                            break;
                        case 
    102testrek($katid,$pos+3,"no",0,1);
                            break;
                        default:
                    }
                    
                }
            }
            else
            {    
    //falls die 1 übergeben wurde und die Hauptkategorie nicht gleich 101 ist dann zeige
                //das komplette Menü
                
    if($sub==&& $hkat!=101)
                {
                    print 
    '<table width="212" cellpadding="1" border="0" cellspacing="0" bgcolor="#C7D6F1">';
                    print 
    '<tr valign="top">';
                    echo 
    linie($pos,"<td>&nbsp</td>");
                    print 
    '<td width="17" align="right" valign="top">';
                    print 
    '<img src="img_allg/icon_subnavkl.gif" width="12" height="10" border="0"></td>';
                    print 
    '<td width="189" align="left">
                            <a href="produkte_uebersicht.php?katid='
    .$kat[katid].'
                            &hkat='
    .$katid.'&clicked='.$pos.'&subkat='.$kat[subkat].'" class="subnavkl">
                            '
    .$kat[bezeichnung].'</a></td>';
                    print 
    '</tr>';
                    print 
    "</table>\n";
                    
    //Rekursion starten
                    
    testrek($kat[katid],$pos+3,"no",1,1);
                }
                else
                {
                    
    //wenn nicht die 1 übergeben wurde dann kommt jetzt die ausgabe der SubSubNav                            
                    
    if($kat!=1)
                    {
                                    
                        print 
    '<table width="212" cellpadding="1" border="0" cellspacing="0" bgcolor="#C7D6F1">';
                        print 
    '<tr valign="top">';
                        echo 
    linie($pos,"<td>&nbsp</td>"); 
                        print 
    '<td width="17" align="right" valign="top">';
                        print 
    '<img src="img_allg/icon_subnavkl.gif" width="12" height="10" border="0"></td>';
                        print 
    '<td width="189" align="left">
                                <a href="produkte_uebersicht.php?katid='
    .$kat[katid].'
                                    &hkat='
    .$katid.'&clicked='.$pos.'&subkat='.$kat[subkat].'" class="subnavkl">
                                    '
    .$kat[bezeichnung].'</a></td>';
                        print 
    '</tr>';
                        print 
    "</table>\n";
                        
    //wenn die übergebene Position <= 3 ist dann wird die Rekursion gestartet,
                        //somit wird das Menü nur bis zur zweiten SubNav aufgebaut.
                        //oder wenn auf einen SubNav Menüpunkt geklickt wurde und dieser >=6 übergeben hat
                        //dann wird auch die Rekursion gestart und die restlichen SubNav's werden angezeigt 
                        
    if(($pos<=|| $clicked>=6) && $sub!=1)
                           {
                               
    testrek($kat[katid],$pos+3,"no",1,0,6);
                           }
                           
                                                   
                    }
                    
                }
                
            }
            
        }
        

    Die Struktur der Datenbank sieht so aus:

    Katid Subkat Bezeichnung aktiv rang
    100 0 Menü1 j 10
    101 0 Menü2 j 10
    102 0 Menü3 j 10
    103 100 UMenü j 5
    104 103 ......
    usw.
    Zuletzt geändert von BasicAvid; 18.11.2005, 07:05.
    include("./BasicAvid.inc.php");
    echo "Use it or be used!";

  • #2
    Re: Rekursives Menü

    Regeln lesen und umsetzen bitte, danke.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Tut mir echt leid! Musste schnell gehen, und in der eile hab ich das ganz vergessen!
      include("./BasicAvid.inc.php");
      echo "Use it or be used!";

      Kommentar


      • #4
        ... und? änderst du nun, oder soll ich den Thread schliessen?

        Kommentar


        • #5
          Also besser geht es nicht! Ich hoffe mal es passt jetzt. Ich habe mir die Regeln durchgelesen und so wie es jetzt ist muss es passen.
          Bei mir kommen ja keine Fehler usw. und die Kommentiert habe ich ihn auch!
          include("./BasicAvid.inc.php");
          echo "Use it or be used!";

          Kommentar

          Lädt...
          X