21. september 2005 - 10:38Der 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:
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
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
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
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
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.
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
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
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
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...(?)
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:
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.
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
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
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
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'>"
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
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
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.