Avatar billede razser Nybegynder
14. februar 2005 - 09:05 Der er 8 kommentarer og
1 løsning

Alfabetisk sitemap

Jeg skal have lavet et sitemap, der ordner siderne i alfabetiske kategorier, og har brug for en smart måde at loope på. Databasen er Access.

Sitemap'et skal se sådan ud:

A
Aftaler
Arrangementer

B
Bestyrelse
Brugsanvisninger
Bøger

etc.

Mit foreløbige script ser således ud:

<%
Dim letters, arrLetters
letters = "A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, Æ, Ø, Å"
arrLetters = Split(letters,",")
For t = 0 to 28
Next

set conn = server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("Pages.mdb")

SQL = "SELECT * FROM Page WHERE PageMenu LIKE '[A]%' ORDER BY PageMenu"
Set rs = Conn.Execute(SQL)
if not rs.EOF Then
Response.Write arrLetters(0)
END if
do while not rs.EOF
Response.Write "<br><a href=" & chr(34) & "Index.asp?ID=" & RS("PageID") & chr(34) & ">" & RS("PageMenu") & "</a>"
rs.Movenext
loop
 
rs.close 
Conn.Close
Set Conn = nothing 
  %>


Scriptet skriver alle sider ud, der begynder med A. Men for ikke at skulle gentage SELECT-sætningen for alle bogstaver, kan man så ikke lave en loop?
Avatar billede keysersoze Ekspert
14. februar 2005 - 09:29 #1
hvorfor skriver du ikke bare

SELECT * FROM Page ORDER BY PageMenu

?
Avatar billede razser Nybegynder
14. februar 2005 - 09:32 #2
Fordi det da blot vil stå ud i et:

Aftaler
Arrangementer
Bestyrelse
Brugsanvisninger
Bøger
...
...

Det virker mere overskueligt på den anden måde...mener jeg... omend også lidt mere besværligt...
Avatar billede keysersoze Ekspert
14. februar 2005 - 09:40 #3
Det er jo "bare" at sætte en if-sætning ind.

fx;

STARTBOGSTAV = ""
do while not rs.eof
  If STARTBOGSTAV <> left(rs("pagemenu"),1) Then
    response.write left(rs("pagemenu"),1)
    STARTBOGSTAV = left(rs("pagemenu"),1)
  End If
  'din normale udskrivning
rs.movenext
loop
Avatar billede razser Nybegynder
14. februar 2005 - 13:14 #4
Jeg blev lige afbrudt nogle timer, men har lige testet det og det virker perfekt, tak!  Så sendt endelig et svar... :)
Avatar billede razser Nybegynder
14. februar 2005 - 13:22 #5
Hvis jeg gerne vil skrive det ud i 2 kolonner, hvordan gør jeg så det lettest? Jeg vil narturligvis gerne give flere points....
Avatar billede keysersoze Ekspert
14. februar 2005 - 13:58 #6
det samme stort set. opbyg det i tabeller og lav i dit loop en counter - fx

counter = 0
'loop start
  counter = counter + 1
  if counter = 2 then
    response.write "</tr><tr>"
    counter = 0
  end if
  'udskriv
'loopend
Avatar billede razser Nybegynder
14. februar 2005 - 15:31 #7
Hmmm, det blev ikke helt som jeg havde forestillet mig - måske gjorde jeg det forkert, men jeg vil helst ikke have en celle til hvert element. Snarere en celle - eller (endnu bedre) et div lag - til halvdelen af posterne hver. Jeg prøver at arbejde videre med det. Men post et svar, der er 70 points... Tak for hjælpen...
Avatar billede keysersoze Ekspert
14. februar 2005 - 15:53 #8
svar :)
Avatar billede keysersoze Ekspert
14. februar 2005 - 15:53 #9
DOH!
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
Kurser inden for grundlæggende programmering

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