Avatar billede moejensen Nybegynder
27. marts 2004 - 19:16 Der er 15 kommentarer og
1 løsning

listning af thumbnails med paging

Jeg har brug for lidt hjælp til følgende funktion:

Jeg skal have lavet en funktion der hiver nogle billedenavne ud af en database, hvor FolderID er lig med en værdi den får fra en dropdownbox. de billeder den så hiver ud har jeg så tænkt mig at skulle listes i 3 rækker med 6 billeder i hver, og hvis der er flere end de 18 billede, skal der være nogle page pige og numre med antal sider.

Er der nogen der kan hjælpe mig med dette problem?
Avatar billede eagleeye Praktikant
27. marts 2004 - 20:03 #1
Her er et eksempkle på koden:


<%
sti = "./" 'relativ sti, skal slutte med /
Set fs = Server.CreateObject( "Scripting.FileSystemObject" )
Set Folder = fs.GetFolder( Server.Mappath(sti) )

strFil = Request.ServerVariables("SCRIPT_NAME")

filList = ""
For Each file in Folder.Files
  filList = filList & "," & file.Name
next
if filList <> "" then filList = Mid(filList,2)
filArr = Split(filList,",")
filArr = Sorter(filArr)
%>

<table width="100%">
<%
start = Request.Querystring("start")
if start = "" then start = 0 
antalBillederPrSide = 40
imgPrRow = 0
maxImgPrRow = 4
Antalsider = int(ubound(filArr) / antalBillederPrSide)
for i = start to (start + antalBillederPrSide-1)
  if not i > ubound(filArr) then
    if imgPrRow = 0 then Response.Write "<tr>" 
%> 
  <td align="center"><img src="<%=sti%><%=filArr(i)%>" border="0" alt="<%=filArr(i)%>">
  </td>
<%
    imgPrRow = imgPrRow + 1
    if imgPrRow = maxImgPrRow then
      Response.Write "</tr>"
      imgPrRow = 0
    end if
  else
    nesteside = 1
    'ikke flere filer at vise
    exit for
  end if
Next
if imgPrRow > 0 then Response.Write "</tr>"
%>
</table>
<%
if start <> 0 then
  response.write "<a href="""&strFil&"?start=" & (start - antalBillederPrSide) & """>Forrige</a>"
end if

response.write(" ")

for i = 0 to Antalsider
  response.write "<a href="""&strFil&"?start=" & ((i)*antalBillederPrSide) & """>"&(i+1)&"</a> "
next

response.write(" ")
if nesteside <> 1 then
  response.write "<a href="""&strFil&"?start=" & (start + antalBillederPrSide) & """>Næste</a>"
end if
%>
Avatar billede eagleeye Praktikant
27. marts 2004 - 20:04 #2
Denne linje, skal lige slettes:
filArr = Sorter(filArr)

Det er en sorter funtion som ikke er med i den viste kode (men du må gerne se den hvis du vil)
Avatar billede moejensen Nybegynder
27. marts 2004 - 21:29 #3
det er vidst lige meget med sortering :-)

hvad skal jeg skifte ud, hvis jeg har billederne i et recordset fra en db ex.

Set Rs = Conn.Execute("SELECT * FROM Pictures WHERE folderID =1")

Hvis du har tid, må du også meget gerne stikke snude i dette her spg: http://eksperten.dk/spm/482728
jeg har makket med det hele dagen, og fatter ikke hvorfor det ikke vil virke - det er sikkert en eller anden latterlig fejl :-(
Avatar billede moejensen Nybegynder
27. marts 2004 - 21:33 #4
jeg har lige kigget lidt mere på dit script, og kan måske selv få den koblet sammen med databasen...jeg giver det lige et godt forsøg. Jeg vender tilbage hvis jeg får problemer.
Avatar billede eagleeye Praktikant
27. marts 2004 - 21:33 #5
Har du det hele i databasen, filnavnet på filen?
Avatar billede eagleeye Praktikant
27. marts 2004 - 21:34 #6
Hvis du har det hele i databasen kan du jo bruge paging af recordset.
Avatar billede moejensen Nybegynder
27. marts 2004 - 21:42 #7
i databasen hat jeg filnavne og folderID (hvilken kategori billedet høre til) billederne ligger fysisk bare i en mappe.

Er det bedre at bruge recordset paging?
Avatar billede eagleeye Praktikant
27. marts 2004 - 21:46 #8
Det kommer vel lidt an på hvad man ønsker. Hvis du vil hente data fra databasen om hvilke filer der skal vises, ville det være letest.
Hvis du vil liste alle filerne i foldren uden at hente noget fra databasen så det i stil med det jeg har vist, hvor den laver et array med alle filerne.
Avatar billede moejensen Nybegynder
27. marts 2004 - 21:52 #9
I princippet er det bare fra databasen jeg ville liste dem, så jeg har lavet følgende ved det eksempel du skrev, og det virker umiddelbart fint:

<!--#include virtual="/includes/db.asp"-->
<%
    intId = 1
    Set Rs = Conn.Execute("SELECT FileName FROM Pictures WHERE WebShow = YES AND FolderId = "& intId &";")

filList = ""
Do while not Rs.eof
  filList = filList & "," & Rs("FileName")
rs.movenext
loop
if filList <> "" then filList = Mid(filList,2)
filArr = Split(filList,",")
%>

<table width="400">
<%
start = Request.Querystring("start")
if start = "" then start = 0 
antalBillederPrSide = 16
imgPrRow = 0
maxImgPrRow = 8
Antalsider = int(ubound(filArr) / antalBillederPrSide)
for i = start to (start + antalBillederPrSide-1)
  if not i > ubound(filArr) then
    if imgPrRow = 0 then Response.Write "<tr>" 
%> 
  <td align="center"><img src="/images/Pictures/<%=filArr(i)%>" height="40" width="40" border="0">
  </td>
<%
    imgPrRow = imgPrRow + 1
    if imgPrRow = maxImgPrRow then
      Response.Write "</tr>"
      imgPrRow = 0
    end if
  else
    nesteside = 1
    'ikke flere filer at vise
    exit for
  end if
Next
if imgPrRow > 0 then Response.Write "</tr>"
%>
</table>
<%
if start <> 0 then
  response.write "<a href=""test.asp?start=" & (start - antalBillederPrSide) & """>Forrige</a>"
end if

response.write(" ")

for i = 0 to Antalsider
  response.write "<a href=""test.asp?start=" & ((i)*antalBillederPrSide) & """>"&(i+1)&"</a> "
next

response.write(" ")
if nesteside <> 1 then
  response.write "<a href=""test.asp?start=" & (start + antalBillederPrSide) & """>Næste</a>"
end if
%>
Avatar billede eagleeye Praktikant
27. marts 2004 - 21:57 #10
ok, men et alternativ kunne være paging af recordset:
http://activedeveloper.dk/artikler/default.asp?articleid=31
Avatar billede moejensen Nybegynder
27. marts 2004 - 22:12 #11
jeg kigger lige på det :-)
Avatar billede moejensen Nybegynder
27. marts 2004 - 23:32 #12
laver du lige et svar her også :-)
Avatar billede eagleeye Praktikant
27. marts 2004 - 23:34 #13
Ok det gør jeg da :)
Avatar billede moejensen Nybegynder
28. marts 2004 - 10:21 #14
Har du noget bud på hvordan jeg får sat billederne op ihttp://activedeveloper.dk/artikler/default.asp?articleid=31 på samme måde som du gør i dit eksempel?
Avatar billede eagleeye Praktikant
28. marts 2004 - 11:11 #15
Ja prøv sådan, dette er koden inde i den if sætning som udskriver


If Not (rs.BOF Or rs.EOF) Then
  antalPrRow = 3
  antal=0
  rs.PageSize = 10
  rs.AbsolutePage = intPage
  intRecCount = rs.PageSize
  intPageCount = rs.PageCount
  response.write "<table>"
  Do While Not rs.EOF And intRecCount > 0
    if antal = 0 then Response.Write "<tr>"
%>
    <td align="center"><img src="/images/Pictures/<%=rs("filnavn")%>" height="40" width="40" border="0">
  </td>
<%
    antal = antal + 1
    if antal = antalPrRow then
      Response.Write "</tr>"
      antal = 0
    end if
    intRecCount = intRecCount - 1
    rs.MoveNext
  Loop
  if antal > 0 then Response.Write "</tr>"
  Response.Write "</table>"
End If
Avatar billede moejensen Nybegynder
28. marts 2004 - 12:40 #16
tusind tak :-) - det virker bare
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