Pseudo-Mod Paginazione dei recordset su asp-nuke 1.2
Autore
Messaggio
gbe Principiante
7 Discussioni
22 aprile 2004 alle 10:49:50 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
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.
' 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
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
Anna
Iscritti
Utenti: 18940
Ultimo iscritto : glauco Lista iscritti Messaggi privati: 3373Commenti: 2210Immagini: 39Downloads: 144Articoli: 49Pagine: 101Siti web: 558Notizie: 180Sondaggi: 11Preferiti: 5684670Post sui forum: 51195Libro degli ospiti: 4Eventi: 7