/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Menusystem + rekursivitet
Fra : Peter


Dato : 10-06-02 22:07

Hej

Er det muligt at udskrive menuer og undermenuer rekursivt i ASP?

Jeg har en tabel med menu-navnet og et parent_id.
Hvis parent_ID = 0 er det en hovedmenu og hvis ikke er det en undermenu der
peger på en hovedmenu.

Jeg plejer at løbe tabellen igennem for hovedmenuer og hver gang den finder
en, starte et nyt under-gennemløb for at finde dens undermenuer osv med den
næste hovedmenu.

Dette er jo bare en rigtigt elendig måde at gøre det på og jeg tænker derfor
på om det overhovedet kan lade sig gøre på en fornuftig måde i ASP?

Hilsen Peter



 
 
Kim Bach Petersen (10-06-2002)
Kommentar
Fra : Kim Bach Petersen


Dato : 10-06-02 22:32

Du kan sagtens lave rekursive rutiner i ASP ved at lave sub's eller
function's der kalder sig selv. Nedenstående kan tjene til inspiration.

Kim

dim conn, rs(25), indryk, niveau
Sub GenererMenu(moder, niveau)
set rs(niveau)=Conn.Execute("SELECT id, titel, url FROM tLinks WHERE
moderId=" & moder )
if rs(niveau).BOF or rs(niveau).EOF then
Exit Sub
else
do until rs(niveau).EOF%>
<span style="text-indent: <%response.write indryk%>px">
<a href="<%response.write rs(niveau)("url")%>"><%response.write
rs(niveau)("titel")%></</a>
</span>
<%indryk = indryk + 20
GenererMenu rs(niveau)("id"), niveau+1
indryk = indryk - 20
rs(niveau).movenext
loop
end if
Set rs(niveau) = Nothing
End Sub

--
· www.kensho.dk · psykologi og spiritualitet ·



Peter (10-06-2002)
Kommentar
Fra : Peter


Dato : 10-06-02 23:05

"Kim Bach Petersen" <kim@kensho.dk> wrote in message
news:ae35rs$bcq$1@sunsite.dk...
> Du kan sagtens lave rekursive rutiner i ASP ved at lave sub's eller
> function's der kalder sig selv. Nedenstående kan tjene til inspiration.

Tak for det hurtige svar.

Jeg er ikke så langt inde i recordsets at jeg kan få det til at virke.

Jeg anvender en MySQL-database.
Kan den ikke bruge recordsets?

Jeg får en Type Mismatch på følgende kode:

Set Conn = Server.CreateObject ("ADODB.Connection")
Conn.Open (MySQL_DSN)
Set RS = Server.CreateObject ("ADODB.Recordset")

Kan det evt. laves uden brug af recordsets?

Hilsen Peter




Kim Bach Petersen (11-06-2002)
Kommentar
Fra : Kim Bach Petersen


Dato : 11-06-02 21:06

> Jeg får en Type Mismatch på følgende kode:

Uden at have brugt MySQL på klassisk ASP vil jeg tro, at du blot behøver at
åbne din databaseforbindelse inden du kalder den rekursive funktion:

Set Conn = Server.CreateObject ("ADODB.Connection")
Conn.Open (MySQL_DSN)
[...diverse db-kald her...]
conn.Close
Set conn = Nothing

Og i den rekursive sub blot slå så op i databasen med:

Set rs(niveau)=Conn.Execute("SELECT id, titel, url FROM tLinks WHERE
moderId=""" & moder & """")

Kim



Peter (12-06-2002)
Kommentar
Fra : Peter


Dato : 12-06-02 09:24

"Kim Bach Petersen" <kim@kensho.dk> skrev i en meddelelse
news:ae5l7q$2cm$1@sunsite.dk...
> > Jeg får en Type Mismatch på følgende kode:
>
> Uden at have brugt MySQL på klassisk ASP vil jeg tro, at du blot behøver
at
> åbne din databaseforbindelse inden du kalder den rekursive funktion:

Takker - det virker faktisk.
Jeg havde nu åbnet forbindelsen med det gik galt, da jeg troede rs betød at
jeg skulle åbne et Recordset.

Den rykker dog ikke ind, hvilket er lidt specielt idet den finder alle
menuer og undermenuer.
Dette har jeg løst ved at tilføje Indryk som argument i subben -
GenererMenu (moder, niveau, indryk) hvorefter den rykker fint ind.

Hvad er "niveau" og hvilken værdi skal subben kaldes med?
Jeg kalder den med 0 men aner ikke hvorfor

Hilsen Peter




Peter (12-06-2002)
Kommentar
Fra : Peter


Dato : 12-06-02 10:16

"Peter" <no_spam@no.where> skrev i en meddelelse
news:WzDN8.19$zA4.755@news.get2net.dk...

> Hvad er "niveau" og hvilken værdi skal subben kaldes med?
> Jeg kalder den med 0 men aner ikke hvorfor

Tror jeg er mere med nu.

rs(Niveau) er et array, hvis stoerrelse bestemmer antallet af undermenuer.
For hver index i arrayet er der angivet en SQL-SELECT og rekusiviteten gør,
at vi kommer igennem det hele og får lukket hver åbnet forbindelse igen.
Niveau kaldes med 0 men kunne i virkeligheden kaldes med 10 eller et hvert
andet tal som sammen med antal undermenuer ikke oversiger arrayets maksimale
størrelse.

Har jeg forstået det korrekt?

Hilsen Peter



Kim Bach Petersen (12-06-2002)
Kommentar
Fra : Kim Bach Petersen


Dato : 12-06-02 19:22

> rs(Niveau) er et array, hvis stoerrelse bestemmer antallet af undermenuer.
> For hver index i arrayet er der angivet en SQL-SELECT og rekusiviteten
gør,
> at vi kommer igennem det hele og får lukket hver åbnet forbindelse igen.
> Niveau kaldes med 0 men kunne i virkeligheden kaldes med 10 eller et hvert
> andet tal som sammen med antal undermenuer ikke oversiger arrayets
maksimale
> størrelse.
>
> Har jeg forstået det korrekt?

Ja, måske. Niveau angiver hierarkiets dybde. Arrayet skal kunne rumme det
antal niveauer, som man maksimalt ønsker i sit hierarki. Der kan være et
vilkårligt antal menupunkter på hvert niveau.

Niveau0
Niveau1
Niveau2
Niveau3
Niveau4
Niveau5
.....
Niveau0

Kim



Kim Bach Petersen (12-06-2002)
Kommentar
Fra : Kim Bach Petersen


Dato : 12-06-02 21:26

> GenererMenu (moder, niveau, indryk) hvorefter den rykker fint ind.

Faktisk er 'indryk' en funktion af niveau, så det ville være mere elegant at
omskrive koden og spare en variabel:

<span style="text-indent: <%response.write niveau*20%>px">

Kim



Nils Lastein (13-06-2002)
Kommentar
Fra : Nils Lastein


Dato : 13-06-02 10:41



Søg
Reklame
Statistik
Spørgsmål : 177551
Tips : 31968
Nyheder : 719565
Indlæg : 6408843
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste