| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
Rekursions Problem
Diskussion: Rekursions Problem im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige
Hallo zusammen,
ich habe ein Menü welches durch Rekursion aufgebaut wird, die Daten werden aus einer MySQL Datenbank geholt. ...
 |
02.11.05, 10:00
|
#1 (permalink)
|
Registriert seit: 17.03.04 Likes: 2 | Rekursions Problem Anzeige Hallo zusammen,
ich habe ein Menü welches durch Rekursion aufgebaut wird, die Daten werden aus einer MySQL Datenbank geholt. Mein Problem ist jetzt, dass wenn ich auf einen der Hauptmenüpunkte klicken sich alle anderen Menüs auch aufmachen. Was nicht sein sollte. Ich habe es zwar schon geschafft das sich nur das jeweilige Menü aufmacht, nur dann werden nicht mehr alle Subkategorien ausgelesen.
Kann ich eine Rekursion irgendwie Steuern? Sprich, dass ich sage nur bis dahin und nicht weiter und dann wenn ich auf den anderen Menüpunkt klicke sich dieses aufmacht!??
Hier mal der Code: PHP-Code: function getSubnav($sub_id, $pos=0, $selected_id="",$katid="",$subkat="") { $alle_kategorien=mysql_query("SELECT * FROM produktcms_kat WHERE subkat='$sub_id' ORDER BY rang"); while($kat=mysql_fetch_array($alle_kategorien)) { if($sub_id == 0) { print '<table width="212" border="0" cellspacing="0" cellpadding="2">'; print '<tr><td width="16" bgcolor="#C7D6F1"'; if($katid!=$kat[katid] || $subkat==$kat[subkat]) 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] || $subkat==$kat[subkat]) print ' class="linesubnav"'; print '><a href="produkte_uebersicht.php?katid='.$kat[katid].'&show=1&subkat='.$kat[subkat].'" class="subnav">'; print $kat[bezeichnung].'</a></td><tr></table>'; } else { if($_GET['show']==1 || $katid==$kat[subkat] && $subkat==$katid) { print '<table width="212" cellpadding="1" border="0" cellspacing="0" bgcolor="#C7D6F1">'; print '<tr valign="top">'; echo linie($pos,"<td width='10'></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].'&show=1&subkat='.$kat[subkat].'" class="subnavkl">'.$kat[bezeichnung].'</a></td>'; print '</tr>'; print "</table>\n"; } } getSubnav($kat[katid],$pos+1,"",$kat[katid],$kat[subkat]); } }
So hab ich es jetzt gelöst! Es würde auch schon fast funktionieren. Das einzige was jetzt noch nicht funzt ist dass wenn ich eine der Hauptkategorien anklicke, sollte sich danach alles unter diesem Menü öffnen also die gesamten Submenüs - der gesamten Baum.
Beispiel:
HAUPT1 <-- Hier wird drauf gelickt
HAUPT2
HAUPT3
HAUPT1 <-- Und so soll danach aussehen
Sub1
SubSub1
Sub2
SubSub1
SubSub2
HAUPT2
HAUPT3
Keiner eine Idee?? ;( PHP-Code: function getTree($id,$lpos) { global $katid; global $subkat; global $wahl; static $ebene = 0; $erg[$ebene] = mysql_query("SELECT * FROM `produktcms_kat` WHERE `subkat` = '$id'"); $menge = mysql_num_rows($erg[$ebene]); for ($lo=0;$lo<$menge;$lo++) { $row = mysql_fetch_row($erg[$ebene]); if($row[1]==0) { print '<table width="212" border="0" cellspacing="0" cellpadding="2">'; print '<tr><td width="16" bgcolor="#C7D6F1"'; if($katid!=$row[0]) 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!=$row[0]) print ' class="linesubnav"'; print '><a href="produkte_uebersicht.php?katid='.$row[0].'&pos='.$lpos.'|'.$row[0].'&subkat='.$row[1].'" class="subnav">'; print $row[2].'</a></td><tr></table>'; } else { print '<table width="212" cellpadding="1" border="0" cellspacing="0" bgcolor="#C7D6F1">'; print '<tr valign="top">'; if($ebene >0){echo str_repeat("<td> </td>",$ebene);} 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='.$row[0].'&pos='.$lpos.'|'.$row[0].'&subkat='.$row[1].'" class="subnavkl">'.$row[2].'</a></td>'; print '</tr>'; print "</table>\n"; } if($row[0] == $wahl[$ebene+1]) { $ebene++; # ein Level hoch getTree($row[0],$lpos."|$row[0]"); $ebene--; # und wieder ein Level runter } } }
__________________ Mfg Basic Avid
- Use it or be used! - |
| |
03.11.05, 12:45
|
#2 (permalink)
|
Registriert seit: 05.09.05 Likes: 0 | hallo.
hatte damals auch viele probleme mit einem menübaum mit unendlich viele kategorien und unterkategorie...
also so hats damals funktioniert ( ist nen alter code von mir) PHP-Code: <?php session_start(); error_reporting(E_ALL); include './config.php'; include './functions.php'; connect(); $sql = "SELECT id, parent_id, cat_name FROM cat"; $result = mysql_query($sql) OR die(mysql_error()); $daten = array(); while ( $row = mysql_fetch_assoc( $result ) ) { $daten[$row['id']]['cat_name'] = $row['cat_name']; $daten[$row['id']]['parent_id'] = $row['parent_id']; }
function cat_tree($daten,$parent_id = NULL, $indent=0) { $empty = true; $indentstring = str_repeat(' ', $indent); foreach($daten as $id => $value ) { if ($value['parent_id'] == $parent_id) { if($empty == true) { $empty = false; echo $indentstring .'<ul>' . "\n"; } echo $indentstring.' <li>'."\n"; echo $indentstring.' <a href="'.$_SERVER['PHP_SELF'].'?goto='.$id.'">'.$value['cat_name'].'</a>'."\n"; echo $indentstring.' </li>'."\n"; if(isset($_SESSION['tree_cat'])){ $array = unserialize($_SESSION['tree_cat']); } else { $array = array(''); }
if(in_array($id,$array)){ cat_tree($daten,$id,$indent+2); } } } if($empty == false) { echo $indentstring .'</ul>' . "\n"; } }
// ................................................................ // .....jedesmal beim klicken einer kategorie folgendes machen..... // ................................................................ if(isset($_GET['goto'])){ $id=$_GET['goto']; if(isset($_SESSION['tree_cat'])){ $array = unserialize($_SESSION['tree_cat']); } else { $array = array(''); } if(!in_array($id,$array)){ $array[] = $id; } else { $d_array = array_keys($array, $id); for($i=0;$i<count($d_array);$i++){ unset($array[$d_array[$i]]); } }
$_SESSION['tree_cat'] = serialize($array);
cat_tree($daten); } else { cat_tree($daten); } ?> |
| | | |
| | HaBOT
| - Anzeige - |
| |
03.11.05, 12:53
|
#3 (permalink)
| Themenstarter
Registriert seit: 17.03.04 Likes: 2 | Probier ich dann gleich mal aus! Danke schon mal!
Es funzt!!!
Hab nochmal komplett neu angefangen und jetzt gehts!
Hier ist mal der Code vielleicht kann Ihn ja jemand brauchen! PHP-Code: function testrek($id,$pos,$do="no",$kat=0) { global $clicked,$katid,$hkat; if(isset($hkat)) $katid = $hkat; $query=mysql_query("SELECT * FROM `produktcms_kat` WHERE subkat='$id' ORDER by rang"); while($kat=mysql_fetch_array($query)) { if($do=='yes' && $kat[subkat]==0) { //echo "<a href='test_rek.php?clicked=1&katid=".$kat[katid]."'>".$kat[bezeichnung]."</a><br/>"; 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"'; print '><a href="produkte_uebersicht.php?katid='.$kat[katid].'&clicked=1&subkat='.$kat[subkat].'" class="subnav">'; print $kat[bezeichnung].'</a></td><tr></table>'; if($clicked==1 && $kat == 1 || $katid==$kat[katid] || $hkat==$kat[katid]) { testrek($katid,$pos+3,"no",1); } } else { if($kat!=1) { //echo linie($pos); //echo $kat[bezeichnung],"<br/>"; 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=1&subkat='.$kat[subkat].'" class="subnavkl">'.$kat[bezeichnung].'</a></td>'; print '</tr>'; print "</table>\n"; testrek($kat[katid],$pos+3,"no",1); } } } }
__________________ Mfg Basic Avid
- Use it or be used! - |
| |
04.11.05, 13:32
|
#4 (permalink)
|
Registriert seit: 05.09.05 Likes: 0 | hat dir mein code jez geholfen? erkenne meinen da nich mehr drin |
| |
04.11.05, 18:57
|
#5 (permalink)
| Themenstarter
Registriert seit: 17.03.04 Likes: 2 | 
Ja, hat er! Hab zwar von deinem Code nichts genommen aber als ich mir deinen Code angeschaut habe, hats bei Klick gemacht und es ging!!
DANKE!!!!
__________________ Mfg Basic Avid
- Use it or be used! - |
| |  | | |
| | | - Anzeige - |
| | [HaBo]
» Web, Network & Multimedia Palace
» (Web-) Design und webbasierte Sprachen
»
Rekursions Problem
| Themen-Optionen | | | | Ansicht | Linear-Darstellung |
Forumregeln
| Es ist Ihnen nicht erlaubt, neue Themen zu verfassen. Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten. Es ist Ihnen nicht erlaubt, Anhänge hochzuladen. Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten. HTML-Code ist aus. | | |
|