Toon posts:

[ASP] image gallery navigatie script, hoe?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste mensen,

Ik ben al een tijdje bezig met een Image Gallery script. Met dit script worden plaatjes uit een map gelezen en die worden stuk voor stuk op de pagina gezet. Ik doe dit niet met een database, aangezien het te arbeidsintensief zou worden, maar met het FileSystem Object. Ik zit vast met hoe ik een navigatiescript kan maken, met: vorige 1 2 3 volgende.

Hier is het script zoals het nu is:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<%
strPat = Server.MapPath(Request.ServerVariables("PATH_INFO"))
strPatlen = CInt(Len(strPat)) - 8
strPat = Left(strPat, strPatlen)
strPat = strPat & Request.Querystring("cat") & "/"

Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strPat)
Set objFiles = objFolder.Files
%>
<table align="center">
 <tr>
<%
inttempcountrijen = 0
intaantalplaatjesnaastelkaar = 4
inttempcount = 1

For Each Item In objFiles
     If right(Item.name, 3) = "gif" Then
      %>
       <td>
            <a href="bestel.php?id=<%=Item.Name%>">
             [img]"<%=Request.Querystring("cat")%>/<%=Item.Name%>"[/img]
            </a>
           </td>
      <%
        If inttempcount = intaantalplaatjesnaastelkaar Then
             %>
                  </tr>
              <tr>
             <%
             inttempcount = 0
            End If
      inttempcount = inttempcount + 1
         End If
Next
%>


Ik heb geprobeerd te werken met een querystring. Ik dacht de eerste (Request.Querystring("start")) te kunnen skippen en dan een loop te laten draaien die 20 x draait en dus 20 plaatjes laat zien. Ik heb het al echter met meerdere if statements gedaan en for loops, do while loops, maar het wil maar niet lukken om de goede plaatjes op mijn beeldscherm te krijgen. Waarschijnlijk doe ik iets verkeerd, maar ik zou zelf niet weten wat. Graag hulp...

Verwijderd

.. je hebt door dat als je 100 plaatjes hebt je hele pagina er flink wat langer over doet om te laden, iets dat niet zo snel gebeurt bij een db ?

kijk es in een for each dinges
vb: for each v_file in v_folder
response.write
enz enz

[ Voor 0% gewijzigd door Verwijderd op 10-10-2002 16:51 . Reden: bla ]


Verwijderd

Je zou je For Each Item In objFiles moeten vervangen door een For X = (pagenumber * numofpics) to ((pagenumber * numofpics) + numofpics), en dan zorgen dat pagenumber het meegegeven paginanummer bevat, en numofpics het aantal foto's dat je per pagina wil tonen.

Enjoy :)

Verwijderd

Topicstarter
Ik ga het uittesten, het klinkt logisch iig...

Verwijderd

Topicstarter
Ik snap wel wat je bedoelt maar ik kan het niet in een werkend script zetten. Hij geeft steeds Object Vereist aan en dan iets wat ik allang heb opgegeven. Zou jij misschien willen zeggen waar wat precies moet komen te staan?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:27

gorgi_19

Kruimeltjes zijn weer op :9

Door deze regel:
code:
1
For Each Item In objFiles

Definieer je een 'onderdeel' c.q. 'regel' uit objFiles als item.
Even verderop lees je Item uit.

Je moet Item dus ook aanpassen X uitlezen uit objFiles.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Uhm, nee ... aan voorkauwen doe ik niet, want dan leer je er niets van ... maar ik zal je wel een hint geven.

In de For Each loop initialiseer je de variabele Item, maar met de For X = 1 To 10 moet je deze variabele nog initialiseren in de loop. Dat kan door de index van de objFiles collectie te gebruiken.

Succes :)

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

code:
1
2
3
For i = 10 To 20
  Response.Write obJFiles(i).Name
Next

Verwijderd

Topicstarter
Ik kom er nog niet uit. Hier is nu mijn script:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<table align="center">
 <tr>
<%For i = 1 to 10%>
<%For Each objFiles(i) In objFolder%>
 <td>
  <a href="bestel.php?id=<%=objFiles(i).Name%>">
   [img]"<%=Request.Querystring("cat")%>/<%=objFiles(i).Name%>"[/img]
  </a>
 </td>
<%Next%>
<%Next%>
 </tr>
</table>


Nu geeft ie weer aan ongeldige lusbesturing. Graag hulp... (anders was ik hier niet...)

Verwijderd

Een zetje in de juiste richting
code:
1
2
3
4
5
6
7
8
9
10
11
<table align="center">
 <tr>
<%For i = 1 to 10%> ' <-- Maar 1 lus gebruiken (zie opmerking)
 <td>
  <a href="bestel.php?id=<%=objFiles(i).Name%>">
   [img]"<%=Request.Querystring("cat")%>/<%=objFiles(i).Name%>"[/img]
  </a>
 </td>
<%Next%>
 </tr>
</table>

In jouw code gebruik je twee lussen, waarvan er 1 onzin is, en dus weggelaten is. Wat er nu in de bovenstaande code gebeurt is dat de eerste 10 plaatjes worden getoond. Nu moet je het nog zo aanpassen dat de start en eindwaarde van de variabele i dynamisch worden, afhankelijk van het paginanummer wat je meestuurt.

Succes :)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:27

gorgi_19

Kruimeltjes zijn weer op :9

Wat doe je precies:
Je hebt objFOlder, welke opgevat kan worden als een arraylist.
Met
code:
1
For Each objFiles

Zeg je: Voor iedere regel uit de arraylist; deze regel noem je objFiles
(Aangezien er sprake is van late binden; heeft deze vooralsnog geen 'type'; echter dit blijkt een filetype te zijn)
Alleen nu ga je verder met:
Voor iedere objFiles (welke al als VASTE regel is gedefinieerd) (i) (dit kan dus al niet, we hadden al een vaste regel)

Mocht het wel werken, dan loop je in ieder geval 10 keer alle bestanden door in een folder.

Een hint:

Pseudocode
code:
1
2
3
4
5
6
7
8
9
10
11
Dim I, Startgetal, Eindgetal
I = 1
Startgetal = <WAARDE>
Eindgetal = <WAARDE>

For Each objFile in objFolder
If I > Startgetal AND I < Eindgetal THEN

End if 
I = I +1
Next

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:27

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 13 oktober 2002 @ 13:11:
code:
1
2
3
4
5
6
7
8
9
10
11
<table align="center">
 <tr>
<%For i = 1 to 10%> ' <-- Maar 1 lus gebruiken (zie opmerking)
 <td>
  <a href="bestel.php?id=<%=objFiles(i).Name%>">
   [img]"<%=Request.Querystring("cat")%>/<%=objFiles(i).Name%>"[/img]
  </a>
 </td>
<%Next%>
 </tr>
</table>
MrX: Heeft jouw code niet het gewaar dat I groter kan zijn dan het aantal bestanden in de folder?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

gorgi_19 schreef op 13 oktober 2002 @ 13:18:
[...]

MrX: Heeft jouw code niet het gewaar dat I groter kan zijn dan het aantal bestanden in de folder?
Yupz ... even voor de eenvoudigheid over het hoofd gezien. 8)7

Je kan met objFiles.Count als het goed is het aantal files uitlezen. Nadat je de max. waarde van i hebt bepaald (max_i = (pagenum*img_per_page) + img_per_page) kun je checken of dit evt. meer is dan het aantal files en naar beneden bijstellen waar nodig.

Verwijderd

Topicstarter
Ik kom er nog niet uit, ik zal even mijn hele code posten, want alles wat jullie zeggen, werkt bij mij niet. (Zoals dat objFiles(i).Name, ook objFiles([hier een getal]).Name werkt niet.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%
strPat = Server.MapPath(Request.ServerVariables("PATH_INFO"))
strPatlen = CInt(Len(strPat)) - 8
strPat = Left(strPat, strPatlen)
strPat = strPat & Request.Querystring("cat") & "\"

Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strPat)
Set objFiles = objFolder.Files
%>
<table align="center">
 <tr>
<%For i = 1 to 10%>
 <td>
  <a href="bestel.php?id=<%=objFiles(i).Name%>">
   [img]"<%=Request.Querystring("cat")%>/<%=objFiles(i).Name%>"[/img]
  </a>
 </td>
<%Next%>
 </tr>
</table>


Ik draai PWS, dus dat is enkel ASP 2.0 en niet hoger. Kan het daaraan liggen en zo niet, waar ligt het dan wel aan?

Als ik het path naar test.asp intyp en dan ?cat=1 doe, dan krijg ik devolgende foutmelding:

Serverobject fout 'ASP 0177 : 80070057'

Server.CreateObject mislukt

/[map]/test.asp, regel 15

00000000

Help gewenst....

Verwijderd

Tja ... ik geloof dat PWS geen COM componenten, zoals het FileSystemObject, ondersteunt, dus is dit helaas niet mogelijk. Sorry.

Verwijderd

Topicstarter
PWS ondersteunt wel COM, maar ik denk maar gedeeltelijk. Bij mij werkt dat objFiles(getal).Name bijvoorbeeld niet. Kun je de code dusdanig verbeteren, dat ie volgens jou werkt, want bij mij doen dus veel dingen het niet. doei

tmmk

Verwijderd

Als hij een fout geeft op Server.CreateObject, dan kan ik er weinig anders van maken dan dat het daar fout gaat, en niet veel verder pas. Daarnaast ben ik niet jouw debugger, dus duwtjes in de juiste richting geef ik wel, maar ik ga je niet het werk uit de handen nemen.

Verwijderd

Topicstarter
Je hoeft ook niet mijn werk te debuggen en je hoeft me ook geen werk uit handen te nemen, maar ik vraag iets, waar jij een antwoord opgeeft dat bij mij niet werkt. Dus ik vraag eigenlijk gewoon om een volledig test-script, om te kijken of het wel of niet werkt. doei

tmmk

Verwijderd

Download de laatste scripting engine van http://msdn.microsoft.com/scripting/, misschien help dat. Voor mij houdt het verder op, want naar mij idee doe je zelf te weinig en zit je te veel te wachten op hulp, en daar heb ik geen zin in.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:27

gorgi_19

Kruimeltjes zijn weer op :9

En nog een tip: Gooi eens wat vaker 'tussenstappen' op het scherm, zoals je strPath
Door midde van response.Write strPath
Eventueel: response.flush er achteraan, mits je response.buffer op true hebt gezet.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...

Pagina: 1