27. februar 2008 - 15:25Der er
17 kommentarer og 1 løsning
Hjælp til "paging"
Hej,
Jeg har et problem har tidl. uden problemer brugt Paging til at sætte 1,2,3... ind på min sider så der kun var eks. 10 resultater pr. side.
Nu har jeg så bare et andet problem, denne gang kan jeg ikke hente værdierne fra en database, men skal hente dem fra en mappe på min server.
Jeg forestiller mig noget med at man tæller hvor mange filer der ligger i mappen og så laver noget kode, men jeg kan ikke helt gennemskue det, jeg har lavet noget kode men det er simpelthen fr mange bugs i det.
Jeg skal bruge 8 filer på hver side, nogen der kan hjælpe?
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Du kan bygge en liste af filer og så holde denne liste i hukommelsen. Når brugeren beder om en side indekserer du dig ned i listen og viser de relevante filer fra mappen. Listen kunne ligge i et array, så er det let at indeksere.
if request.QueryString("itemPrPage") <> "" and isNumeric(request.QueryString("itemPrPage")) = True then ThumbPrPage = (request.QueryString("itemPrPage") - 1) from = ThumbPrPage - 7 else ThumbPrPage = 8-1 ' since we put it in an array, array always start from 0 from = 0 end if set rs = nothing
Dim fso, f, f1, fc, s, f2 Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(server.MapPath("/fileFolder/" & rootFolder)) Set fc = f.Files
colPrRow = 0 maxColPrRow = 4
for each fl in fc
strFiles = strFiles & fl.name & ","
next
arrFiles = Split(strFiles,",")
For i = from to ThumbPrPage on error resume next ' sikre lige at vi kun fÅr vist jpgs... windows laver nogle dumme .db filer.. path = path1 & "/" & arrFiles(i)
if colPrRow = 0 then html = html & "<tr>" end if
' her skal lige tilpasses lidt... html = html & "<td align=left>" html = html & "<a href=""#"" onclick=""java script:showImage('"& virtualPath & "/" & arrFileS(i) & "');"")>" html = html & "<img src=""/functions/thumbGen.asp?path=" & virtualPath & arrFiles(i) & "&width=135"" border=0>" html = html & "</a>" html = html & "</td>" ' tilpasset ok 2008 feb.
colPrRow = colPrRow + 1
if colPrRow = maxColPrRow then html = html & "</tr>" colPrRow = 0 end if
Jeg har lige fået flikket dette kode sammen (du kan muligvis selv flette dit eget ind i det). Det primære ved dette kode er logikken omkring sider og håndtering af arrays...
<% dim side, sidestoerrelse, antalsider dim alst sidestoerrelse = 8 antalsider = 1 alst = array() set fso = Server.CreateObject("Scripting.FileSystemObject") set fldr = fso.getFolder(Server.MapPath("/fileFolder/" & rootFolder)) for each f in fldr.Files extPos = instrrev(f.name, ".") if extPos > 0 then ext = mid(f.name, extPos) if instr(" .jpg .jpeg ", " " & ext & " ") > 0 then if ubound(alst) < 0 then redim alst(0) else redim preserve alst(ubound(alst)+1) end if set alst(ubound(alst)) = f end if end if next
' beregn antal sider antalsider = clng((ubound(alst) + 1) / sidestoerrelse) if ubound(alst) mod sidestoerrelse = 0 then antalsider = antalsider - 1 end if
' aflæs sidenr... side = request.querystring("side") & "" if side <> "" then if isnumeric(side) then side = clng(side) ' lav grænsecheck, altså om sidenr ligger indenfor antallet af elementer if side > antalsider then side = antalsider end if else side = 1 end if else side = 1 end if
' udskriv elementerne... if ubound(alst) > -1 then for i = (side - 1) * sidestoerrelse to (side - 1) * sidestoerrelse + sidestoerrelse - 1 if i <= ubound(alst) then response.write(alst(i).name & "<br>") else exit for end if next
if antalsider > 1 then for i = 1 to antalsider response.Write("<a href=""?side=" & i & """>" & i & "</a>" & vbcrlf) next end if end if %>
Ja, det må så være noget i stil med denne pagingkode i stedet:
if side > 1 then response.write("<a href=""?side=1"">Første side</a>" & vbCrLf) response.write("<a href=""?side=" & side - 1 & """>Forrige side</a>" & vbCrLf) end if
if side < antalSider then response.write("<a href=""?side=" & antalSider & """>Sidste side</a>" & vbCrLf) response.write("<a href=""?side=" & side + 1 & """>Næste side</a>" & vbCrLf) end if
Ovenstående skal altså erstatte:
for i = 1 to antalsider response.Write("<a href=""?side=" & i & """>" & i & "</a>" & vbcrlf) next
Der er en fejl i ovenstående kode, hvis der er 9 billeder så laver den ikke en ekstra side.
Det eksempel tager self. udgangspunkt i at jeg vælger 8 billeder pr. side. hvis jeg vælger 10 billeder pr. side og der ligger 11 i mappen så laver den hellere ikke en ekstra side.
' beregn antal sider antalsider = clng((ubound(alst) + 1) / sidestoerrelse) if ubound(alst) mod sidestoerrelse = 0 then antalsider = antalsider - 1 end if
med denne stump:
' beregn antal sider antalsider = clng((ubound(alst) + 1) / sidestoerrelse) if ubound(alst) mod sidestoerrelse > 0 then antalsider = antalsider + 1 end if
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.