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.
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.
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==1 && $kat == 1 || $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 100: testrek($katid,$pos+3,"no",0,1);
break;
case 101: testrek($katid,$pos+3,"no",0,0);
break;
case 102: testrek($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==1 && $hkat!=101)
{
print '<table width="212" cellpadding="1" border="0" cellspacing="0" bgcolor="#C7D6F1">';
print '<tr valign="top">';
echo linie($pos,"<td> </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> </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<=3 || $clicked>=6) && $sub!=1)
{
testrek($kat[katid],$pos+3,"no",1,0,6);
}
}
}
}
}
}
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.
Kommentar