Zdravím,
nějak se nemohu dopátrat toho, jakým způsobem se dá vytvořit cyklus vypisující z jedné tabulky databáze prakticky nekonečno úrovní menu.
Dej me tomu, že máme tabulku se sloupci: id_page, page_name, issub,
přičemž pokud issub je notnull pole, tak číslo v sloupci se vypíše vždy jako podrubika pro rubriku se stejným číslem id_page.
Stejně jako je tomu napřiklad v zde na programujte.com(více úrovní menu), nebo lépe jako u phpbb, zde je možné vytvářet nekonečno vnořených témat, tedy v mém případě by to byly sekce webu.
Předem děkuji za pomoc.
P.S.: chápu že se asi nenajde někdo kdo by mi napsal přímo příklad toho jak to mám vypadat, takže mi budou stačit i vodítka a nějak ten cyklus už dohromady dám...
Fórum › PHP
NEkonečno úrovní v menu
ahoj,
takze teroereticky :) Vyberes si z databeze vsechny polozky, pripravis si 3 pole(mozna to pujde i se dvema) a pak v cyklu si pole/objekt rozsiris o index "child", ktery bude pole. Do pole cislo jedna ulozis cele pole/objekt radku z databaze pod nejaky primym indexem, do dalsiho pole si pod indexem "id_page" ulozis referenci na prvni pole s aktualnim radkem databaze. 3. pole bude vysledne s celou stromovou strukturou.
$tretiPole[] = $druhePole[$row['id_page']];
jinak
$druhePole[$row['issub']]['child'][] = $druhePole['id_page'];
doufam, ze se to da aspon trochu pochopit. Radeji bych napsal kod, ale z toho by ses to asi nenaucil :)
Tak asi by byl ten kód lepší, protože jsem to opravdu nepochopil :D tak takhle, pokouším se pomalu vytvářet a sestavovat CMS. funguje se dvěma úrovněmi menu, bohužel to leckdy nestačí.
Kód budu ještě hodně upravovat a zájem naučit se to určitě mám, tak nebylo by možné napsat sem ten zdrojový kód?
tak tedy dobra :)
Je to z hlavy a vyskyt chyb muze byt vyosky
$qVysledek = mysql_query(...);
$prvniPole = $druhePole = $strom = array();
$i = 0;
while($row = mysql_fetch_array($qVysledek)){
// priprava pro potomky
$row['child'] = array();
// potrebuju uchovat celou promennou kvuli referenci
$prvniPole[$i] = $row;
// ulozim referenci / ukazatel ala C(++) / s indexem stranky pro snadny pristup
$druhePole[$row['page_id']] = &$prvniPole[$i];
if(empty($row['issub'])){
// pridam pres referenci do hlavni vetve stromu
$strom[] = &$druhePole[$row['page_id']]; // tady si nejsem jisty, jeslti je potreba ampersand, kdyz pracuju s referenci
}else{
// doplnim potomka pres referenci
$druhePole[$row['issub']]['child'][] = &$druhePole[$row'[id_page']];
}
$i++;
}
function vypisStrom($s){
echo '<ul>';
foreach($s as $prvek){
echo '<li>'.$prvek['nazev'];
if(!empty($prvek['child'])
vypisStrom($prvek['child']);
echo '</li>';
}
echo '</ul>';
}
vypisStrom($strom);
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Vkládání nových inputů více úrovní — založil Feliks
Priklad na urovni operacniho systemu - vytvoreni noveho vlakna a vyu… — založil BigBear
Menu - Název vlevo / Menu vpravo — založil Miner123
Moderátoři diskuze