Forum 

Forum AspNuke.it - Il tuo Portale OpenSource in ASP

Pseudo-Mod Paginazione dei recordset su asp-nuke 1.2

Autore Messaggio
gbe

Principiante
Principiante
7 Discussioni



Profilo - gbe
22 aprile 2004 alle 10:49:50 Profilo - gbeInvia un messaggio privato Rispondi quotando
Sarà capitato anche a voi di dover personalizzare qualche pagina di asp-nuke e di avere la necessità di dividere in pagine la visualizzazzione di + record.
Quella che propongo non sono modifiche pronte all'uso, ma delle routine generiche da utilizzare e personalizzare nelle proprie pagine. L'utilizzo sarà quindi destinato ad utenti che conoscono i concetti base di programmazione asp.

La semplice soluzione proposta si integra con asp-nuke ed ofre la possibilità di dividere in pagine della dimensione voluta qualunque recordset, consentendo poi di navigare tra le pagine liberamente.


Inserire le seguenti linee in variables-inc.asp:

Dim iPageSize, iCurrentPage, iTotalPage, iTotalRecord, iFirstRecPage, iLastRecPage 'usati per paginazione recordset
Const DefaultPageSize = 10


Aggiungere queste 2 routine a database-inc.asp:


' Gives a page recordset from oCn, query rSQL
' IN : oCn (Object) : database's connection
' : rSQL (string) : query
' : iPageSizeSelect : record per pagina
' OUT : (Object) : recordset
Function DBPageRecordSet(oCn, rSQL, iPageSizeSelect)
On Error Resume Next
Set DBPageRecordSet = Server.CreateObject("ADODB.Recordset")
DBPageRecordSet.Open rSQL, oCn , 3, 1

If Not DBPageRecordSet.EOF Then
iPageSize = iPageSizeSelect

iCurrentPage = Request.QueryString("page")
If iCurrentPage = "" then iCurrentPage = 1

DBPageRecordSet.pagesize = iPageSize
DBPageRecordSet.AbsolutePage = iCurrentPage

iTotalPage = DBPageRecordSet.PageCount
iTotalRecord = DBPageRecordSet.RecordCount

iFirstRecPage= (iCurrentPage-1)*iPageSize+1
if iTotalRecord < (iCurrentPage*iPageSize) then
iLastRecPage = iTotalRecord
else
iLastRecPage = iCurrentPage*iPageSize
end if

end if

If Err.number <> 0 Then
Response.Write "<br>SQL error"
If IsAuthorized(ROLE_ADMIN) Then
Response.Write ": " & Err.Description & "<br>"
Response.Write "Query: " & rSQL & "<br>"
End If
Err.Clear
End If
On Error Goto 0
End Function


' Manage page navigation of DBPageRecordSet
' IN : pagina
' OUT : gestione paginazione
Sub ManagePage(sScript)
dim i
if Instr(4, sScript, "?", 1) > 0 then
sScript = sScript + "&"
else
sScript = sScript + "?"
end if
sScript = sScript + "page="
Response.Write "<table border=""0"" align=""center"" cellpadding=""1"" cellspacing=""0""><tr class=small>"
If iCurrentPage <= 1 then
Response.write "<td> </td>"
Response.write "<td> </td>"
else
Response.write "<td><a href=""" & sScript & 1 &""" title=""Prima pagina""> |< </a></td>"
Response.write "<td><a href=""" & sScript & iCurrentPage - 1 &""" title=""Pagina precedente""> << </a></td>"
end if
Response.Write "<td align=""center""> "
For i = 1 to iTotalPage
If Int(i) = Int(iCurrentPage) then
Response.write "<b>"& i &"</b>  "
Else
Response.write "<a href=""" & sScript & i & """>"& i &"</a>  "
End If
Next
Response.write "</td>"
If Int(iTotalPage) = Int(iCurrentPage) then
Response.write "<td> </td>"
Response.write "<td> </td>"
else
Response.write "<td><a href=""" & sScript & iCurrentPage + 1 &""" title=""Pagina successiva""> >> </a></td>"
Response.write "<td><a href=""" & sScript & iTotalPage &""" title=""Ultima pagina""> >| </a></td>"
end if
Response.write "</tr><tr><td align=""center"" colspan=""5"" class=""small"">"

if iCurrentPage >0 then
Response.Write "<b>Pagina <font color=""#FF0000"">" & iCurrentPage & "</font>"
Response.Write " di <font color=""#FF0000"">" & iTotalPage & " </font></b>"
end if
Response.write "</td></tr></table>"

End Sub



Adesso ecco un esempio di pagina "tipo" per usare le nuove funzioni di paginazione. L'esempio proposto elenca tutti i download presenti nel nostro sito asp-nuke.


<%
'*****************
'ASP-Nuke
'paginazione recordset by gbe
'blablabla...
'*****************
%>
<!-- #include file='includes/includes-inc.asp' -->
<%
sTitlePage = "Il mio titolo..."
%>
<!-- #include file='includes/toppage-inc.asp' -->
<%
DisplayMiaPagina()
%>
<!-- #include file='includes/bottompage-inc.asp' -->
<!-- #include file='includes/clearitall-inc.asp' -->

<%

' Display page
Sub DisplayMiaPagina()
Dim oCn, oRs, rSQL, iLine, iNum, fldcounter

CreateTopTable "objlist", "Lista completa di tutti i download disponibili, dalla A alla Z"

Set oCn = DBConnexion(DB_MAIN)
rSQL = "SELECT * FROM downloads WHERE dValid=true ORDER BY dTitle"

Set oRs = DBPageRecordSet(oCn, rSQL, 10) '<= record per pagina
If Not oRs.EOF Then
Response.Write "Record trovati: " & iTotalRecord & " - Visualizzati dal " & iFirstRecPage & " al " & iLastRecPage & "<br>" & vbCRLF

Response.Write "<table width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""1"">" & vbCRLF
Response.Write "<tr class=tablelinemain><td>Record</td><td>Titolo</td></tr>" & vbCRLF
iLine = 1
iNum = iFirstRecPage
fldcounter=0
While Not (oRs.EOF or fldcounter = oRs.pagesize)
fldcounter = fldcounter + 1
Response.Write "<tr class=tableline" & iLine & "><td align=""center"">" & iNum & "</td>" & vbCRLF
Response.Write "<td align=""center"">"
Response.Write "<a href=""" & GLOBAL_SITE_PATH & "downloads.asp?id=" & oRs("dID") & """ title=""click per dettagli"">"
Response.Write Server.HTMLEncode(oRs("dTitle")) & "</a></td></tr>" & vbCRLF
iLine = 1 + ((iLine-1) XOR 1)
iNum = iNum + 1
oRs.MoveNext
WEnd
Response.Write "</table>" & vbCRLF
ManagePage Request.ServerVariables("SCRIPT_NAME")
else
Response.Write "Non ci sono record."
End If
oCn.Close
Set oCn = Nothing
Set oRs = Nothing
CreateBottomTable ""
End Sub
%>


Ultima cosa, consiglio di personalizzate i pulsanti di navigazione con immagini al posto della grafica testuale utilizzata.

Log in

Login
Password
Memorizza i tuoi dati:

Cerca

 

Sostieni AspNuke

Un piccolo gesto per aiutarci a mantenere AspNuke.it online

Promo

MusicWebItalia.it
Video Testi Traduzioni Spot Colonne sonore Accordi e Spartiti gratis.

Visitatori

Visitatori Correnti : 120
Membri : 0 offline Anna

Iscritti

 Utenti: 18940
Ultimo iscritto : glauco
Lista iscritti
Messaggi privati: 3373 Commenti: 2210 Immagini: 39 Downloads: 144 Articoli: 49 Pagine: 101 Siti web: 558 Notizie: 180 Sondaggi: 11 Preferiti: 5684670 Post sui forum: 51195 Libro degli ospiti: 4 Eventi: 7

Versioni

Temi