Avatar billede mini-me Nybegynder
27. februar 2008 - 15:25 Der 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?
Avatar billede w13 Novice
27. februar 2008 - 15:33 #1
Hvordan ser den fungerende database-paging-kode ud?
Avatar billede softspot Forsker
27. februar 2008 - 15:46 #2
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.
Avatar billede mini-me Nybegynder
27. februar 2008 - 15:50 #3
softspot: det er noget ala det jeg har lavet, men det fungerere ikke helt.
Avatar billede mini-me Nybegynder
27. februar 2008 - 15:52 #4
Min midlertidige kode ser ud ala det her:


        strSQL = "SELECT * From Gallery Where Id=" & id
        set rs = Moduleconn.execute(StrSQL)
       
            thumbWidth = rs("sizethumbs") ' width
            rootfolder = rs("rootFolder") '
            virtualPath = "filefolder/" & rootFolder & "/"
           
            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
           
               
            next
       
        if colPrRow > 0 then
            html = html &  "</tr>"   
        end if
Avatar billede mini-me Nybegynder
27. februar 2008 - 19:14 #5
Nogen andre der har nogle gode ideer til hvordan det løses?
Avatar billede softspot Forsker
27. februar 2008 - 19:31 #6
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
%>
Avatar billede mini-me Nybegynder
28. februar 2008 - 10:15 #7
kan jeg evt. få den til at udskrive første side - næste side - forrige side - sidste side

i stedet for at liste 1,2,3,4,5 ?
Avatar billede softspot Forsker
28. februar 2008 - 10:32 #8
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
Avatar billede mini-me Nybegynder
28. februar 2008 - 11:04 #9
smid et svar du fortjener point ;)
Avatar billede softspot Forsker
28. februar 2008 - 11:55 #10
Velbekomme :)
Avatar billede softspot Forsker
28. februar 2008 - 17:41 #11
Tak for point :)
Avatar billede mini-me Nybegynder
30. maj 2008 - 08:41 #12
Hej,

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.
Avatar billede softspot Forsker
30. maj 2008 - 08:59 #13
Prøv lige at udskifte denne stump kode:

' 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
Avatar billede mini-me Nybegynder
30. maj 2008 - 09:40 #14
umiddelbart giver det ingen forskel.
Avatar billede softspot Forsker
30. maj 2008 - 09:45 #15
Bemærkede du at der var 2 rettelser i den kode jeg foreslog?
Avatar billede softspot Forsker
30. maj 2008 - 09:47 #16
Forsøg evt. med denne:

antalsider = clng((ubound(alst) + 1) / sidestoerrelse)
if (ubound(alst) + 1) mod sidestoerrelse > 0 then
  antalsider = antalsider + 1
end if
Avatar billede mini-me Nybegynder
30. maj 2008 - 10:07 #17
det sidste løste det :) Tak
Avatar billede softspot Forsker
30. maj 2008 - 10:09 #18
Velbekomme :)
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