Avatar billede yezper Nybegynder
07. november 2003 - 14:38 Der er 3 kommentarer og
1 løsning

[VB.NET] Navigationslinie

Hej!

Jeg er ved at lave et link index, og vil gerne have en navigationslinie i stil med den Yahoo har, f.eks. "Directory > Computers and Internet > Software > Internet > World Wide Web > Browsers > Browser Usage Statistics." Man kan så klikke på f.eks. Software for at komme tilbage til den kategori, istedet for febrilskt at skulle klikke på tilbageknappen, eller at gå til forsiden for endnu engang at klikke sig ingennem træet.

Min kategori database er opbygget således:

`ID` int(11) NOT NULL auto_increment,
`ParentId` int(11) NOT NULL default '0',
`Title_1` varchar(50) NOT NULL default '',
`Title_2` varchar(50) NOT NULL default '',
`RelatedCategories` varchar(59) default NULL,
`Erotic` smallint(6) NOT NULL default '0',
`AddLinks` smallint(6) NOT NULL default '0',
`ShowSubCatsAs` smallint(6) NOT NULL default '0',
`Status` smallint(6) NOT NULL default '0',
PRIMARY KEY  (`ID`)
TYPE=MyISAM

ParentId kan have forskellige værdier, hvor 0 betyder, at kategorien er en rodkategori, som er placeret på forsiden. Alle andre værdier refererer til andre kategorier, og dybden er uendelig.

RelatedCategories er en et array indeholdende 2-3 forskellige kategori eksempler, som man kan klikke sig ind på fra forsiden. Et eks.:

Computer & Internet
Internet, WWW, Software ...

Nyheder & Medier
Aviser, TV, Radio ...

osv.. Lidt ligesom på Yahoo og mange andre emneindekser. Indholdet af RelatedCategories kunne f.eks. være "|1|99|172|".

AddLinks bestemmer, om det skal være muligt for besøgende at tilføje links til den aktuelle kategori, eller om der skal vælges en underkategori.

Nå, men til spørgsmålet: Hvordan kan jeg lave den navigationslinie bedst muligt og mest elegant? Kategorierne vil blive cached i min. 1 time med OutputCache, så det gør ikke noget, hvis koden er lidt hår ved web og/eller databaseserver, men selvfølgelig ikke for meget, da der er mange forskellige kategorier at cache.
Avatar billede m_skau Nybegynder
07. november 2003 - 22:34 #1
Din navigationsstruktur kaldes en brødkrummesti (breadcrumb path).
Metoden med ParentID/ChildID kaldes en "adjacency list". En mindre udbredt metode er "nested sets", der dog er langt mere fleksibel, og meget nemmere at følge et spor igennem ("traversal").
Prøv at læse artiklen her, der forklarer teorierne:
http://searchdatabase.techtarget.com/tip/1,289483,sid13_gci537290,00.html

At finde alle overordnede kategorier i en adjacency list er lidt besværligt, og gøres som regel ved en rekursiv query (find denne kategoris parents kategorinavn og dens parent (kald den p1), find derefter p1s parents kategorinavn og dens parent (kald den p2) - for hver ny P en ny SQL, indtil parentid = 0)
Med et nestet set kan man skrive én enkelt query, der finder hele anerækken op til Adam, uanset hvor dyb stukturen er. Det kunne se sådan her ud:

SELECT P2.*
  FROM Categories AS P1, Categories AS P2
  WHERE P1.lft BETWEEN P2.lft AND P2.rgt
    AND P1.emp = :Thiscategory;
Avatar billede yezper Nybegynder
08. november 2003 - 00:35 #2
Jeg skulle måske ha' skrevet, at det jeg er ved at lave er en ny version af et allerede eksistererende site, og jeg har dermed en kategoritabel med mere end 100 forskellige kategorier på forskellige niveauer. Ydermere er der flere hundrede links i linktabellen, så jeg tror ikke lige umiddelbart, at jeg vil have overskud til at skifte til en nested struktur.

Det gør desuden ikke noget, at det tager lidt tid at finde frem til stien, da alle sider caches i min. 1 time, før de skal hentes fra databasen igen.

Har du en idé til, hvordan jeg kan lave den rekursive query? Jeg anvender MySQL.
Avatar billede chanlo Nybegynder
10. november 2003 - 00:02 #3
Avatar billede yezper Nybegynder
10. november 2003 - 00:21 #4
Havde helt glemt, at jeg havde dette spørgsmål åbent... Jeg har selv lavet en løsning, som måske ikke er pæn eller elegant - men den virker - se http://groups.google.dk/groups?dq=&hl=da&lr=&ie=UTF-8&selm=ua8rb.26511%24jf4.1480927%40news000.worldonline.dk

Du får points'ene alligevel.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester