Avatar billede flashit Nybegynder
02. januar 2004 - 12:01 Der er 35 kommentarer og
1 løsning

Kan man bruge paging på en mappe?

Hej E.

Jeg har et script som visser alle billeder i en mappe, men jeg kunne godt tænke mig, at man kunne bruge paging på denne mappe.
Kan man det?

Hvis ja, er her så en som vil hjælpe mig på vej :-)

Min nuværende kode er:

<html>
<head>
<title>Vælg billede</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/JavaScript">
function skrivsti(str)
{
opener.document.Indlaeg.Tekst.value +='<img src="';
opener.document.Indlaeg.Tekst.value +=str;
opener.document.Indlaeg.Tekst.value +='">';
window.close();
}
</script>


</head>

<body bgcolor="#FFFFFF" text="#000000">
<p>
  <%
Function ShowFolderList()
    folderspec = server.mappath("/Images/files/")
    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(folderspec)
    Set foldercollection = folder.Files
    For Each file in foldercollection
    if lcase(right(file, 4)) = ".jpg" then
      tmp = tmp & "<a href='#'><img src='/Images/files/"& file.name &"' onClick='skrivsti(this.src)' border='0'></a><BR>"
    end if
    Next
    ShowFolderList = tmp
End Function
response.write showfolderlist()
%>
</p>
</body>
</html>
Avatar billede flashit Nybegynder
02. januar 2004 - 12:10 #1
Eller en tilsvarende funktion :-)
Avatar billede deeflate Nybegynder
02. januar 2004 - 12:31 #2
Jeg har noget liggende - lige et øjeblik, så skal jeg finde det frem...
Avatar billede flashit Nybegynder
02. januar 2004 - 12:33 #3
Super
Avatar billede deeflate Nybegynder
02. januar 2004 - 12:35 #4
Det skal nok passes lidt mere til, men her er det i hvert fald:

<%

  '***********************************************************************
  '******** Her bestemmer du antal billeder pr. side ****************
  '***********************************************************************
  antalPrSide = 20


  on error resume next

  Set objFS = CreateObject("Scripting.FileSystemObject")
  Set objFolder = objFS.GetFolder(Server.MapPath(Mappe))

  'linien herunder kan du bruge, hvis du ønsker at anvende en absolut sti
  'Set objFolder = objFS.GetFolder(ImageDir)


  Set objFiles = objFolder.Files

  response.write "<table border=1 width=100% cellspacing='0' cellpadding='4' bordercolor='#666666'><tr>"

  total = 0

  Dim arrBilleder()

  intPage = CInt(Request.QueryString("Page"))
  If intPage = 0 Then
    intPage = 1
  End If

  For Each Image In objFiles
 
    If InStr(Image.Name,".") Then
      var=split(Image.Name,".")

      if LCase(var(1)) = "png"  or LCase(var(1)) = "gif" or LCase(var(1)) = "jpeg" or LCase(var(1)) = "jpg" or LCase(var(1)) = "bmp" or LCase(var(1)) = "tga" Then
        total = total + 1
      End if
    End if
  Next

    'Get the total number of pages in the subdirectory
    If (total/antalPrSide) = (int(total/antalPrSide)) Then
        antalSider = int(total/antalPrSide)
    Else
        antalSider = int(total/antalPrSide)+1
    End If

    Redim arrBilleder(2,total)

    'Store picture file names in an array
    x = 0
    For Each objFileItem in objFiles
        strExt = LCase(Right(objFileItem.Name,4))
        If strExt=".gif" OR strExt=".jpg" THEN
            arrBilleder(0,x) = objFileItem.Name
            arrBilleder(1,x) = Cstr(int(x/antalPrSide)+1)
            x = x + 1
        End if
    Next


    For x = 0 to UBound(arrBilleder,2)-1
    If CInt(arrBilleder(1,x)) = intPage Then
      ShowPic = Replace(arrBilleder(0,x), " ", "%20")
      Response.Write "<td align='left' valign='bottom'><a href='#' onClick='skrivsti(this.src)'"
      Response.Write "<img src='thumbnail.asp?fileName=" & Mappe & arrBilleder(0,x) & "&size=100' alt='" & arrBilleder(0,x) & "' border='0'>"
      Response.Write "</a></td>" & vbcrlf

      PictureNo = PictureNo + 1
      If PictureNo=4 Then
          Response.write "</tr><tr>"
          PictureNo = 0
      End if
    End If
    Next


    'Determine if there are multiple pages and if so, display page numbers.
    If antalSider > 1 Then
        Response.Write "<tr><td colspan='4' align='left'>Side:&nbsp;&nbsp;&nbsp;"
        For x = 1 to antalSider
            If x = intPage Then
                Response.Write  x & "&nbsp;&nbsp;&nbsp;&nbsp;"
            Else
                Response.Write "<a href='" & curFile & "?Page=" & x & "'>" & x & "</a>&nbsp;&nbsp;&nbsp;&nbsp;"
            End If
        Next
        Response.Write "</td>"
    End If

    Set objFSO = Nothing

%>

</tr>
</table>
Avatar billede deeflate Nybegynder
02. januar 2004 - 12:36 #5
Jeg har brugt det som en included fil.
Mappe er blevet sat i den fil, der includer ovenstående.
Avatar billede deeflate Nybegynder
02. januar 2004 - 12:39 #6
Og thumbnail.asp er en ekstern fil, der har genereret thumbs af billederne i mappen.
Hvis du vil have den med også, skal du bare sige til - ellers kan du naturligvis bare erstatte

'thumbnail.asp?fileName=" & Mappe & arrBilleder(0,x) & "&size=100'

med '" & Mappe & arrBilleder(0,x) & "'
Avatar billede flashit Nybegynder
02. januar 2004 - 13:13 #7
Hej deeflate

Det ser meget lovende ud :-)
Men når jeg rettet stien til, så viser den ingen billeder.

Her der den del som jeg har rettet til:

  Set objFS = CreateObject("Scripting.FileSystemObject")
'  Set objFolder = objFS.GetFolder(Server.MapPath("files/"))
Set objFolder = objFS.GetFolder(Server.MapPath(Mappe))


  'linien herunder kan du bruge, hvis du ønsker at anvende en absolut sti
Set objFolder = objFS.GetFolder("files/")

samt

Response.Write "<td align='left' valign='bottom'><a href='#' onClick='skrivsti(this.src)'"
      'Response.Write "<img src='thumbnail.asp?fileName=" & Mappe & arrBilleder(0,x) & "&size=100' alt='" & arrBilleder(0,x) & "' border='0'>"
      Response.Write "<img src='" & Mappe & arrBilleder(0,x) & "' alt='" & arrBilleder(0,x) & "' border='0'>"
      Response.Write "</a></td>" & vbcrlf


Jeg vil også meget gerne have thumbnail.asp filen også
Avatar billede flashit Nybegynder
02. januar 2004 - 13:19 #8
Der komme ingen fejl heller ikke hvis jeg skriver en mappe som ikke findes?
Avatar billede flashit Nybegynder
02. januar 2004 - 13:21 #9
DOH, der kommer ingen fejl da der står:
on error resume next
Avatar billede netro Nybegynder
02. januar 2004 - 13:31 #10
Hop ud igen med:

On Error GoTo 0
Avatar billede flashit Nybegynder
02. januar 2004 - 13:35 #11
Det er i denne linie fejlen er:
Response.Write "<img src='" & Mappe & arrBilleder(0,x) & "' alt='" & arrBilleder(0,x) & "' border='0'>"

den udskriver:

<td align='left' valign='bottom'><a href='#' onClick='skrivsti(this.src)'<img src='files/designIde2.jpg' alt='designIde2.jpg' border='0'></a></td>

Men hvordan får jeg " ind istedet for ' ved <img src=
Avatar billede deeflate Nybegynder
02. januar 2004 - 13:35 #12
Til at sætte objFolder kan du jo bare nøjes med det, du havde før, nemlig server.mappath("/Images/files/")
Og så skal du udkommentere den linie til absolut sti (eller rent faktisk anvende en absolut sti...).

Altså:

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder(server.mappath("/Images/files/"))

'linien herunder kan du bruge, hvis du ønsker at anvende en absolut sti
'Set objFolder = objFS.GetFolder("files/")

...
Avatar billede deeflate Nybegynder
02. januar 2004 - 13:38 #13
to " bliver til et - altså skriv "" i stedet for "
Men det er ikke nødvendigt.
Problemet er nok nærmere at du ikke afslutter dit a-tag
Avatar billede deeflate Nybegynder
02. januar 2004 - 13:41 #14
Kom lige til at se, at det jo er mig, der ikke har afluttet dit a-tag ;)

Udskift dette:

Response.Write "<td align='left' valign='bottom'><a href='#' onClick='skrivsti(this.src)'"
Response.Write "<img src='thumbnail.asp?fileName=" & Mappe & arrBilleder(0,x) & "&size=100' alt='" & arrBilleder(0,x) & "' border='0'>"


Med dette:

Response.Write "<td align='left' valign='bottom'><a href='#' onClick=""skrivsti(this.src)"">"
Response.Write "<img src='" & Mappe & arrBilleder(0,x) & "' alt='" & arrBilleder(0,x) & "' border='0'>"

Det skulle hjælpe...
Avatar billede flashit Nybegynder
02. januar 2004 - 13:48 #15
Dette hjalp:
Response.Write "<td align='left' valign='bottom'><a href='#' onClick=""skrivsti(this.src)"">"
      Response.Write "<img src='" & "files/" & arrBilleder(0,x) & "' alt='" & arrBilleder(0,x) & "' border='0'>"

:-)

MEN
Man kan ikke skifte imellem siderne, det vil sige at når man klikker på side 2 så er det de samme billeder der bliver vist?
Avatar billede deeflate Nybegynder
02. januar 2004 - 13:52 #16
Det er højst sandsynligt fordi sidetallet ikke bliver sendt med, da curFile (current file) ikke er sat.
Prøv at sætte curFile eller prøv at skifte

Response.Write "<a href='" & curFile & "?Page=" & x & "'>" & x & "</a>&nbsp;&nbsp;&nbsp;&nbsp;"

Ud med

Response.Write "<a href='?Page=" & x & "'>" & x & "</a>&nbsp;&nbsp;&nbsp;&nbsp;"
Avatar billede deeflate Nybegynder
02. januar 2004 - 13:58 #17
Hvis du bruger andre querystrings skal de selvfølgelig også skrives med her...
Avatar billede flashit Nybegynder
02. januar 2004 - 13:59 #18
Det gav ingen effekt :-(

Du får lige hele koden, så der er til at se, om jeg har skrevet noget forkert:

<html>
<head>
<title>test paging</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">

<%

  '***********************************************************************
  '******** Her bestemmer du antal billeder pr. side ****************
  '***********************************************************************
  antalPrSide = 3


  'on error resume next

  Set objFS = CreateObject("Scripting.FileSystemObject")
  Set objFolder = objFS.GetFolder(Server.MapPath("files/"))
  'Set objFolder = objFS.GetFolder(Server.MapPath(Mappe))


  'linien herunder kan du bruge, hvis du ønsker at anvende en absolut sti
'Set objFolder = objFS.GetFolder("files/")


  Set objFiles = objFolder.Files

  response.write "<table border=1 width=100% cellspacing='0' cellpadding='4' bordercolor='#666666'><tr>"

  total = 0

  Dim arrBilleder()

  intPage = CInt(Request.QueryString(""))
  If intPage = 0 Then
    intPage = 1
  End If

  For Each Image In objFiles
 
    If InStr(Image.Name,".") Then
      var=split(Image.Name,".")

      if LCase(var(1)) = "png"  or LCase(var(1)) = "gif" or LCase(var(1)) = "jpeg" or LCase(var(1)) = "jpg" or LCase(var(1)) = "bmp" or LCase(var(1)) = "tga" Then
        total = total + 1
      End if
    End if
  Next

    'Get the total number of pages in the subdirectory
    If (total/antalPrSide) = (int(total/antalPrSide)) Then
        antalSider = int(total/antalPrSide)
    Else
        antalSider = int(total/antalPrSide)+1
    End If

    Redim arrBilleder(2,total)

    'Store picture file names in an array
    x = 0
    For Each objFileItem in objFiles
        strExt = LCase(Right(objFileItem.Name,4))
        If strExt=".gif" OR strExt=".jpg" THEN
            arrBilleder(0,x) = objFileItem.Name
            arrBilleder(1,x) = Cstr(int(x/antalPrSide)+1)
            x = x + 1
        End if
    Next

    For x = 0 to UBound(arrBilleder,2)-1
    If CInt(arrBilleder(1,x)) = intPage Then
      ShowPic = Replace(arrBilleder(0,x), " ", "%20")
      Response.Write "<td align='left' valign='bottom'><a href='#' onClick=""skrivsti(this.src)"">"
      Response.Write "<img src='" & "files/" & arrBilleder(0,x) & "' alt='" & arrBilleder(0,x) & "' border='0'>"
      Response.Write "</a></td>" & vbcrlf

      PictureNo = PictureNo + 1
      If PictureNo=4 Then
          Response.write "</tr><tr>"
          PictureNo = 0
      End if
    End If
    Next


    'Determine if there are multiple pages and if so, display page numbers.
    If antalSider > 1 Then
        Response.Write "<tr><td colspan='4' align='left'>Side:&nbsp;&nbsp;&nbsp;"
        For x = 1 to antalSider
            If x = intPage Then
                Response.Write  x & "&nbsp;&nbsp;&nbsp;&nbsp;"
            Else
                'Response.Write "<a href='" & curFile & "?Page=" & x & "'>" & x & "</a>&nbsp;&nbsp;&nbsp;&nbsp;"
                Response.Write "<a href='?Page=" & x & "'>" & x & "</a>&nbsp;&nbsp;&nbsp;&nbsp;"
            End If
        Next
        Response.Write "</td>"
    End If

    Set objFSO = Nothing

%>

</tr>
</table>


<p>&nbsp;</p>
<p>&nbsp;</p>
</body>
</html>
Avatar billede deeflate Nybegynder
02. januar 2004 - 14:04 #19
Du er vist kommet til at lave om i denne linie:

intPage = CInt(Request.QueryString(""))

Hvor sidetallet jo hentes fra querystring'en.

Her skulle stå:

intPage = CInt(Request.QueryString("Page"))
Avatar billede flashit Nybegynder
02. januar 2004 - 14:16 #20
Du er fanme helt kanon.

Mange tak for din store hjælp :-)
Her er lidt flere p end først afsat.

PS. må jeg også få din thumbnail.asp fil?
Avatar billede deeflate Nybegynder
02. januar 2004 - 14:22 #21
Takker :)

thumbnail.asp:

<%
on error resume next

FileName = request.querystring("FileName")

Set objImg = Server.CreateObject("AspImage.Image")
objImg.LoadImage server.MapPath(FileName)
ImageHeight = objImg.MaxY
ImageWidth = objImg.MaxX
size = Cint(request.querystring("size"))

if ImageHeight < size then
Set Image = Server.CreateObject("AspImage.Image")
Image.LoadImage server.MapPath(FileName)
Image.ImageFormat = 1
Image.JPEGQuality = 80
Response.BinaryWrite Image.Image
Set Image = Nothing
Set objImg = Nothing
end if

NewHeight = Cint(ImageHeight*size/ImageWidth)
NewWidth = size
Set objImg = Nothing
Set Image = Server.CreateObject("AspImage.Image")
Image.LoadImage server.MapPath(FileName)
Image.ImageFormat = 1
Image.JPEGQuality = 80
Image.ResizeR NewWidth,NewHeight
Response.BinaryWrite Image.Image
Set Image = Nothing
%>


Der kan ikke udskrives html eller noget fra denne fil, og den skal ligge som ekstern fil, altså ikke inkluderes.
Du kalder den som i mit eksempel, således at den er src og får filename og size fra querystring'en.
Den kan vist ikke lave billederne bredere end 300 (eller var det 400?), men det kan du jo lige prøve ad, hvis det bliver nødvendigt.
Avatar billede deeflate Nybegynder
02. januar 2004 - 14:29 #22
Stien skal selvfølgelig også være en del af filename - og du må nok hellere sikre dig, at der ikke bliver blandet / og \ - kør evt. en replace.
Nu ved jeg ikke hvor du er hostet, men nogle steder skal det være en absolut sti til billedmappen.
Hvis det skal det, må du lige indføre en variabel, f.eks. sti, med den absolutte sti. Så skal stien ikke med via querystring'en, og så skal du skifte

server.MapPath(FileName)

ud med

sti & FileName
Avatar billede flashit Nybegynder
03. januar 2004 - 18:17 #23
Hej deeflate

Er du frisk på hjælp til thumpnail.asp også, selvfølgelig for de dyrbare points :-)
Avatar billede deeflate Nybegynder
03. januar 2004 - 18:49 #24
Naturligvis.
Hvad er problemet?
Avatar billede flashit Nybegynder
03. januar 2004 - 20:23 #25
Mange tak.

Filen ligger her:
http://www.dotdk.dk/images/pagingthumb.asp

som du kan se så viser den ingen billeder, men jeg kan ikke helt finde ud af hvad der rent faktisk skal skrive før det virker.
Avatar billede deeflate Nybegynder
03. januar 2004 - 21:06 #26
Og det virker, når du ikke kalder thumbnail.asp, ikke sandt?
Hvis det var fordi du fik angivet den forkerte sti, burde den vise et broken image...
Prøv at fjerne on error resume next og se hvad der sker.
Avatar billede deeflate Nybegynder
03. januar 2004 - 21:06 #27
Ahhh! Start med at afslutte dit a-tag !
Det kunne forklare det ;)
Avatar billede flashit Nybegynder
03. januar 2004 - 21:14 #28
Sorry, dat var jo den gamle fejl. Det er nu rettet, og der kommer de broken images frem
Avatar billede flashit Nybegynder
03. januar 2004 - 21:24 #29
Her er den linie som udskriver billede linket:
Response.Write "<img src='thumbnail.asp?fileName=" & """files/" & arrBilleder(0,x) & """&size=100' alt='" & arrBilleder(0,x) & "' border='0'>"
Avatar billede deeflate Nybegynder
03. januar 2004 - 21:38 #30
Ok, hvis du prøver at højreklikke på de broken images og vælge egenskaber, så kan du se den querystring, der bliver sendt til thumbnail.asp - og den er noget sludder.
Skift den linie som udskriver billedlinket ud med dette her:

Response.Write "<img src='thumbnail.asp?fileName=files/" & arrBilleder(0,x) & "&size=100' alt='" & arrBilleder(0,x) & "' border='0'>"

Hvad sker der nu?
Avatar billede flashit Nybegynder
03. januar 2004 - 21:40 #31
Hvad fa%#/, kan man det. Ok prøver det lige :-)
Avatar billede flashit Nybegynder
03. januar 2004 - 21:43 #32
Det var da smart....
Så sender den nedenstående til thumbnail.asp:
http://www.dotdk.dk/images/thumbnail.asp?fileName=files/IMG_1290-copy.jpg&size=100

Men jeg er stadig ikke med på hvad den skal sende?
Avatar billede deeflate Nybegynder
03. januar 2004 - 22:13 #33
Det kommer an på, hvad du bruger i thumbnail.asp.
Hvis du bruger server.MapPath som i det eksempel jeg har postet her, så skal du bruge den relative sti og den skal sendes med via querystring, som du gør det lige nu.
Hvis det ikke virker, så prøv at bruge en absolut sti, altså den komplette sti, som f.eks. d:\web\dotdk.dk\images\files\ - eller hvad den nu er...
Hvis det ligger på din egen server, ja så skulle det være let nok.
Men hvis ikke, og du ikke kender den, så kan du sikkert finde den på din udbyders site under support eller noget.
Den absolutte sti skal ikke sendes med i querystring'en - den skal bare stå i en variabel inde i thumbnail.asp, som du passende kan kalde "sti".
Og så skal den relative sti jo så selvfølgelig heller ikke sendes med via querystring'en.

Det vil altså sige at du skal udskrive linket til billedet sådan her:

Response.Write "<img src='thumbnail.asp?fileName=" & arrBilleder(0,x) & "&size=100' alt='" & arrBilleder(0,x) & "' border='0'>"

Og inde i thumbnail.asp skal du så i stedet gøre sådan her

FileName = request.querystring("FileName")
sti = "c:\den\absolutte\sti" 'hvad den så end måtte være

Set objImg = Server.CreateObject("AspImage.Image")
objImg.LoadImage sti & FileName 'husk at rette dette i alle 3 tekstblokke!


Håber det hjælper lidt.

Prøv at lege lidt med forskellige stier.
Avatar billede deeflate Nybegynder
03. januar 2004 - 22:21 #34
Du kan bl.a. teste lidt ved at prøve at udskrive stierne på pagingthumb.asp ved f.eks. at skrive

response.Write server.MapPath("files/" & arrBilleder(0,x))

Så kan du få testet om det overhovedet giver den rigtige sti.
Avatar billede flashit Nybegynder
03. januar 2004 - 23:07 #35
Så gav jeg op, og fandt en anden løsning.
Du kan se den her, hvis du gider :-)
http://www.dotdk.dk/images/pagingtest.asp?Page=1

Denne løsning har den fordel at man ikke behøver hente billederne i fuld størrelse, inden man klikker på billedet.

Det er de samme billeder som ligger som thumb og large, men det var bare for at teste.

Men du skal have mange tak for din store tålmodighed.
Jeg opretter lige et spg, så du kan få lidt points for din hjælp.

Som sagt MANGE TAK :-)
Avatar billede deeflate Nybegynder
03. januar 2004 - 23:16 #36
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