Concept
Au lieu d'afficher une page contenant 300 éléments par exemple, vous afficherez grâce à la pagination 30 pages de 10 éléments. La navigation entre les pages se fera grâce à un bouton suivant et un bouton précédent.
Tout cela sera géré par l'intermédiaire d'une unique page asp, à laquelle on fournira des paramètres différents.
Application
Soit une table Element issue d'une base de données (la base peut être de n'importe quel type) définie comme suit :
| id_element |
titre_element |
description_element |
| numéroauto (clef primaire) |
Titre de l'élément |
descirption de l'élément |
Les variables utilisées
Outre les variables classiques permettant l'ouverture d'une connexion sur une base de données et l'ouverture d'un recordset, nous utiliserons les variables suivantes :
NbElementParPage=10
Cette variable définie le nombre d'éléments que l'on souhaite afficher par page. Elle est initialisée en entête du document.
On initialisera le recordset de la manière suivante :
rs.Pagesize=NbElementParPage
Page
Cette variable définie la page en cours. Elle est initialisée après l'ouverture du recordset sur les éléments de la base grâce au paramètre page fourni dans l'url appelée et sera définie comme suit :
<%
if request("page")="" then '--- Si le paramètre page est vide
Page=1 '---- On commence à la page 1
else
if isnumeric(request("page")) then '---- Si le paramètre page est bien numérique
page=cdbl(request("page")) '-----On en prend sa partie entière et on remplit la variable page
if page > rs.pagecount then '----- Si la variable page et supérieure au nombre de pages
response.write("une erreur s'est produite")
rs.close '---- Fermeture des connexions base de données
set rs=nothing
conn.close
set conn=nothing
response.write("une erreur s'est produite")
response.flush '---- On arrête l'exécution
response.End '---- Cette option nécessite de placer en entête du document response.buffer=true
end if
else '--- Le paramètre page n'est pas numérique
response.write("une erreur s'est produite")
rs.close '---- Fermeture des connexions base de données
set rs=nothing
conn.close
set conn=nothing
response.flush '---- On arrête l'exécution
response.End
end if
end if
%>
A l'issue de cette section la variable page sera correctement initialisée et contiendra la valeur de la page en cours. Le paramètre page étant fournit dans l'url du document, le visiteur peut s'amuser à changer cette valeur. Si la valeur entrée "illicitement" n'est pas numérique ou dépasse le nombre de pages alors une erreur sera retournée.
On initialise ensuite le recordset de la manière suivante :
rs.AbsolutePage=Page
Les propiétés de l'objet recordset utilisées pour effectuer cette pagination
- rs.AbsolutePage : définit le numéro de page en cours (ce numéro commence à 1 pour la première page)
- rs.Pagesize : nombre d'éléments à afficher dans une page
- rs.pagecount : nombre de pages totales
L'affichage des éléments dans la page
L'affichage proposé est très simple, mais il est possible d'en créer plus complexe et plus "propre" dans un tableau par exemple avec des font et des couleurs.
<%
for i=1 to rs.pagesize '--- de 1 jusqu'à la valeur de NbElementParPage
response.write(rs("titre_element")&"<br>")
response.write(rs("description_element")&"<br><br>"
rs.movenext
if rs.eof then '---- Si on est pas à la fin
exit for
end if
next
%>
Affichage du bouton suivant et précédent
<%
'------- Bouton précédent
if page>1 then '--- Si on n'est pas sur la première page
Ref="pagine.asp?Page="&page-1
response.write("<a href="&ref&">Précédent</a> ")
end if
%>
<%
'------- Bouton suivant
if page<rs.pagecount then '--- Si on n'est pas sur la dernière page
Ref="pagine.asp?Page="&page+1
response.write("<a href="&ref&">Suivant</a> ")
end if
%>
Afficher le numéro de page en cours :
<%
response.write("Vous êtes sur la page "&page &" sur "&rs.pagecount&" au total")
%>
Exemple de Script complet : pagine.asp
Il nous suffit maintenant d'assembler les différents éléments précédemment vus :
<%
Response.buffer=True
Dim conn
Dim Ref
Dim rs
Dim NbElementParPage
Dim Page
Dim SQL
'---- Définition du nombre d'éléments par page
NbElementParPage=10
'---- Ouverture de la connexion à la base de données
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "mabase","",""
'---- Ouverture du recordset
SQL="select * from element"
Set rs=server.createObject("ADODB.recordset")
rs.open sql,conn,3,3
if not rs.eof then '--- Il y a des éléments dans la table
'--- On initialise le nombre d'éléments par page
rs.Pagesize=NbElementParPage
'---- Traitement de la variable page
if request("page")="" then '--- Si le paramètre page est vide
Page=1 '---- On commence à la page 1
else
if isnumeric(request("page")) then '---- Si le paramètre page est bien numérique
page=cdbl(request("page")) '-----On en prend sa partie entière et on remplit la variable page
if page > rs.pagecount then '----- Si la variable page est supérieure au nombre de pages
response.write("une erreur s'est produite")
rs.close '---- Fermeture des connexions base de données
set rs=nothing
conn.close
set conn=nothing
response.write("une erreur s'est produite")
response.flush '---- On arrête l'exécution
response.End '---- Cette option nécessite de placer en entête du document response.buffer=true
end if
else '--- Le paramètre page n'est pas numérique
response.write("une erreur s'est produite")
rs.close '---- Fermeture des connexions base de données
set rs=nothing
conn.close
set conn=nothing
response.flush '---- On arrête l'exécution
response.End
end if
end if
rs.absolutepage=page
response.write("Vous êtes sur la page "&page &" sur "&rs.pagecount&" au total"&"br")
'---- On affiche les éléments trouvés
for i=1 to rs.pagesize '--- de 1 jusqu'à la valeur de NbElementParPage
response.write(rs("titre_element")&"<br>")
response.write(rs("description_element")&"<br><br>"
rs.movenext
if rs.eof then '---- Si on est pas à la fin
exit for
end if
next
'---- Affichage des boutons suivant et précédent
'------- Bouton précédent
if page>1 then '--- Si on est pas sur la première page
Ref="pagine.asp?Page="&page-1
response.write("<a href="&ref&">Précédent</a> ")
end if
'------- Bouton suivant
if page<rs.pagecount then '--- Si on est pas sur la dernière page
Ref="pagine.asp?Page="&page+1
response.write("<a href="&ref&">Suivant</a> ")
end if
else
response.write("Aucun élément n'a été trouvé")
end if
rs.close '---- Fermeture des connexions base de données
set rs=nothing
conn.close
set conn=nothing
%>
Ce script peut servir de base à la création d'un moteur de recherche dont un paramètre supplémentaire à fournir serait par exemple motclef (le mot entré par l'utilisateur)