Avatar billede lmejding Nybegynder
21. september 2005 - 10:38 Der er 32 kommentarer og
1 løsning

Opstilling af billeder i tabel med tre kolonner

Hej,
Jeg har en række billeder i en mappe.
Disse skal skrives i en <table> hvor der er tre kolonner, så der kommer til at stå
billede1.gif | billede2.gif | billede3.gif|
billede4.gif | billede5.gif | billede4.gif|
...osv til alle billeder er vist.

Jeg har skrevet lidt kode, men der noget der ikke spiller.
Jeg bygger det på at det må handle om to loops inden i hianden.
Et, der løber alle elementer i mit arr igennem og et der udskriver tre stk før næste linie skrives.
Men jeg får et forkert udskriv:

billede1.gif billede1.gif billede1.gif
billede4.gif billede4.gif billede4.gif
billede7.gif billede7.gif billede7.gif

Kan nogen hjælpe?

Billeder= "billede1.gif,billeder2.gif,billede3.gif,billede4.gif,billeder5.gif,billede6.gif,billede7.gif"
arrBilleder = Split(Billeder,",")
intAntal = Ubound(arrBilleder)
intTaeller=0
response.write "<table border=1>" & vbcrlf
Do while intTaeller<intAntal+1
response.write "<tr>"
   
'indreloop
For i = 1 to 3
response.write "<td>"
response.write arrBilleder(intTaeller)
response.write "</td>" & vbcrlf
   
next
   
response.write "</tr>" & vbcrlf
intTaeller = intTaeller +3
Loop
Response.write "</table>" &vbcrlf
Avatar billede softspot Forsker
21. september 2005 - 10:44 #1
i dit indre loop prøv da at skrive

response.write arrBilleder(intTaeller + i)

i stedet for den linie du har nu. Desuden skal du check for overløb i det indre loop inden du refererer elementet, altså:

if intTaeller + i <= ubound(arrBilleder) then
  response.write arrBilleder(intTaeller + i - 1)
end if

ellers risikerer du bare at der opstår en kørselsfejl ("Subscript out of range" eller noget i den stil)...

Hvis du vil undgår at trække den ene fra skal du køre dit indre loop fra 0-2 i stedet for 1-3.
Avatar billede softspot Forsker
21. september 2005 - 10:46 #2
OK, det skal nok være sådan (med den nuværende indre loop konfiguration):

if intTaeller + i - 1 <= ubound(arrBilleder) then
  response.write arrBilleder(intTaeller + i - 1)
end if
Avatar billede lmejding Nybegynder
21. september 2005 - 11:01 #3
JA! Jeg kunne godt se hvorfor den gentog billedet, men ikke regne nu hvordan jeg fik den til at skrive den næste.
Tusinde tak for hjælpen!
Smid et svar
Avatar billede softspot Forsker
21. september 2005 - 11:03 #4
Velbekomme :)
Avatar billede softspot Forsker
21. september 2005 - 11:05 #5
Tak for point :)
Avatar billede lmejding Nybegynder
21. september 2005 - 11:05 #6
:-)
Avatar billede lmejding Nybegynder
21. september 2005 - 13:44 #7
Hej igen softspot
Jeg håber det er i orden at ulejlige dig igen.
Sagen har taget en ny drejning.
Data hentes nu fra en database. Jeg skal bruge felterne sti og linket
Jeg har fundet ud at at konvertere til et array og at få data skrevet ud.
Kæden hopper igen af, der hvor der skal skrives 3 efter hinanden før linieskift.

Kan du se hvad jeg skal gøre?

Set get_rows = Conn.Execute("Select sti, linket from banners order by menu_sorting desc")
dataene = get_rows.getRows()
Set get_rows = nothing

Dim iRowLoop, iColLoop
intTaeller=0
For iRowLoop = 0 to UBound(dataene, 2)
For i = 1 to 3
  For iColLoop = 0 to UBound(dataene, 1)
    Response.Write(dataene(iColLoop , iRowLoop) & "<br>")
  Next 'iColLoop
Next
intTaeller = intTaeller +3
Next 'iRowLoop

Håber du vil hjælpe mig...
Avatar billede softspot Forsker
21. september 2005 - 13:54 #8
Umiddelbart vil jeg mene dette var metoden (uden at have testet det nærmere):

Set get_rows = Conn.Execute("Select sti, linket from banners order by menu_sorting desc")
dataene = get_rows.getRows()
Set get_rows = nothing

Dim iRowLoop, iColLoop
iRowLoop = 0
do while iRowLoop <= UBound(dataene, 2)
  For i = 0 to 2
    For iColLoop = 0 to UBound(dataene, 1)
      Response.Write(dataene(iColLoop, iRowLoop) & "<br>")
    Next 'iColLoop
    iRowLoop = iRowLoop + 1
  Next
loop
Avatar billede lmejding Nybegynder
21. september 2005 - 14:05 #9
Nej - den skriver ikke tre på skribe.
Der er ingen forskel i out put this jeg fjerner for i = 0 to 2
Avatar billede lmejding Nybegynder
21. september 2005 - 14:05 #10
Den skriver bare det hele i en køre
Avatar billede softspot Forsker
21. september 2005 - 14:07 #11
Ja, du mangler at pakke det ind i en tabel som du gjorde før :)
Avatar billede lmejding Nybegynder
21. september 2005 - 14:15 #12
Du har ret - igen - tak!!
Avatar billede lmejding Nybegynder
21. september 2005 - 14:17 #13
næ hov - nu går det for hurtigt..
den skriver:
/images/tema_lille_rygning.gif link6
/images/tema_1_off.gif link5
/images/tema_lille_rygning.gif link2
/images/tema_stor_motion.gif link3
/images/bg.gif link4
/images/tema_lille_kost.gif link1

altså ikke tre på stribe
Avatar billede softspot Forsker
21. september 2005 - 14:19 #14
Nej, men hvad er det du har pakket ind. Bemærk at du udskriver sti og linket fra den tabel du forespørger i. Det er forskelligt fra din oprindelige datastruktur, så du skal pakke hele det mellemste loop ind i en tabelcelle og ikke det inderste.
Avatar billede lmejding Nybegynder
21. september 2005 - 14:38 #15
Ja - nu skrives data i hver sin celle - tre stk pr. række. (se indsat)
Men jeg vil gerne have at de to sammenhængende data skrives i den samme celle...eller:

I virkeligheden skal de ikke bruges til en tabel men til at dynamisk at skrive html-kode med et link og et billede navn i stil med:
<a href="http://jubii.dk"><img border="0" src="Tema_2_off.gif"></a><a href="http://dr.dk"><img border="0" src="Tema_2_on.gif"></a><a href="http://cnn.com"><img border="0" src="Tema_1_on.gif" width="25" height="22"></a>

Hvor urlen og billede-navn hentes fra databasen og skal så skrives tre ad gangen
Disse linier skal så efterfølgende indgå i et array (har styr på den del)
Set get_rows = Conn.Execute("Select sti, linket from banners order by menu_sorting desc")
dataene = get_rows.getRows()
Set get_rows = nothing

Dim iRowLoop, iColLoop
iRowLoop = 0
response.write "<table border=1>"
do while iRowLoop <= UBound(dataene, 2)
response.write "<tr>"
  For i = 0 to 2
    For iColLoop = 0 to UBound(dataene, 1)
        response.write "<td>"
      Response.Write (dataene(iColLoop, iRowLoop) )
        response.write "</td>" 
    Next 'iColLoop
    iRowLoop = iRowLoop + 1          
Next
response.write "</tr>"
loop
response.write "</table>" & vbcrlf

Giver det mening?
Avatar billede lmejding Nybegynder
21. september 2005 - 14:44 #16
Hov fik den til at skrive i samme celle - jeg tror jeg kan komme videre herfra
tak

Set get_rows = Conn.Execute("Select sti, linket from banners order by menu_sorting desc")
dataene = get_rows.getRows()
Set get_rows = nothing

Dim iRowLoop, iColLoop
iRowLoop = 0
response.write "<table border=1>"
do while iRowLoop <= UBound(dataene, 2)
response.write "<tr>"
  For i = 0 to 2
  response.write "<td>NR: "&i
    For iColLoop = 0 to UBound(dataene, 1)
       
      Response.Write (dataene(iColLoop, iRowLoop) )
         
    Next 'iColLoop
    response.write "</td>"
    iRowLoop = iRowLoop + 1          
Next
response.write "</tr>"
loop
response.write "</table>" & vbcrlf
Avatar billede softspot Forsker
21. september 2005 - 14:55 #17
Igen skal du huske at checke om indeks ligger indenfor grænsen af det tilladte, som nævnte tidligere...
Avatar billede lmejding Nybegynder
22. september 2005 - 09:05 #18
arrrrrggg...
Troede lige jeg havde styr på sagen.
Jeg har fundet ud af at få skrevet den rigtige html-kode, hvor data fra mit array indsættes.
Problemet er nu:
I dit eksempel gennemløber løkkerne det antal gange som der er elemeneter i arrayet og skriver en ny celle for hver.
Nu har jeg brug for at den løber løkkerne igennen det dobbelte antal for at alle data udskrives i html-koden.
Hvordan får jeg den til det uden at fejle...

Giver det mening?

Set get_rows = Conn.Execute("Select sti, linket from banners order by menu_sorting desc")
dataene = get_rows.getRows()
Set get_rows = nothing

Dim iRowLoop, iColLoop
iRowLoop = 0
do while iRowLoop <= (UBound(dataene, 2))
samlet = "g_ImageTable[g_imax++] = new Array ("" "
  For i = 0 to 2
    For iColLoop = 0 to UBound(dataene, 1)
    If iColLoop = 1 Then
    samlet = samlet & iRowLoop &"<img src='" & (dataene(iColLoop-1, iRowLoop) ) & "' border='0' ></a><br>"       
    End if
    If iColLoop = 0 Then
        samlet = samlet  &iRowLoop &"<a href='" & (dataene(iColLoop+1, iRowLoop) ) & "' target='_parent'>"
    End if
         
    Next 'iColLoop
    iRowLoop = iRowLoop + 1          
Next
samlet = samlet & """);"
loop
response.write samlet

Håber meget du vil / kan hjælpe...
Avatar billede softspot Forsker
22. september 2005 - 09:53 #19
Nej, det er lidt uklart hvad du vil opnå ud fra den beskrivelse du giver, men kan du ikke prøve at lave et minimalt fungerende eksempel i ren HTML (ikke noget med at lave asp script kode :)), så det fremstår klart hvad du vil nå frem til...?

Jeg kan fornemme at du skal have lavet et javascript-array hvor billederne også indgår eller sådan noget...(?)
Avatar billede lmejding Nybegynder
22. september 2005 - 10:06 #20
Ok - jeg skal bruge nogle js arrays til at vise tre billeder af gangen. Når man klikker 'vis næste' skal den vise de næste tre billeder - og de forrige 3 når man klikker 'vis forrige'.
Hvert billede har en sti til en mappe hvori det ligger - derudver er hvert billede klikbart og skal derfor have en url.
Jeg bruges et js array til at få skrevet html-koderne til de tre billeder.
Når man klikker 'vis næste' vises næste element i js array'et.
Hvert element i js arrayet skal derfor indeholde html kode til tre billeder. Det er derfor koden skal skrives tre gange. Den siden af sagen fungerer fint...

js arraet ser ud som sådan for hvert element i mit js array:

g_ImageTable[g_imax++] = new Array ("<a href='http://www.qator.com' target='_parent'><img src='Tema_lille_Sol.gif' border='0' ></a><br><a href='http://www.jubii.dk'><img  src='Tema_stor_Sorg.gif' border='0'></a><br><a href='http://www.cnn.com'><img src='Tema_lille_Rygning.gif' border='0'></a>");


Jeg er ved at lave et cms system, hvor brugeren skal kunne oprette links og stier til billederne. Disse data placeres i en database. Den aktuelle funtion bruges når man har indsat/slette et billede fra listen(databasen). Da skal js arrayet opdateres/skrives igen.

Giver det bedre mening??
Avatar billede softspot Forsker
22. september 2005 - 11:11 #21
Jeg ville mene du skulle gøre sådan for at opbygge dit array...

Set get_rows = Conn.Execute("Select sti, linket from banners order by menu_sorting desc")
dataene = get_rows.getRows()
get_rows.close
Set get_rows = nothing

Dim iRowLoop, iColLoop
iRowLoop = 0
do while iRowLoop <= (UBound(dataene, 2))
  samlet = "g_ImageTable[g_imax++] = new Array ("" "
  For i = 0 to 2
    If iRowLoop <= ubound(dataene, 2) Then
      samlet = samlet & iRowLoop & "<a href='" & (dataene(0, iRowLoop) ) & "' target='_parent'>"
      samlet = samlet & iRowLoop & "<img src='" & (dataene(1, iRowLoop) ) & "' border='0' ></a><br>"
    End If
    iRowLoop = iRowLoop + 1         
  Next
  samlet = samlet & """);"
loop
response.write samlet
Avatar billede softspot Forsker
22. september 2005 - 11:12 #22
Ja, og så måske lige et linieskift efter hver array-tilføjelse (3. sidste linie):

  samlet = samlet & """);" & vbCrLf
Avatar billede lmejding Nybegynder
22. september 2005 - 11:34 #23
Det er lidt underligt. Hvis der er 6 records i databasen skriver den kun et js array.
Hvis jeg tilføjer en record så der er 7 - skriver den kun et billede - men skriver det rigtigt nok. Hvis jeg tilføjer endnu et (sum=8) skriver den to billeder i eet array.
jeg har byttet om på o og 1 i disse linier for at få de rigtige elementer skrvet det rigtige sted.

Set get_rows = Conn.Execute("Select sti, linket from banners order by menu_sorting desc")
dataene = get_rows.getRows()
get_rows.close
Set get_rows = nothing

Dim iRowLoop, iColLoop
iRowLoop = 0
do while iRowLoop <= (UBound(dataene, 2))
  samlet = "g_ImageTable[g_imax++] = new Array ("" "
  For i = 0 to 2
    If iRowLoop <= ubound(dataene, 2) Then
      samlet = samlet & "<a href='" & (dataene(1, iRowLoop) ) & "' target='_parent'>"
      samlet = samlet & "<img src='" & (dataene(0, iRowLoop) ) & "' border='0' ></a><br>"
    End If
    iRowLoop = iRowLoop + 1         
  Next
  samlet = samlet & """);" & vbCrlf
loop
response.write samlet
Avatar billede lmejding Nybegynder
22. september 2005 - 11:38 #24
har nu tilføjet 12 records - nu skrives kun 2 billeder i eet js array
Avatar billede softspot Forsker
22. september 2005 - 11:41 #25
Ja, det er fordi response.write skal flyttes indenfor loopet eller bliver samlet bare overskrevet hver gang (den bemærkede jeg ikke lige i første omgang)...

Set get_rows = Conn.Execute("Select sti, linket from banners order by menu_sorting desc")
dataene = get_rows.getRows()
get_rows.close
Set get_rows = nothing

Dim iRowLoop, iColLoop
iRowLoop = 0
do while iRowLoop <= (UBound(dataene, 2))
  samlet = "g_ImageTable[g_imax++] = new Array ("" "
  For i = 0 to 2
    If iRowLoop <= ubound(dataene, 2) Then
      samlet = samlet & "<a href='" & (dataene(1, iRowLoop) ) & "' target='_parent'>"
      samlet = samlet & "<img src='" & (dataene(0, iRowLoop) ) & "' border='0' ></a><br>"
    End If
    iRowLoop = iRowLoop + 1         
  Next
  samlet = samlet & """);" & vbCrlf
  response.write samlet
loop
Avatar billede lmejding Nybegynder
22. september 2005 - 12:21 #26
Netop!
Eneste problem nu at værdien for a href'en er tom for alle elemeneter
samlet = samlet & "<a href='" & (dataene(1, iRowLoop) ) & "' target='_parent'>"

der er noget galt med
(dataene(1, iRowLoop)
Avatar billede softspot Forsker
22. september 2005 - 12:24 #27
Hvordan ser output (og det tilhørende input) ud?
Avatar billede lmejding Nybegynder
22. september 2005 - 12:39 #28
Min fejl - manglede liiige at opdatere databasen med links...
Nu skrives de rigtigt. (indsat linie skift for overskueligheden)

g_ImageTable[g_imax++] = new Array ("
<a href='sdfsdf' target='_parent'><img src='/images/tema_lille_sorg.gif' border='0' ></a><br>
<a href='sdfsdf' target='_parent'><img src='/images/tema_stor_motion.gif' border='0' ></a><br>
<a href='sdfgsdf' target='_parent'><img src='/images/tema_lille_rygning.gif' border='0' ></a><br>
");

g_ImageTable[g_imax++] = new Array ("
<a href='link6' target='_parent'><img src='/images/tema_lille_rygning.gif' border='0' ></a><br>
<a href='df' target='_parent'><img src='/images/tema_stor_motion.gif' border='0' ></a><br>
<a href='link5' target='_parent'><img src='/images/tema_1_off.gif' border='0' ></a><br>
");

g_ImageTable[g_imax++] = new Array ("
<a href='df' target='_parent'><img src='/images/background1.gif' border='0' ></a><br>
<a href='link4' target='_parent'><img src='/images/bg.gif' border='0' ></a><br>
<a href='link3' target='_parent'><img src='/images/tema_stor_motion.gif' border='0' ></a><br>
");
g_ImageTable[g_imax++] = new Array ("
<a href='link2' target='_parent'><img src='/images/tema_lille_rygning.gif' border='0' ></a><br>
<a href='link1' target='_parent'><img src='/images/tema_lille_kost.gif' border='0' ></a><br>
");

Jeg skylder dig en kæmpe tak for din hjælp!!!

Tusinde tak!
Avatar billede lmejding Nybegynder
22. september 2005 - 12:56 #29
Jeg vil gerne skrive en txt fil med mit js array - i stedet for at response.write
Hvis jeg erstatter response.write samlet med kode, der skriver til en txt fil skriv kun de to første igen.
Hvordan løser jeg den?

Set get_rows = Conn.Execute("Select sti, linket from banners order by menu_sorting desc")
dataene = get_rows.getRows()
get_rows.close
Set get_rows = nothing

Dim iRowLoop, iColLoop
iRowLoop = 0
do while iRowLoop <= (UBound(dataene, 2))
  samlet = "g_ImageTable[g_imax++] = new Array ("""
  For i = 0 to 2
    If iRowLoop <= ubound(dataene, 2) Then
      samlet = samlet & "<a href='" & (dataene(1, iRowLoop) ) & "' target='_parent'>"
      samlet = samlet & "<img src='" & (dataene(0, iRowLoop) ) & "' border='0' ></a><br>"
    End If
    iRowLoop = iRowLoop + 1         
  Next
  samlet = samlet & """);" & vbCrlf
tekst = samlet
response.write tekst
'skriv txtfil

' Find den fysiske placering af htmlfilen
filespec = "d:\web\server.nu\www\webcms\grafik\billeder.js"

' Åbn tekstfilen
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateTextFile(filespec,2)
f.Write samlet
loop
Avatar billede softspot Forsker
22. september 2005 - 14:44 #30
Jeg vil anbefale at du åbner filen inden dit loop og lukker den efter loopet, det vil under alle omstændigheder performe bedre (og ellers skal du huske at lukke den hver gang du har skrevet).

Set get_rows = Conn.Execute("Select sti, linket from banners order by menu_sorting desc")
dataene = get_rows.getRows()
get_rows.close
Set get_rows = nothing

' Find den fysiske placering af htmlfilen
filespec = "d:\web\server.nu\www\webcms\grafik\billeder.js"

' Åbn tekstfilen
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateTextFile(filespec,2)

Dim iRowLoop, iColLoop
iRowLoop = 0
do while iRowLoop <= (UBound(dataene, 2))
  samlet = "g_ImageTable[g_imax++] = new Array ("""
  For i = 0 to 2
    If iRowLoop <= ubound(dataene, 2) Then
      samlet = samlet & "<a href='" & (dataene(1, iRowLoop) ) & "' target='_parent'>"
      samlet = samlet & "<img src='" & (dataene(0, iRowLoop) ) & "' border='0' ></a><br>"
    End If
    iRowLoop = iRowLoop + 1         
  Next
  samlet = samlet & """);" & vbCrlf
  'response.write samlet
 
  'skriv txtfil
  f.Write samlet
loop

f.close
Avatar billede lmejding Nybegynder
23. september 2005 - 09:54 #31
softspot - du er min ven for altid!
TAK!!!
TAK!!!
TAK!!!
Avatar billede softspot Forsker
23. september 2005 - 10:09 #32
Det er altid rart at have venner :)
Avatar billede lmejding Nybegynder
23. september 2005 - 10:10 #33
:-))
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