Alternativ till traditionell paging
Förord
Eftersom paging är vanligt förekommande på hemsidor och då det stjäl en hel del prestanda från servern om man inte kombinerar det med metoden GetRows knåpade jag ihop ett alternativ till "traditionell" paging. Mitt alternativ bygger helt och hållet på metoden GetRows. Jag har inte jämfört detta alternativ med det traditionella pagingsättet men jag antar att man vinner en hel del prestanda med mitt alternativ. Koden är relativt simpel och lätt att konfigurera efter sina egna behov.Innehåll
För att det ska vara lättare att förstå hur det funkar har jag valt att presentera mitt alternativ som ett länkdatabasexempel. Det finns redan flera artiklar och tips om GetRows på Pellesoft så om ni vill veta hur det fungerar rekommenderar jag att ni söker efter det själva.
Till att börja med deklarerar vi några variabler och läser in den querystring som innehåller vilken sida vi ska visa. Om ingen sida är vald visas den första sidan genom att intShow sätts till 0.
Sedan skapar vi en databaskoppling och sparar alla poster i en vektor genom metoden GetRows. Därefter stänger vi databaskopplingen.
Det vi ska göra nu är att först kontrollera om det finns nåt i databasen. Sedan skriver vi ut tabellhuvudet och en rad med rubriker.
Vi räknar därefter ut hur många sidor (minus en) som kommer att behövas för att visa alla poster genom att dela antalet poster (minus en) med så många poster som vi valt att visa per sida (intPage = lastRecord\pageSize). Det knepiga är att hela tiden tänka minus en på grund av indexeringen i vektorer.
Nästa steg är att kontrollera ifall sista posten finns i det urval som gjorts. Detta gör vi med följande kod: if lastRecord < ((intShow*pageSize)+(pageSize-1)) then. Om den sista posten finns i urvalet ska vi bara visa posterna fram till sista posten och inte så många som bestäms av det maximala antalet poster per sida.
For-looparna skriver därefter ut posterna på vald sida.
Det var allt. Enkelt, eller hur? Om det trots allt är något ni inte förstår eller om ni vill att jag ska förklara något bättre får ni gärna skicka ett imail till mig.
Steg 1
Till att börja med deklarerar vi några variabler och läser in den querystring som innehåller vilken sida vi ska visa. Om ingen sida är vald visas den första sidan genom att intShow sätts till 0.
<%
Dim SQL, Conn, RS, noFindings, vektor, lastRecord, pageSize, intPage, intShow, intRow, i
noFindings = "False"
'Antal poster per sida
pageSize = 10
'Sidan som ska visas
intShow = request.querystring("show")
'Om ingen sida är vald visas den första sidan
if Len(intShow) = 0 then
intShow = 0
end if
%>
Sedan skapar vi en databaskoppling och sparar alla poster i en vektor genom metoden GetRows. Därefter stänger vi databaskopplingen.
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=links.mdb"
Conn.Open
SQL = "SELECT URL, description, totalClicks FROM links ORDER BY URL"
Set RS = Conn.Execute(SQL)
'Kollar om databasen är tom
if not RS.BOF and not RS.EOF then
vektor = RS.GetRows() 'vektor(0,i) = URL; vektor(1,i) = description; vektor(2,i) = totalClicks
lastRecord = UBound(vektor,2) 'Sista posten i vektorn
else
noFindings = "True"
end if
Set RS = Nothing
Conn.Close
Set Conn = Nothing
%>
Steg 2
Det vi ska göra nu är att först kontrollera om det finns nåt i databasen. Sedan skriver vi ut tabellhuvudet och en rad med rubriker.
Vi räknar därefter ut hur många sidor (minus en) som kommer att behövas för att visa alla poster genom att dela antalet poster (minus en) med så många poster som vi valt att visa per sida (intPage = lastRecord\pageSize). Det knepiga är att hela tiden tänka minus en på grund av indexeringen i vektorer.
Nästa steg är att kontrollera ifall sista posten finns i det urval som gjorts. Detta gör vi med följande kod: if lastRecord < ((intShow*pageSize)+(pageSize-1)) then. Om den sista posten finns i urvalet ska vi bara visa posterna fram till sista posten och inte så många som bestäms av det maximala antalet poster per sida.
For-looparna skriver därefter ut posterna på vald sida.
<%
'Om databasen inte är tom visas resultatet
if not noFindings then
response.write "" & vbnewline
response.write " Länk Antal besök " & vbnewline
'Räknar ut hur många sidor det blir
intPage = lastRecord\pageSize
if lastRecord < ((intShow*pageSize)+(pageSize-1)) then
for i = intShow*pageSize to lastRecord
if (intRow Mod 2) then
response.write " " & vbnewline
else
response.write " " & vbnewline
end if
response.write " " & vektor(1,i) & " " & vbnewline
response.write " " & vektor(2,i) & " " & vbnewline
response.write " " & vbnewline
intRow = intRow + 1
next
else
for i = intShow*pageSize to ((intShow*pageSize)+(pageSize-1))
if (intRow Mod 2) then
response.write " " & vbnewline
else
response.write " " & vbnewline
end if
response.write " " & vektor(1,i) & " " & vbnewline
response.write " " & vektor(2,i) & " " & vbnewline
response.write " " & vbnewline
intRow = intRow + 1
next
end if
%>
Steg 3
Det sista vi gör är att skriva ut sidnummer ifall antalet poster överstiger det maximala antalet poster. Vi fetmarkerar även den sida som är aktiv.
<%
'Om det är fler poster än det antal poster per sida man valt
if lastRecord > (pageSize-1) then
response.write " Sida "
for i = 0 to intPage
if (i*pageSize) = (intShow*pageSize) then
response.write "" & i+1 & " "
else
response.write "" & i+1 & " "
end if
next
response.write " " & vbnewline
end if
response.write "
" & vbnewline
end if
%>
Det var allt. Enkelt, eller hur? Om det trots allt är något ni inte förstår eller om ni vill att jag ska förklara något bättre får ni gärna skicka ett imail till mig.
Stefan Ekström
Fungerar artikel på clilliASP?
Tyrone Fröberg
Funkar kalas på chilisoft
Anna-Karin Söderberg
Jag gillar den här artikeln, tycker den är bra och har använt den här koden många gånger. Rekomenderar även andra att läsa den. Är man nybörjare så kanske den kan tyckas svår, men läser man ordentligt så förstår man.
Johannes Strömberg
Den här artikeln var kalasbra! Tack för den hjälpen!
Kristoffer Ljungqvist
Men om databasen är tom då är det bara vit sida och jag finner inte ut av var den delen är som man ska använda när det är t.om databas. Använder paging till en gästbok har inte användaren ett inlägg blir det bra vit sida. Men vill ändra på den vita sida som kommer upp. Men vet inte var den ligger någonstans i av alla else vilkoren i din kod.
Jonas Boman
Tycker den är bra!