NEkonečno úrovní v menu – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

NEkonečno úrovní v menu – PHP – Fórum – Programujte.comNEkonečno úrovní v menu – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
psenik0
Návštěvník
14. 10. 2010   #1
-
0
-

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

Nahlásit jako SPAM
IP: 88.146.14.–
Pk
Reklama
Reklama
insider0
Věrný člen
14. 10. 2010   #2
-
0
-

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 :)

Nahlásit jako SPAM
IP: 147.32.96.–
I don't want to see you go,[br] The sky is over[br] Even though we can't afford[br] The sky is over,[br] The sky is over us.[br][br] CIVILIZATION IS OVER
psenik0
Návštěvník
14. 10. 2010   #3
-
0
-

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?

Nahlásit jako SPAM
IP: 88.146.14.–
Pk
insider0
Věrný člen
14. 10. 2010   #4
-
0
-

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);

Nahlásit jako SPAM
IP: 147.32.96.–
I don't want to see you go,[br] The sky is over[br] Even though we can't afford[br] The sky is over,[br] The sky is over us.[br][br] CIVILIZATION IS OVER
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 21 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý