Autor Zpráva
Karlos
Profil *
Ahoj, dělám stromové menu, skoro celé funguje, akorát tam je někde malinký problém a já ho celé odpoledne nemůžu najít.
V db mám 2 tabulky:
cars
ID|IDparent|Name

models
IDmodel|ID|Name

No a představa je taková:
v tabulce cars jsou uloženy značky aut. Pokud má IDparent = 0, tak je vypsána navrchu a je zobrazena, po kliknutí se zobrazí jednotlivé modely z tabulky models.
Příklad:
cars
ID = 1 | IDparent = 0 | Name = VolksWagen
ID = 2| IDparent = 1 | Name = Škoda
models
IDmodel = 1 | IDparent = 1 | Name = Golf
IDmodel = 2| IDparent = 2 | Name = Fabia

Výpis:
VolksWagen
Škoda
Fabia
Golf
Problém je v tom, že Fabia se mi už nevypíše, protože tam už není žádná další značka. takže pokud přidám do cars nějakou fiktivní značku která bude mít IDparent = 2, Fabia se vypíše. jenomže to samozřejmě nechci.
Takhle vypadá kod:
 Menu(0);
       function Menu($id)   //vypisuje značky aut
       {
           $query = mysql_query("SELECT ID, Name, IDparent FROM cars WHERE ID = $id");
           while($parent = mysql_fetch_object($query))
           {
               echo "<li>".$parent->Name;
               if(inDB("IDparent",$parent->ID)) //zjistí jestli ve sloupečku IDparent je hodnota ID
               {
                   echo "<ul>";
                   Menu($parent->ID);
                   TypeCarsMenu($parent->ID);
                   echo "</ul>";
               }else{
                   echo "</li>";
               }
           }
       }
       function TypeCarsMenu($id) //vypisuje modely aut
       {
           $query = mysql_query("SELECT IDmodel, Name, ID FROM models WHERE ID=$id"); //id je ze sloupečku cars
           while($type = mysql_fetch_object($query))
           {
               echo "<li>".$type->Name."</li>";
           }
       }

Mám tam funkci inDB, ta pouze na základě numrows zjištuje, jestli v tom sloupečku IDparent je hodnota ID, což znamená že daná značka je potomkem této. To funguje, takže to sem už nechci rozepisovat.
Díky za pomoc


Aha špatně se zobrazil výpis toho jak má menu vypadat, takže ještě jednou lépe:
VolksWagen
-Škoda
--Fabia
-Golf
AM_
Profil
V TypeCarsMenu se musí znovu rekurzivně volat TypeCarsMenu.
Karlos
Profil *
Myslíš takhle:
       function TypeCarsMenu($id) //vypisuje modely aut
       {
           $query = mysql_query("SELECT IDmodel, Name, ID FROM models WHERE ID=$id"); //id je ze sloupečku cars
           while($type = mysql_fetch_object($query))
           {
               echo "<li>".$type->Name."</li>";
               TypeCarsMenu($type->IDmodel);
           }
       }
Tím se mi to zacyklí


Už vím v čem je chyba:

if(inDB("IDparent",$parent->ID)) //zjistí jestli ve sloupečku IDparent je hodnota ID
               {
                   echo "<ul>";
                   Menu($parent->ID);
                   TypeCarsMenu($parent->ID);
                   echo "</ul>";
               }else{
                   echo "</li>";
Já zjišťuju, jestli je ve sloupečku IDparent to danné ID a pokud ano, tak volám TypeCarsMenu. No a když je nějaká značka koncová, tak pro ní tu metodu TypeCarsMenu nevolám...neví někdo jak to upravit?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0