Menü-Klasse Fehlfunktion

28dayslater

Mitglied
Ich habe ein Problem mit einer Menü-Klasse.
Hier mal die gesamte Klasse:

PHP:
<?php
class menu{

    var $id;
    var $db;
    var $parent;
         var $output;


    function menu($id,$db){
             $this->db= $db;
                 $this->id= $id;

                 $this->get_parent($id);
                 $this->get_menu(0);
         }



         function get_menu($id){
             $this->db->query("SELECT * FROM menu WHERE top_id=".$id." ORDER BY pos DESC;");

                     while ($row=$this->db->fetch())
                     {
                         if ( ($this->id) == $row['id'] )
                             echo '<a href="?content='.$row['id'].'"><b>'.$row['name'].'</b></a><br>';
                         else
                             echo '<a href="?content='.$row['id'].'">'.$row['name'].'</a><br>';
                         if (!empty($this->parent[$row['id']])){
                             $this->get_menu($row['id']);
                         }


                         }
         }



         function get_parent($id){
             $this->db->query("SELECT * FROM menu WHERE id=".$id.";");
                 while ($row=$this->db->fetch())
                 {
                     $this->parent[$row['id']]=$row['id'];
                             if ($row['top_id']!=0)
                             $this->get_parent($row['top_id']);
                 }

         }


         function output(){
             return $this->output;
         }

}
?>



So, wenn jetzt Menü(0) aufgerufen wird, wird die oberste Ebene angezeigt. Sobald aber die Rekursion ins Spiel kommt,
PHP:
 if (!empty($this->parent[$row['id']])){
       $this->get_menu($row['id']);
dann wird der oberste Aufruf (Menü(0)) nicht zuende geführt.

Beispiel:

So sollte es sein:

Main1
-Sub1
-Sub2
Main2
Main3

So ist es:

Main1
-Sub1
-Sub2



Kann mir wer helfen? :-/

MFG
 
das lag daran, dass die mysql-klasse überschrieben wurde. Ich habe ja einen Aufruf...

wenn ich diesen aufruf "fetch()"e und das unterbrochen wird durch ein "kind",also durch einen neuen aufruf , ist der alte nicht mehr vorhanden, und es werden völlig falsche werte angezeigt.
Meine Lösung (nicht so elegant): verändert wurde nur die get_menu()

PHP:
<?php
class menu{

    var $id;
    var $db;
    var $parent;
         var $output;


    function menu($id,$db){
             $this->db= $db;
                 $this->id= $id;

                 $this->get_parent($id);
                 $this->get_menu(0);
         }


         function get_menu($id){
             $this->db->query("SELECT * FROM menu WHERE top_id=".$id." ORDER BY pos DESC;");
                     while ($row=$this->db->fetch())
                     $top[]=$row;

                             if(!empty($top))
                             {

                                 foreach ($top as $row)
                                     {
                                         if ( ($this->id) == $row['id'] )
                                             echo '<a href="?content='.$row['id'].'"><b>'.$row['name'].'</b></a>';
                                         else
                                             echo '<a href="?content='.$row['id'].'">'.$row['name'].'</a>';

                                             if (!empty($this->parent[$row['id']]))
                                                    $this->get_menu($row['id']);

                                     }

                             }

         }

         function get_parent($id){
             $this->db->query("SELECT * FROM menu WHERE id=".$id.";");
                 while ($row=$this->db->fetch())
                 {
                     $this->parent[$row['id']]=$row['id'];
                             $this->get_parent($row['top_id']);
                 }

         }


}
?>
 
Zurück