Im ersten Teil dieses zweiteiligen Artikels wurde dargelegt, wie man Datensätze aus einer Datenbank
per ADO "portioniert', d.h. eine Datensatzuntermenge ("Seite") ausgibt. In diesem
Teil soll es nun darum gehen einen Navigator zu erzeugen, mit dem der Benutzer
zu den möglichen Seiten navigieren kann. Ähnlich den Navigatoren von Suchmaschinen.
Beispiel: vorherige Seite -- Seite 1 --
Seite 2 -- Seite 3 -- nächste Seite
Ausgangspunkt ist eine Tabelle mit 330 Datensätzen, die in Portionen zu je
25 Datensätzen auf einer Seite aufgeteilt werden. Es ergibt sich somit eine
Gesamtseitenanzahl von 14. Eine noch überschaubare Anzahl. Gehen die Datensatzmengen
jedoch in den hohen 3-stelligen Bereich oder höher, so wird klar, dass der angedachte
horizontale Navigator nicht alle Seiten enthalten kann. Eine Möglichkeit dieses
Problem zu lösen ist die Darstellung einer festgelegten ungeraden Anzahl von
Seitenummern, wobei z.B. immer nur die zwei Ziffern kleiner und zwei Ziffern
größer der aktuell angezeigten Seite dargestellt werden.
Beispiel für Seite 9: vorherige Seite --
Seite 7 -- Seite 8 -- Seite 9 -- Seite 10 --
Seite 11 -- nächste Seite
Jeder Link zeigt auf die ASP-Seite mit dem Parameter "page", der die anzuzeigende
Seite angibt, z.B. show.asp?page=3. Befindet sich der Benutzer auf der ersten
bzw. letzten Seite, so müssen natürlich die Links "vorherige Seite" bzw. "nächste
Seite" entfallen.
Sollen mehrere Seiten eines Webs einen solchen Navigator enthalten, macht
es Sinn eine Funktion zu schreiben, die auf den entsprechenden Seiten lediglich
eingebunden werden muss. Ein solche Funktion ist GeneratePageNav.
Die Funktion besitzt 3 Eingabeparameter:
- intRecCount - die Gesamtanzahl der Datensätze
- intRows - Anzahl der Datensätze auf einer Seite
- intPage - Nummer der aktuellen Seite
- strLink - Rumpf-URL, die beim Klick auf einen Navigations-Link geladen
werden soll
In unserem Beispiel würde der Aufruf wie folgt aussehen, wobei die Variable
intPage den Wert des Parameters "page" der aktuellen
Seite repräsentiert und zuvor per Request.QueryString
ausgelesen wurde.
GeneratePageNav(330, 25, intPage, "show.asp?page=")
Die Funktion
Public Function GeneratePageNav(intRecCount, intRows, intPage, strLink)
'=== Generierung eines 5-teiligen Seitennavigators
'Seitenanzahl berechnen
intPages = intRecCount \ intRows
'eine Seite mehr, wenn Rest übrigbleibt
if intRecCount Mod intRows > 0 then intPages = intPages + 1
'sicherstellen, dass aktuelle Seite kleiner ist als die Gesamtanzahl
if intPage > intPages then intPage = intPages
'Seitenzahlen festlegen
if intPage = 1 Or _
intPage = 2 Or _
intPage = 3 then
int1 = 1
int2 = 2
int3 = 3
int4 = 4
int5 = 5
elseif intPage = intPages - 2 Or _
intPage = intPages - 1 Or _
intPage = intPages then
int1 = intPages - 4
int2 = intPages - 3
int3 = intPages - 2
int4 = intPages - 1
int5 = intPages
else
int1 = intPage - 2
int2 = intPage - 1
int3 = intPage
int4 = intPage + 1
int5 = intPage + 2
end if
'nicht benötigte Seitenzahlen nullen
if int2 > intPages then int2 = 0
if int3 > intPages then int3 = 0
if int4 > intPages then int4 = 0
if int5 > intPages then int5 = 0
'String für Vorspann erstellen
strNav = "Seiten: "
'String für Anfang erstellen
If intPage <> 1 and intPage <> 0 then
strNav = strNav & "<a href=" & strLink & intPage - 1 & _
">vorherige Seite</a>"
else
strNav = strNav & "<span class=light>zurück</span>"
end if
strNav = strNav & " -- "
'String für ersten Teil erstellen
if int1 > 0 then
if int1 = intPage then
strNav = strNav & "<span class=selected><b>" & _
int1 & "</b></span>"
else
strNav = strNav & "<a href=" & strLink & int1 & ">" & _
int1 & "</a>"
end if
strNav = strNav & " -- "
end if
'String für zweiten Teil erstellen
if int2 > 0 then
if int2 = intPage then
strNav = strNav & "<span class=selected><b>" & _
int2 & "</b></span>"
else
strNav = strNav & "<a href=" & strLink & int2 & ">" & _
int2 & "</a>"
end if
strNav = strNav & " -- "
end if
'String für dritten Teil erstellen
if int3 > 0 then
if int3 = intPage then
strNav = strNav & "<span class=selected><b>" & _
int3 & "</b></span>"
else
strNav = strNav & "<a href=" & strLink & int3 & ">" & _
int3 & "</a>"
end if
strNav = strNav & " -- "
end if
'String für vierten Teil erstellen
if int4 > 0 then
if int4 = intPage then
strNav = strNav & "<span class=selected><b>" & _
int4 & "</b></span>"
else
strNav = strNav & "<a href=" & strLink & int4 & ">" & _
int4 & "</a>"
end if
strNav = strNav & " -- "
end if
'String für fünften Teil erstellen
if int5 > 0 then
if int5 = intPage then
strNav = strNav & "<span class=selected><b>" & _
int5 & "</b></span>"
else
strNav = strNav & "<a href=" & strLink & int5 & ">" & _
int5 & "</a>"
end if
strNav = strNav & " -- "
end if
'String für Ende erstellen
if intPage <> intPages then
strNav = strNav & "<a href=" & strLink & intPage + 1 & _
">nächste Seite</a>"
else
strNav = strNav & "<span class=light>nächste Seite</span>"
end if
GeneratePageNav = strNav
End Function
Downloads
seitennavigator.zip