Verständnisproblem - WHILE-Schleife

Arndtinho

Erfahrenes Mitglied
Hallo,

ich baue mir gerade ein TreeMenu. Die Items kommen aus einer DB-Tabelle.
Code:
id   parent_id   name   level
1      1          1       0
2      2          2       0
3      3          3       0
4      1          1-1     1
5      1          1-2     1
6      2          2-1     1
7      4          1-1-1   2
Das ergibt dann folgende Struktur:
Code:
+ 1             
|  |
|  + 1-1          
|  |  |
|  |  + 1-1-1       
|  |  
|  + 1-2                 
|
+ 2
|  |
|  + 2-1
|
+ 3
Und so lasse ich mir das Menu ausgeben (Ausgabe der Root-Items sollte reichen, um euch mein Problem zu erklären):
PHP:
while( $row = $con->GetRes() ) {
   $str .= "<li>";
   $str .= "<a href=\"#\">".$row['description']."</a>";
   $str .= "<div id=\"".$row['id']."\" />";
   $str .= "</li>";
}
   	
echo '<ul>'.$str.'</ul>';
Es werden alle Items als Link dargestellt. Gibt es aber für das Root-Item kein SubItem, soll $row['description'] als Text dargestellt werden und nicht als Link. Ich habe daher die Ausgabe um folgendes erweitert:
PHP:
while( $row = $con->GetRes() ) {
   $str .= "<li>";
		
   if( isLastItem( $row['id'], $con ) ) {	
      $str .= "<a href=\"#\">".$row['description']."</a>";
      $str .= "<div id=\"".$row['id']."\" />";
   }
   else {
      $str .= $row['description'];
   }
   		
   $str .= "</li>";
}
   	
echo '<ul>'.$str.'</ul>';

/**************************/

function isLastItem( $id, $con ) {
   	
   $i = 0;
   $sql = "SELECT * FROM `menu_new` WHERE `parent_id` = ".$id;	
   $con->DoSql( $sql );
   	
   while( $row = $con->GetRes() ) {
      $i++;
   }
   	
   if( $i > 0 )
      return true;
   else
      return false;
}
Das sollte normalerweise dieses ergeben:
Code:
Item 1 -> als Link
Item 2 -> als Link
Item 3 -> als Text
Ausgegeben wird aber nur:
Code:
Item 1 -> als Link
Wieso werden ohne die aufgerufene Funktion isLastItem() alle TopItems dargestellt und mit der Funktion nur das erste TopItem? Was muss ich verändern?

Gruß,
Arndtinho
 
@Gumbo

Danke für das Tutorial. Ich werde es mir anschauen. Aber es muss doch auch eiune Ursache und demnach höchstwahrscheinlich auch eine Lösung für das von mir beschriebene Verhalten geben.
 
Zurück