/ 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
asp menu - loop der driller
Fra : Ukendt


Dato : 18-05-03 16:50

Jeg er ved at lave en menu i asp, men har lige lidt problemer med at
gennemskue hvordan strukturen skal sættes sammen


Data til menu fåes fra to tabeller

1) tblMenuContent
2) tblArticle

1) indeholder menupunkterne. Der kan ændres i antal dynamisk.
2) indeholder div data til artiklen, bl a. et id der viser hvilket menupunkt
den tilhører


Det jeg gerne vil have listet er en menu der ser således ud

MenuPunkt1
MenuPunkt2
MenuPunkt3
MenuPunkt4
osv.

hvilket jeg nok kan lave. Når der så trykkes på feks. MenuPunkt2, skal den
åbne sig som nedenstående.

MenuPunkt1
MenuPunkt2
....underside1 til MenuPunkt2
....underside2 til MenuPunkt2
....underside3 til MenuPunkt2
....underside4 til MenuPunkt2
MenuPunkt3
MenuPunkt4
osv.

Jeg har lidt problem med at få kontrolleret i mit loop, om jeg er kommet til
MenuPunkt2

en kort skitse af hvad jeg havde tænkt mig

do while not Menu.eof

'undersøg om men er kommet til et menupunkt
'hvis ja, udskriv MenuPunkt

do while not SubMenu.eof

' list undersiderne op
loop ' looper igennem undersider

loop ' looper igennem resten af MenuPunkterne

Jeg har nedenstående kode (renset for div ekstra kode)



<%

dim strSQLMenu, oRsMenu
strSQLMenu = "Select * from tblMenuContent order by MenuName ;"
set oRsMenu= openRecordset(strSQLMenu)

dim strMenuID

strMenuID = Request.Querystring("menuheader")
if strMenuID = "" then
strMenuID = 0
end if

dim strSQLSubMenu, oRsSubMenu
strSQLSubMenu = "SELECT * FROM tblArticle WHERE ArticleMenuHeaderID =
"&strMenuID&" ORDER BY ArticleHeader;"

set oRsSubMenu= openRecordset(strSQLSubMenu)


Do while not oRsMenu.eof

if strMenuID = ????? then 'Hvad skal der stå her for at den kontrollerer om
man er kommet til det menupunkt der skal have listet undersiderne %>
<a
href="listarticle.asp?menuheader=<%=oRsMenu("ID")%>"><%=oRsMenu("MenuName_dk
")%></a> <!-- udskriver menupunkt-->
<% Do while not oRsSubMenu.eof%>

<a
href="listarticle.asp?menuheader=<%=oRsMenu("ID")%>&kategori=<%=oRsMenu("ID"
)%>"><%=oRsMenu("MenuName")%></a><br><!-- udskriver menupunktets
underside -->
<%
oRsSubMenu.Movenext
Loop
%>

<% end if%>
<a
href="listarticle.asp?menuheader=<%=oRsMenu("ID")%>"><%=oRsMenu("MenuName")%
></a><!-- fortsætter udskrift af menupunkter -->
<%
oRsMenu.Movenext
Loop
%>

--

Mvh / Regards
-=< Christian >=-
What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942
" If something's hard to do, then it's not worth doing. Homer J. Simpson"




 
 
Torben Brandt (18-05-2003)
Kommentar
Fra : Torben Brandt


Dato : 18-05-03 20:20

Christian M. Nielsen wrote:
>
> en kort skitse af hvad jeg havde tænkt mig
>
> do while not Menu.eof
>
> 'undersøg om men er kommet til et menupunkt
> 'hvis ja, udskriv MenuPunkt
>
> do while not SubMenu.eof
>
> ' list undersiderne op
> loop ' looper igennem undersider
>
> loop ' looper igennem resten af MenuPunkterne
>
> Jeg har nedenstående kode (renset for div ekstra kode)
>
>
>
> <%
>
> dim strSQLMenu, oRsMenu
> strSQLMenu = "Select * from tblMenuContent order by MenuName ;"
> set oRsMenu= openRecordset(strSQLMenu)
>
> dim strMenuID
>
> strMenuID = Request.Querystring("menuheader")
> if strMenuID = "" then
> strMenuID = 0
> end if
>
> dim strSQLSubMenu, oRsSubMenu
> strSQLSubMenu = "SELECT * FROM tblArticle WHERE ArticleMenuHeaderID =
> "&strMenuID&" ORDER BY ArticleHeader;"
>
> set oRsSubMenu= openRecordset(strSQLSubMenu)
>
>
> Do while not oRsMenu.eof
>
> if strMenuID = ????? then 'Hvad skal der stå her for at den kontrollerer om
> man er kommet til det menupunkt der skal have listet undersiderne %>

If strMenuID = oRsMenu("ID") Then %>

> <a
> href="listarticle.asp?menuheader=<%=oRsMenu("ID")%>"><%=oRsMenu("MenuName_dk
> ")%></a> <!-- udskriver menupunkt-->
> <% Do while not oRsSubMenu.eof%>
>
> <a
> href="listarticle.asp?menuheader=<%=oRsMenu("ID")%>&kategori=<%=oRsMenu("ID"
> )%>"><%=oRsMenu("MenuName")%></a><br><!-- udskriver menupunktets
> underside -->
> <%
> oRsSubMenu.Movenext
> Loop
> %>
>
> <% end if%>
> <a
> href="listarticle.asp?menuheader=<%=oRsMenu("ID")%>"><%=oRsMenu("MenuName")%
>
>></a><!-- fortsætter udskrift af menupunkter -->

Skal dette link ikke stå før den linie jeg har indsat oven over...?

>
> <%
> oRsMenu.Movenext
> Loop
> %>
>

mvh Torben


Ukendt (18-05-2003)
Kommentar
Fra : Ukendt


Dato : 18-05-03 22:12

>"Torben Brandt" <name@domain.invalid> wrote in message
news:3EC7DCF6.5010405@domain.invalid...

>
>> Do while not oRsMenu.eof
>
>> if strMenuID = ????? then 'Hvad skal der stå her for at den kontrollerer
om
>> man er kommet til det menupunkt der skal have listet undersiderne %>

>If strMenuID = oRsMenu("ID") Then %>

Det har jeg prøvet, men det giver ikke noget resultat. Undersiderne bliver
ikke listet op. Retter jeg derimod til feks.

If strMenuID = 37 Then %> Hvilket er værdien for det MenuPunkt der pt er nr
3 i listen og derefter trykker på link nr 3, bliver der listet på denne måde
..


MenuPunkt1
MenuPunkt1

UnderSideTilPunkt3#1
UnderSideTilPunkt3#2 (2 forskellige)

MenuPunkt2
MenuPunkt2

MenuPunkt3
MenuPunkt3

MenuPunkt4
MenuPunkt4

DVS at enuPunkterne bliver listet to gange. Undersiderne kun een.Ændrer jeg
If strMenuID = 37 Then %> til en anden talværdi, bliver undersiderne altid
listet som skitseret.

>> <a
>>
href="listarticle.asp?menuheader=<%=oRsMenu("ID")%>"><%=oRsMenu("MenuName")%
>>
>></a><!-- fortsætter udskrift af menupunkter -->

>Skal dette link ikke stå før den linie jeg har indsat oven over...?

Giver ikke den store forskel. Har dog flyttet den derop som dit forslag
lyder

Hvis der er en anden og smartere/nemmere/mere korrekt måde at opbygge menuen
på, er jeg åben for forslag.

--

Mvh / Regards
-=< Christian >=-
What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942
" If something's hard to do, then it's not worth doing. Homer J. Simpson"



Torben Brandt (18-05-2003)
Kommentar
Fra : Torben Brandt


Dato : 18-05-03 23:27

Christian M. Nielsen wrote:
>>"Torben Brandt" <name@domain.invalid> wrote in message
>> news:3EC7DCF6.5010405@domain.invalid...
>
> Det har jeg prøvet, men det giver ikke noget resultat. Undersiderne bliver
> ikke listet op. Retter jeg derimod til feks.
>
> If strMenuID = 37 Then %> Hvilket er værdien for det MenuPunkt der pt er nr
> 3 i listen og derefter trykker på link nr 3, bliver der listet på denne måde
>
> MenuPunkt1
> MenuPunkt1
>
> UnderSideTilPunkt3#1
> UnderSideTilPunkt3#2 (2 forskellige)
>
> MenuPunkt2
> MenuPunkt2
>
> MenuPunkt3
> MenuPunkt3
>
> MenuPunkt4
> MenuPunkt4
>
> DVS at enuPunkterne bliver listet to gange. Undersiderne kun een.Ændrer jeg
> If strMenuID = 37 Then %> til en anden talværdi, bliver undersiderne altid
> listet som skitseret.

Hmm, jeg har gået dit første indlæg igennem for lige at se i detaljer,
hvad der foregår, men jeg kan ikke helt finde ud af det :)
Fx. i den indre løkke, hvor der skal udskrives underside-punkter, der
udskrives der slet ikke noget fra oRsSubMenu.

Kan du evt. ikke poste den udgave af koden du bruger nu (naturligvis kun
det relevante, som i det første indlæg)

> Hvis der er en anden og smartere/nemmere/mere korrekt måde at opbygge menuen
> på, er jeg åben for forslag.

Et andet forslag, som jeg umiddelbart er mere tilhænger af, er, at
opbygge menuen i database-udtrækket, så der kun er ét recordset.
Eksempel:
tblHovedmenu har felterne id og navn.
tblSubmenu har felterne id, parentId (referer til første tabel) og navn

Så kunne man lave et udtræk i stil med:
SELECT
tblHovedmenu.id AS menuId, tblHovedmenu.navn AS menuNavn,
tblSubmenu.id AS submenuId, tblSubmenu.navn AS submenuNavn
FROM
tblHovedmenu
LEFT JOIN
(
SELECT id, navn FROM tblSubmenu
WHERE parentID = [indsæt id for den menu, der skal vises]
) AS tblSubmenu
ON (tblSubmenu.parentId = tblHovedmenu.id)
ORDER BY tblHovedmenu.id, tblSubmenu.id

Det kunne give et udtræk i stil med:
menuId      menuNavn   submenuId   submenuNavn
1      Både      [null]      [null]
2      Biler      1      Køb
2      Biler      2      Salg
3      Fly      [null]      [null]

Det kunne udskrives med:
Do While Not rsMenu.EOF
' Udskriv først hovedmenu-punktet
Response.Write rsMenu("menuNavn") & "<br>"

' Hvis der er undermenupunkter så gennemløb dem
If Not IsNull(rsMenu("submenuId")) Then
' Sålænge der er undermenupunkter udskrive dem en efter en
Do While Not IsNull(rsMenu("submenuId"))
Response.Write rsMenu("submenuNavn") & "<br>"
rsMenu.MoveNext

' Hvis der slet ikke er flere punkter, så stop.
If rsMenu.EOF Then Exit Do
Loop
Else
rsMenu.MoveNext
End If
Loop

mvh Torben


Ukendt (19-05-2003)
Kommentar
Fra : Ukendt


Dato : 19-05-03 16:39

"Torben Brandt" <name@domain.invalid> wrote in message
news:3EC808A2.4020502@domain.invalid...


<Hmm, jeg har gået dit første indlæg igennem for lige at se i detaljer,
<hvad der foregår, men jeg kan ikke helt finde ud af det :)
<Fx. i den indre løkke, hvor der skal udskrives underside-punkter, der
<udskrives der slet ikke noget fra oRsSubMenu.
<
<Kan du evt. ikke poste den udgave af koden du bruger nu (naturligvis kun
<det relevante, som i det første indlæg)

Jeg har rettet til i koden. Nu bliver der kun vise et link til hver punkt i
hovedmenueen. Der er også kun et punkt pr side i undermenueen.

Det jeg ikke kan få den til, er at udskrive undermenueen på det rette sted,
som det er nu, kommer den altid efter første punkt i hovedmenueen

på denne måde (hvor hovedmenu er bogstaver og undermenu er tal)

AAAAA
11111
22222
33333
BBBBBB
CCCCC
DDDDD


Hvis jeg trykker på hovedmenu link CCCC skal undermenuen foldes ud under
CCCCCC og ikke under AAAA som det sker nu.

Koden er som følger:

<%Dim strEjendomID
strEjendomID = Request.Querystring("menuheader")%>

<% Do while not oRsMenu.eof %>

<tr>
<td><a
href="listarticle.asp?menuheader=<%=oRsMenu("EjendomID")%>"><%=oRsMenu("Menu
Name_dk")%></a></td>
</tr>

<% if strMenuID = strEjendomID then %>
<tr>
<td ><% Do while not oRsSubMenu.eof%><a
href="listarticle.asp?menuheader=<%=oRsMenu("EjendomID")%>"><%=oRsSubMenu("A
rticleHeader_dk")%></a><br>
<% oRsSubMenu.Movenext
Loop%></td>
</tr>
<% end if
oRsMenu.Movenext
Loop
%>


<
<> Hvis der er en anden og smartere/nemmere/mere korrekt måde at opbygge
menuen
<> på, er jeg åben for forslag.
<
<Et andet forslag, som jeg umiddelbart er mere tilhænger af, er, at
<opbygge menuen i database-udtrækket, så der kun er ét recordset.
<Eksempel:

Har set på det, vælger den hvis ikke jeg kan få min egen til at virke.
--

Mvh / Regards
-=< Christian >=-
What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942
" If something's hard to do, then it's not worth doing. Homer J. Simpson"



Jens Gyldenkærne Cla~ (19-05-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 19-05-03 20:20

Christian M. Nielsen skrev:

> <Hmm, jeg har gået dit første indlæg igennem ...

Hej Christian. Ret venligst dit signaturtegn til ">". Det er ret
besværligt at læse teksten når du citerer med et ikkestandardiseret
signaturtegn ("<")


> Det jeg ikke kan få den til, er at udskrive undermenueen på
> det rette sted, som det er nu, kommer den altid efter første
> punkt i hovedmenueen

Har du mulighed for at give et link til siden? Det er noget lettere
at hjælpe hvis man kan se hvordan det virker.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Ukendt (20-05-2003)
Kommentar
Fra : Ukendt


Dato : 20-05-03 18:18

"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote in message
news:Xns9380D8EE3E059jcdmfdk@gyrosmod.cybercity.dk...

> > Det jeg ikke kan få den til, er at udskrive undermenueen på
> > det rette sted, som det er nu, kommer den altid efter første
> > punkt i hovedmenueen
>
> Har du mulighed for at give et link til siden? Det er noget lettere
> at hjælpe hvis man kan se hvordan det virker.

http://1950.dk/ny/index2.asp?langauge=dk&topid=2

Koden (som er en include fil) kan ses på

http://1950.dk/ny/menu.txt


--

Mvh / Regards
-=< Christian >=-
What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942
" If something's hard to do, then it's not worth doing. Homer J. Simpson"





Jens Gyldenkærne Cla~ (20-05-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 20-05-03 20:55

Christian M. Nielsen skrev:

>> Har du mulighed for at give et link til siden? Det er noget
>> lettere at hjælpe hvis man kan se hvordan det virker.

> http://1950.dk/ny/index2.asp?langauge=dk&topid=2

> http://1950.dk/ny/menu.txt

Takker. Hvis det er koden i menu.txt der ligger til grund for
menuen, kan jeg godt se hvad der går galt.

Du har ingen if-betingelse til at tjekke om undermenuen skal
udskrives eller ej. Derfor vil den altid komme under det første
hovedmenupunkt.

Indsæt et tjek a la:

If CInt(strMenuID) = oRsMenu("menuID") Then
   ' udskriv submenu
End If
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Christian M. Nielsen (21-05-2003)
Kommentar
Fra : Christian M. Nielsen


Dato : 21-05-03 16:03

"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote in message
news:Xns9381DEEABED95jcdmfdk@gyrosmod.cybercity.dk...

> Takker. Hvis det er koden i menu.txt der ligger til grund for
> menuen, kan jeg godt se hvad der går galt.
>
> Du har ingen if-betingelse til at tjekke om undermenuen skal
> udskrives eller ej. Derfor vil den altid komme under det første
> hovedmenupunkt.

ok, min fejl da jeg havde rettet menuen tilbage til den jeg viste frem. Jeg
havde i mellemtiden lavet en alternativ menu der skulle bruges indtil jeg
fik lavet denne. Da jeg rettede tilbage så problemet kunne vises frem,
glemte jeg if delen i farten.

> Indsæt et tjek a la:
>
> If CInt(strMenuID) = oRsMenu("menuID") Then
> ' udskriv submenu
> End If

det er _næsten_ magen til det jeg havde med i mit oprindelige indlæg.. Der
havde jeg skrevet

If strMenuID = oRsMenu("menuID") Then

forskellen består i ** CInt(strMenuID) **

Skriver jeg blot strMenuID og ikke CInt(strMenuID) opstår mit problem igen.

Hvorfor er der denne forskel?

Mange tak for hjælpen.
--

Mvh / Regards
-=< Christian >=-
What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942
" If something's hard to do, then it's not worth doing. Homer J. Simpson"





Jens Gyldenkærne Cla~ (21-05-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 21-05-03 23:05

Christian M. Nielsen skrev:

>> If CInt(strMenuID) = oRsMenu("menuID") Then
>> ' udskriv submenu
>> End If

> Skriver jeg blot strMenuID og ikke CInt(strMenuID) opstår mit
> problem igen.

Det er fordi der er forskel på et tal og en tekst.

I asp gælder at
3 <> "3"

En variabel hentet med Request (.Form/.Querystring) vil altid være
af typen tekst. I en postsæt (rs("feltnavn")) er det datatypen i
databasen der bestemmer hvilken datatype værdien får i asp. Et
talfelt vil resultere i en talværdi.

Derfor er det nødvendigt at typecaste så man sammenligner ens
typer.

Skriver man

Hvis vi fortsætter eksemplet ovenfor kan man skrive følgende sande
udsagn:
   CStr(3) = "3"
   CStr("3") = "3"
og
   Cint(3) = 3
   Cint("3") = 3
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Christian M. Nielsen (22-05-2003)
Kommentar
Fra : Christian M. Nielsen


Dato : 22-05-03 05:29


> En variabel hentet med Request (.Form/.Querystring) vil altid være
> af typen tekst. I en postsæt (rs("feltnavn")) er det datatypen i
> databasen der bestemmer hvilken datatype værdien får i asp. Et
> talfelt vil resultere i en talværdi.
>
> Derfor er det nødvendigt at typecaste så man sammenligner ens
> typer.
>
> Skriver man

Tak for forklaringen.
--

Mvh / Regards
-=< Christian >=-
What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942
" If something's hard to do, then it's not worth doing. Homer J. Simpson"



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408935
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste