Data struktur

Tags:    arkitektur design struktur objekter

Jeg skal lave en side der skal have en top-menu og nogle steder en side menu.
Derudover skal der laves nogle breadcrumbs, og fordi det ikke er helt fast hvor mange niveauer der vil være til disse breadcrumbs (sidenavigation der viser hvor du er henne) vil jeg gerne lave noget der er tilpas dynamisk til at det kan håndtere uanset om jeg laver 2 niveauer eller 20.

Så strukturen skal basalt set kunne håndtere følgende:
Topmenu
Submenu
StepOnPage
StepAfter
AnotherFurtherStep
...

Hvilken datastruktur kan jeg lave som kan håndtere dette? Hvert element skal kunne identificere hvor henne i "træet" den er, og hvem der er dens parent.
Det skal være noget der både fungerer i objekter som er selvstændige, men også kan realiseres i noget som fx. xml hvor vi kan skrive vores sider ind så vi kan få opbygget alle nødvendige steps som kan vises.

Der må være nogle der har en ide til en tilpas dynamisk struktur til at den kan håndtere dette, uden at blive for kompliceret?



4 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 15 karma
Sorter efter stemmer Sorter efter dato
Lyder som en træstruktur :-)
Alle menupunkter har et navn, nul eller flere børn og nul eller én forældre.

Du kan evt. lave det så alle "rigtige" menupunkter har én forældre, men alle menupunkter i øverste led ligger under en "dummy".



Kommer du ud over den mest almindelige hierarkisk (parent-child) struktur, bliver de altid mere kompliceret. Så hvis du ikke lyster at sætte dig ind i de komplicerede modeller, må du nødvendigvis nøjes med denne.

Du kan dog kigge på:
1) The Adjacency List Model
2) Modified Preorder Tree Traversal
3) Hierarchical database model

Simpel implementering af 1) og 2):
http://www.sitepoint.com/series/storing-hierarchical-data-in-a-database/




Du finder øverste niveau ved at følge parent referencer indtil der ikke er en reference, eller du finder dummy elementet.

Er det en relationel database er det måske, hvis 'parent_id is null' eller en "ulovlig" værdi, f.eks. -1.

I XML kan du bygge det hierakisk, så du kan bruge parentElement() på et element:
Fold kodeboks ind/udXML kode 


...eller du kan gøre noget i samme stil som i databasen:
Fold kodeboks ind/udXML kode 





Lyder som en træstruktur :-)
Alle menupunkter har et navn, nul eller flere børn og nul eller én forældre.

Du kan evt. lave det så alle "rigtige" menupunkter har én forældre, men alle menupunkter i øverste led ligger under en "dummy".

Ja træstrukturen havde jeg tænkt på.
Var mere hvordan jeg sørger for at vide hvilken der er top-menu, så jeg kan finde alle top-menu tekster, og hvilke der er submenu til en submenu.
Og når jeg når ud i 5-6-7 led så kan finde hele breadcrumbs tilbage til start.
Tænker bare på om XML'en bliver meget tung, og om der måske var nogle der havde nogle alternative forslag fordi jeg vil gerne kunne skrive alle sider ind, men vide hvornår første punkt i både top-menu og submenu er valgt. Så jeg får kædet alle de informationer sammen på en pæn struktureret måde som kan gentage sig selv.

Eksempel:
----------------------------------------------------------------------
FORSIDE | PÆRER | BANANER | KONTAKT
----------------------------------------------------------------------

- Velkommen
- Tilmeld
- Hvorfor os?
- Social medier

Tænker på at der skal vides hvilken side der passer til:
* Topmenu (required)
* Submenu (optional) - der kan henvises til en side der viser noget, men som ikke markerer noget ude i Submenu/side menu og først vil ændre side når man vælger noget i submenu/sidemenu.
* RelativePath - så man ved hvor siden ligger relationelt så man ved hvor man linker hen
* Text - hvad skal der stå i Topmenu/sidemenu?
* Level?? En eller anden indikation for niveau så du kan ende i "Forside/Printere/Printpatroner/Guide/Canon/" som er hver sin side under, men som stadig kun vælger/markerer noget i topmenu, og som MÅSKE vælger/markerer noget i submenu/sidemenu'en.

Udfordringen er at jeg har en side, som skal passe på muligvis to ting (Topmenu, Submenu/sidemenu) og have en træstruktur.

Så et XML eksempel ville hjælpe meget :)



Indlæg senest redigeret d. 23.01.2014 17:13 af Bruger #17215
t