Ja vi em muitos fóruns muita gente querendo um script de paginação que utiliza Asp, MySQL e que a paginação fique no estilo do Google.
Bem, este script eu fiz para um site de uma intranet e vou colocar aqui pois espero que seja util para todo mundo.
O estilo Css da paginação está parecido com o estilo do Digg e as classes Css foram adaptadas de um site que achei na internet. Como todo bom programador, segue abaixo o link deste Css para que sejam mantidos os creditos ao autor original: Estilo Css Digg
Agora que fizemos as devidas referências, vamos ao código.
Vou colocar ele todo comentado para não ter dúvida e vamos desde o inicio:
Estilo Css usado na páginação
<style>#pages { padding: 3px;}#pages ul { list-style-type: none;}#pages li { float: left; display: inline; margin: 0 5px 0 0; display: block;}#pages li a { color: #88af3f; padding: 4px; border: 1px solid #ccdbe4; text-decoration: none; float: left;}#pages li a:hover { color: #fff; background-color: #3666d4; border: 1px solid #2b55af;}#pages li.nolink { color: #CCC; border: 1px solid #F3F3F3; padding: 4px;}#pages li.current { color: #FFF; border: 1px solid #2b55af; padding: 4px; background-color: #3666d4;}</style>
Código ASP
<%''' Declaração de variáveisDim cnProdutos, rsProdutos, strSQLProdutosDim cdblMat, intInicioPaginasRegistros, pAtual, fimRegistrosDim iTotalReg, iTotalPaginas, sLinkDim intervalo, intInicioPaginas, intFinalPaginas, intMaxLinksNavegacao''' Recupera a página atualpAtual = Request.QueryString("pAtual")''' Consulta SQLstrSQLProdutos = "select campo1, campo2 from sua_tabela order by campo3;"''' Criação dos ObjetosSet cnProdutos = Server.CreateObject("ADODB.Connection")Set rsProdutos = Server.CreateObject("ADODB.Recordset")cnProdutos.Open "driver={MySQL ODBC 3.51 Driver};server=NOME_SERVIDOR;database=NomeBaseDados;uid=NomeUsuarioBanco;pwd=SenhaUsuarioBanco;"''' Total de registros por paginafimRegistros = 20''' Total de links exibidos na telaintMaxLinksNavegacao = 10''' Define a página atualIf pAtual = "" Or pAtual <= 0 Then pAtual = 1End If''' Diz ao MySQL o inicio do filtro de linhas. ''' Inicialmente vamos iniciar da linha ZerocdblMat = pAtual -1intInicioPaginasRegistros = cdblMat * fimRegistros''' Pega o total de registros do bancoiTotalReg = cnProdutos.Execute("select count(campo1) from sua_tabela").Fields(0).Value''' Cálculo para ver o total de páginas que terá a paginação.If Cint(iTotalReg) > CInt(fimRegistros) Then iTotalPaginas = Round(Cint(iTotalReg) / Cint(fimRegistros))Else iTotalPaginas = 1End If''' coloque aqui, tudo o que for comum na sua querystring do site''' valores que sempre serao os mesmos, com isso vc economiza na ''' hora que for montar os links de paginaçãosLink = "pagina.asp?parametro1=valor1¶metro2=valor2"''' Certifica-se de que a pagina atual nunca será maior que o total de paginasIf Cint(pAtual) > iTotalPaginas Then pAtual = iTotalPaginas End If''' Configura o intInicioPaginas e o fim dos registros no bancostrSQLProdutos = strSQLProdutos & " limit " & intInicioPaginasRegistros & "," & fimRegistrosrsProdutos.CursorLocation = 3rsProdutos.Open strSQLProdutos, cnProdutos, 3, 3If Not rsProdutos.EOF Then Response.Write "<table>" & vbcrLf Response.Write " <tr>" & vbcrLf Response.Write " <td>" & vbcrLf Do While Not rsProdutos.EOF Response.Write "Campo 1: " & rsProdutos("campo1") & " - Campo 2: "& rsProdutos("campo2") &" <br />" & vbcrLf rsProdutos.MoveNext Loop Response.Write " </td>" & vbcrLf Response.Write " </tr>" & vbcrLfEnd If''' =========================================================''' Iniciamos a Paginação''' =========================================================Response.Write " <tr>" & vbcrLfResponse.Write " <td>" & vbcrLfResponse.Write " <B><strong> Página " & pAtual & " de " & iTotalPaginas & " </strong></B> - " & vbcrLfResponse.Write " </td> - " & vbcrLfResponse.Write " </tr>" & vbcrLfResponse.Write " <tr>" & vbcrLfResponse.Write " <td>" & vbcrLfResponse.Write " <div id='pages'>" & vbcrLfResponse.Write " <ul>" & vbcrLf''' Botões Primeira e Anterior. Só serão exibidos''' se a página atual não for a primeira páginaIf pAtual > 1 Then Response.Write " <li><a href='"& sLink &"&pAtual=" & 1 & "'>Primeira</a></li>" Response.Write " <li><a href='"& sLink &"&pAtual=" & pAtual - 1 & "'>Anterior</a><li>"End If''' Configura o intInicioPaginas e o fim dos registros para consulta ao bancointervalo = Int(intMaxLinksNavegacao / 2)intInicioPaginas = pAtual - intervalointFinalPaginas = pAtual + intervalo''' Se o intInicioPaginas for menor que 1 passa seu valor para 1If CInt(intInicioPaginas) < 1 Then intInicioPaginas = 1 intFinalPaginas = intMaxLinksNavegacaoEnd If''' Garante que a última página nao vai ser maior que o total ''' de páginas calculado para a consultaIf CInt(intFinalPaginas) > CInt(iTotalPaginas) Then intFinalPaginas = iTotalPaginasIf intFinalPaginas > intMaxLinksNavegacao Then intFinalPaginas = intFinalPaginas - 1''' Começa a escrever os links na telaFor i = intInicioPaginas To intFinalPaginas If CInt(i)=CInt(pAtual) Then Response.Write " <li class='current'>" & i & "</li> " End If If CInt(i) < CInt(pAtual) Then Response.Write " <li><a href='"& sLink &"&pAtual=" & i & "'>" & i & "</a></li> " End If If CInt(i) > CInt(pAtual) Then Response.Write " <li><a href='"& sLink &"&pAtual=" & i & "'>" & i & "</a></li> " End IfNext''' Botões Próxima e Última página. Só serão exibidos''' se a página atual nao for a última páginaIf CInt(pAtual) < CInt(iTotalPaginas) Then Response.Write " <li><a href='"& sLink &"&pAtual=" & pAtual + 1 & "'>Próxima</a></li>" Response.Write " <li><a href='"& sLink &"&pAtual=" & iTotalPaginas & "'>Última</a></li>"End If Response.Write " </div>" & vbcrLfResponse.Write " </ul>" & vbcrLfResponse.Write " </td>" & vbcrLfResponse.Write " </tr>" & vbcrLfResponse.Write "</table>" & vbcrLf%>
É isso!
Espero que gostem.
Abraços e atá a próxima!
- LEANDRO PAIVA, kapedlok and dapedlok curtiram esta postagem