19. april 2008 - 15:40Der er
39 kommentarer og 1 løsning
tabel med dummy
Hej derude? Nu er jeg blevet kastet lidt rundt og fået noget hints hist og her så derfor prøver jeg nu for 3 gang. (mon også lykkens gang?)
Jeg har en tabel der indeholder 72 felter på 37x37px - fordelt over 12 rækker - nu tar jeg udgangspunkt i en enkelt række.
så bliver bredden følgende: 37px 1px 37px 1px 37px 1px 37px 1px 37px 1px 37px højen: 37px
Til denne side har jeg en databse der indeholde tilsvarende billeder på 37x37px i øjeblikket er der bare kun 27 (dvs. 4 rækker + 1 række hvor der kun er billeder i de første 4 felter)
Hvordan laver jeg smartes tabellen sådan at der skriv det antal rækker der er brug for (max 12) og så ikke sætter noget billede ind hvis der ikke er flere billeder i databasen?
Lige nu har jeg manuelt lavet en tabel [1] med alle <tr> og <td> tags men ville jo gerne komme disse ind i noget asp så det hele lavet sig selv. - især også fordi dette er en reference side og jeg vil som tiden går tilføje flere og flere referencer.
har nu prøve at stykke en hurtig kode som vises her: <html> <body> <div align="center"> <% Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/fpdb/krispro.mdb") Conn.Open DSN Set rs = Conn.Execute("select * from teknisk order by id desc") %> <table border="0" width="227" id="table1" cellspacing="0" cellpadding="0"> <% i = 0 do while not eof Response.Write "<tr><td width='37' height='37'><img border='0' src='../grafik/02/referencer/"&rs("arstal")&"/small/"&rs("job")&".png' width='37' height='37'></td></tr>" i = i+1 loop for x=i to 72 Response.Write 'En dumy-linje next %> </table> </div> </body> </html>
men får en fejl med noget 'responebuffer limit Exceeded'
Jeg har lavet dette lille sæt til dig, det fungerer glimrende og re helt simpelt.
Jeg fordusætte her, at du har et recordsæt, kaldet db, hvor du har en post i tabellen der hedder foto. Med hensyn til begrænsningen på de 12 billeder, så skal du sætte det i din sql (hvis du bruger mySql) med LIMIT 12
Sådan gør du:
<table> <% do wile not db.eof fotos 'Sæt en tæller der holder øje med antallet af kolonner colNr = colNr + 1
if conNr = 1 then ' Hvis tælleren har værdien 1 skrives en række response.Write("<tr>") end if
' Skriv et foto fra databasen i cellen response.Write("<td>" &db("foto")& "</td>")
if conNr = 3 then ' Hvis tælleren = 3 afsluttes rækken response.Write("</tr>") ' Tælleren nulstilles conNr = 0 end if
'Udfyld resten af tabellen, hvis ikke tæller er nået til 3 if conNr = 1 then response.Write("<td> </td><td> </td></tr>") end if
if conNr = 2 then response.Write("<td> </td></tr>") end if
Hvis jeg forstår dig korrekt, så er det at du vil have 6 billeder i hver række.
Her er en eksempel, som du kan gå ud fra.
<table cellpadding="" cellspacing="" width="100%"> <% t=1 'sæt databse etc If Not (rs.BOF Or rs.EOF) Then do while not rs.eof if (t+5)/6 = Round((t+5)/6) then Response.write "<tr>"
%><td width="150" valign="top" height="130">Indhold</td><% if t/6 = Round(t/6) then Response.write "</tr>" t = t + 1 rs.movenext loop if t/6 <> Round(t/6) then Response.write "</tr>" end if
Definer øverst, hvor mange kolonner du ønsker, dereftar:
<table> <% antalKol = 6
do wile not rs.eof 'Sæt en tæller der holder øje med antallet af kolonner colNr = colNr + 1
if conNr = 1 then ' Hvis tælleren har værdien 1 skrives en række response.Write("<tr>") end if
' Skriv et foto fra databasen i cellen response.Write("<td>" &rs("foto")& "</td>")
if conNr = antalKol then ' Hvis tælleren = antallet af kolonner afsluttes rækken response.Write("</tr>") ' Tælleren nulstilles conNr = 0 end if
db.moveNext loop
'Udfyld resten af tabellen, hvis ikke tæller er nået til antallet af kolonner if conNr <> antalKol then ' Find ud af hvor mange kolonner der mangler at blive udfyldt for t = 1 to antalKol - conNr response.Write("<td> </td>") next response.Write("</tr>") end if
CONST fotosti = 1 'Den kolonne i DB'en som indeholder stien til fotoet! const antal_raekker = 6 const antal_kolonner = 6
response.write("<table border=1>") for x=1 to antal_raekker response.write("<tr>") for y=1 to antal_kolonner if(intFotoVaelger<=UBound(arrayFotos, 2))then response.write("<td><img src="""& arrayFotos(fotosti, intFotoVaelger) &"""></td>") else response.write("<td> </td>") end if intFotoVaelger = intFotoVaelger + 1 next response.write("</tr>") next response.write("</table>")
så har jeg prøvet det forskellige og jansangill er helt klart tættest på!
har lidt kosmetik tilbage at hører om, for mellem de 6 felter i hver række vil jeg gerne have et felt på 1px dvs de første 5 felter skal der være 1 px efter - ikke det 6 og sidste felt?
desværre har jeg kun haft it på handelsskole og var jeg sådan kom igang med det så fik foden lidt indenfor men efterhånden har jeg ikke fået fulgt op eller gjort noget ved så ved man kan en del, kan bare ikke selv sætte mig ned og skrive ud af det blå...
har prøvet at rode lidt med en zoom-ting: Skal foregå sådan at når man trykker på et af de små billeder bliver dette større og der vises 9 midre billeder nedenunder det store.. det virker også meget fint, men igen kun med alm. manuel kode og ville gerne igen lave at hvis der nu kun er 7 billeder laves der
- 2 rækker med 3 billeder - 1 række med 1 billede
men disse billeder lægger på en anden måde i db'en: ud for hver post har jeg lavet felterne img1 til img9 pg ville så trække på dem så hvis nu der ingen data er i img8 + img9 skal der enten ikke sættes billeder i feltet eller også skal rækken og tabellen sluttes.
Lad mig forstå dig ret, det du vil, er det samme som før, denne gang bare m ed 2 rækker af 3, og en række af 1?
Hvis ja, så gør du bare sådan her:
<table cellpadding="" cellspacing="" width="100%"> <% t=1 'sæt databse etc If Not (rs.BOF Or rs.EOF) Then do while not rs.eof if (t+2)/3 = Round((t+2)/3) then Response.write "<tr>"
%><td width="150" valign="top" height="130">Indhold</td><% if t/3 = Round(t/3) then Response.write "</tr>" t = t + 1 rs.movenext loop if t/3 <> Round(t/3) then Response.write "</tr>" end if
måske er det min db-opbyning der er forkert måske min kode.. hver job har: - id - job - titel - status også 9 felter til billeder - img1 osv. osv. - img9
for ved den manuelle kode brugte jeg jo: ../../<%=rs("img1")%> ../../<%=rs("img2")%> ../../<%=rs("img3")%>
det giver lidt knas i og med at jeg ikke bare kan skrive img og så loope for der ikke noget img uden tal men img(og så et tal) kan man evt. lave noget regnestykke s¨å der kommer til at stå noget i retning af img(så en formel) der gør at vær gang man rykker videre i db'en pluses der med 1 så imgA -hvor A er et tal starter med 1 næste post 2 osv osv ..
okay.. er med på t = 1 og den + med 1 efter hånden som det løbes igennem men kunne bare ikke lige gennemskue hvordan denne værdi skulle sættes sammen med...
jeg har lavet det sådan at den jo zoom'er på samme side med en if aller først igen jeg gør noget som helst og hvis ?zoom=1 skal der kun vælges fra den række i tabellen hvor id = 1 altså kan man vel ikke bruge rs.movenext da der kun er den ene??
jeg skal i stedet for at hoppe i næste række hoppe i næste kollone i db'en altså fra img1 med id1 til img2 med id1 osv osv...
<% Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/fpdb/krispro.mdb") Conn.Open DSN if request.querystring("zoom") <> "" then Set rs = Conn.Execute("select * from teste where id = "&request.querystring("zoom")) response.write "<table border='0' width='100%' id='zoom' cellspacing='0' cellpadding='0'>" response.write "<tr><td height='227px' width='227px' colspan='5'><a href='java script:history.back(-1)'><img border='0' src='../grafik/02/referencer/"&rs("arstal")&"/"&rs("job")&".png' width='227px' height='227px' alt='' title='tilbage til oversigten..'></a></td></tr>" response.write "<tr><td height='1px' width='227' colspan='5'></td></tr>" t=1 If Not (rs.BOF Or rs.EOF) Then do while not rs.eof if (t+2)/3 = Round((t+2)/3) then Response.write "<tr>" response.write "<td height='75px' width='75px'><img border='0' src='../grafik/02/billeder/"&rs("arstal")&"/"&rs("job")&"/"&rs("img"&t)&".png' width='75px' height='75px' alt='' title='"&rs("arstal")&": "&rs("titel")&" ["&rs("status")&".]'></td>" if t/3 = Round(t/3) then Response.write "</tr>" t = t + 1 rs.movenext loop if t/3 <> Round(t/3) then Response.write "</tr>" end if response.write "</table>" else Set rs = Conn.Execute("select * from teknisk order by id desc") response.write "<table border='0' width='100%' id='teknisk' cellspacing='0' cellpadding='0'>" t=1 If Not (rs.BOF Or rs.EOF) Then do while not rs.eof if (t+5)/6 = Round((t+5)/6) then Response.write "<tr>" response.write "<td height='37px' width='1px'></td>" response.write "<td height='37px' width='37px'><a href='?zoom="&rs("id")&"'><img style='cursor:hand;cursor:pointer' border='0' src='../grafik/02/referencer/"&rs("arstal")&"/small/"&rs("job")&".png' width='37px' height='37px' alt='' title='"&rs("arstal")&": "&rs("titel")&" ["&rs("status")&".]'></td>" if t/6 = Round(t/6) then Response.write "<tr><td height='1px' width='227px' colspan='11'></td></tr></tr>" t = t + 1 rs.movenext loop if t/6 <> Round(t/6) then Response.write "<tr><td height='1px' width='227px' colspan='11'></td></tr></tr>" end if response.write "</table>" end if %>
dette her er min ide;
En liste med de job jeg har være med til vises i form af små billeder 6 i bredde og maks 12 i højden (virker helt fint!) når der så klikkes på et af disse små billeder er det meningen at det skal blive stort og fylde 6 x 6 små felter i toppen (227x227px) og nedenunder her skal der så vises 9 billeder á 75x75px fra det pågældende job.
?zoom= id fra db'en
For at undgå at der vises dette irrerterende hvide billede med et lille kryds i hjørnet ville jeg gennemgå felterne i databasen og vis dette er tomt skal der ikke vises noget lille billede (75x75) men rækken/tabellen skal blot afsluttes ligesom med den store liste (inden ?zoom)
forskellen er at ved den store liste løbes db-tabellen igennem og når der 'zoomes' er der ikke noget at løbe igennem fordi der kun skal trækkes fra den db-række hvor id = ?zoom=værdi'en
min db-tabel er bygget sådan op - en række i db-tabellen begynder med: - id - job - titel - status - img1 - img2 - img3 - img4 - img5 - img6 - img7 - img8 - img9
dvs. når jeg 'zoom'er' skal jeg ikke til næste række (rs.movenext) men (hvis det kan lade sig gøre) hoppe videre i samme række.
Kan du ikke bare lade være med at lave en do while så? Og så bygge hver td op hvis der er en billede?
<div id="billede_holder"> <% if not rs.eof then
'indhold if rs("img1")<>"" then response.write "<div class='billede'>"&rs("img1")&"</div>" if rs("img2")<>"" then response.write "<div class='billede'>"&rs("img2")&"</div>" if rs("img3")<>"" then response.write "<div class='billede'>"&rs("img3")&"</div>"
'etc
end if %> </div>
Id'en billede_holder definere du i CSS, med en width på det ønskede, og height på det ønskede,
Class'en billede har widt på hver billede, og height, og den floater left.
jamen det bliver jo lige som jeg ville have det skulle være... har det bare med at få nogle idéer om hvordan det kan gøres og så viser det sig at det kan gøres meget nemmere c",)
Hehe, jamen det er jo godt. Held og lykke med dit projekt.
Synes godt om
Ny brugerNybegynder
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.