Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(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. ...

Antwort
Alt 02.11.05, 10:00   #1 (permalink)
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard 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']==|| $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>&nbsp;</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! -
BasicAvid ist offline   Mit Zitat antworten
Alt 03.11.05, 12:45   #2 (permalink)
 
Registriert seit: 05.09.05
Runsky Leistung: Facit NTK
Runsky eine Nachricht über ICQ schicken
Likes: 0
Standard

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);
}
?>
Runsky ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 03.11.05, 12:53   #3 (permalink)
Themenstarter
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard

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==&& $kat == || $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>&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=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! -
BasicAvid ist offline   Mit Zitat antworten
Alt 04.11.05, 13:32   #4 (permalink)
 
Registriert seit: 05.09.05
Runsky Leistung: Facit NTK
Runsky eine Nachricht über ICQ schicken
Likes: 0
Standard

hat dir mein code jez geholfen? erkenne meinen da nich mehr drin
Runsky ist offline   Mit Zitat antworten
Alt 04.11.05, 18:57   #5 (permalink)
Themenstarter
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard


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! -
BasicAvid ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Rekursions Problem
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
!!Problem!! Brauch Mal Hilfe !! 16-bit-ms-dos teilsystem. !!Problem!! nonpretium Windows 0 24.10.05 20:56


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61