ugrás a tartalomhoz

Menükezelő

Castor87 · 2009. Feb. 5. (Cs), 16.52
Egy többszintű menürendszer listázásához kérnék segítséget. A menünek végtelen szintje lehet és beállítható az egyes szinteken a sorrend. Van két extra mezőm, egyik a sorrendért felel, a másik pedig az aktuális menüpont szülő azonosítóját jelöli. Egy rekurzív lekérdezéssel sikeresen lehívom sql adatbázisból, viszont a megjelenítéssel problémám van. Smarty sablonkezelőt használok.

kb. így néz ki
menü1, szülő=0
menü2, szülő=menü1
menü3, szülő=menü1
menü4, szülő=0

Ha átadom tömbként a smartynak, hogy tudom ul, li felsorolásba tenni őket?
 
1

Ellenőrzöd, hogy tömb-e

Poetro · 2009. Feb. 5. (Cs), 17.01
Amikor végigmész az elemeken, ellenőrzöd, hogy tömb-e, vagy valami attributuma arra utal, hogy ez egy menü és nem menüelem.
2

hierarchikus adatkezelés

gex · 2009. Feb. 5. (Cs), 17.19
http://weblabor.hu/cikkek/hierarchikusadatkezeles2, ebben van megjelenítés is, amit vagy át tudsz ültetni smarty-ra, vagy használj {php} blokkot.
3

hehe

Castor87 · 2009. Feb. 5. (Cs), 17.23
jajj ez nagyon durva, ezt már néztem. igazából az én rekurzív fv. tökéletesen kilistázza egy tömbbe a db-ből és az almenüket jelöli azzal hogy van szülőjük. Ezt a tömböt már csak smartyval kellene jóól megjeleníteni.
4

hát

Castor87 · 2009. Feb. 5. (Cs), 17.30
a gyerekek nem a szülő elembe vannak, hanem rögtön a szülő után következnek a tömbben, aztán jön még egy szülő stb. Természetesen a gyereknél jelezve van hogy ő gyerek, azzal hogy nem 0 a szülő azonosító.
kb így nézne ki:
array:
szülő1
szülő2
gyerek1
kisgyerek1
kisgyerek2
gyerek2
szülő3

azt kellene megoldani hogy a 2db kisgyerek egy belső ul-ban legyen. Rekurzívan elméletileg meg lehet hívni ugyanazt a template-et, csak nem tudom hogy működik a gyakorlatban:)
5

megjelenítés

Poetro · 2009. Feb. 5. (Cs), 18.16
mostaniszulo = 0
if elem.szulo
  mostaniszulo = elem.szulo
if mostaniszulo != elem.szulo
 print ul
if mostaniszulo = 0
 print /ul
print elem

vagy valami hasonlo.
A fent említett cikkben jobban részletezem ezen megjelenítést, érdemes elolvasni.
6

cikk

Castor87 · 2009. Feb. 6. (P), 12.32
A feladat legoptimálisabb megoldása a cikked első fele, amelyben rekurzív lekérdezést végzel. Ezt kellene úgy átalakítani hogy ne kiírja az eredményt hanem szépen egy tömbben tárolja el (fa szerűen). Mert a jelenlegi metódusom fő problémája hogy nincsenek egymásba ágyazva az ágak. A te módszereddel szépen ki tudom írni, de mivel smartynak kellene adnom ezért még van mit módosítani rajta. Van valakinek ötlete milyen módon lehet egymásba ágyazni egy tömbben??? Még annyi bonyolultság van a dologban hogy a szinteken lévők egymáshoz viszonyított sorrendje is tárolva van az adatbázisban, tehát lekérdezésnél ezt is figyelembe kell venni.

 function displayChildren($szulo, $szint) {  
    // visszakapjuk a $szulo összes gyerekét  
    $result = mysql_query('SELECT felirat FROM tree '.  
                           'WHERE szulo="'.$szulo.'";');  
   
    // minden gyermeket megjelenítünk  
    while ($row = mysql_fetch_array($result)) {  
        // beljebb toljuk és megjelenítjük a gyerek feliratát  
        echo str_repeat('  ',$szint).$row['title']."\n";  
   
        // újból meghívjuk a függvényt hogy megjelenítsük a gyerek gyerekeit  
        displayChildren($row['title'], $szint+1);  
    }  
 } 
7

ötlet

Castor87 · 2009. Feb. 7. (Szo), 08.57
semmi ötlet, milyen módon lehetne tömbbe rendezni??
8

[megoldás]

Castor87 · 2009. Feb. 7. (Szo), 12.50