Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hargon

Paginação v1.0

Recommended Posts

Já existem alguns códigos de paginação aqui no Fórum, até mesmo uma classe criada pelo jonathandj. Mesmo assim resolvi criar uma classe para uso próprio. Talvez seja útil para alguém também.

 

Segue abaixo um código para realizar paginação com dados vindo de um banco de dados. Testado com Access e MySQL.

 

A forma de paginação no MySQL utilizei a idéia do Tio Mario que está postada em algum tópico aqui no Fórum.

 

Obs. Única observação: Mantenha os créditos. http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

 

Atualização:

[14.09.2008]: Acrescentado GROUP BY e HAVING

[22.12.2008]: Cálculo de total de páginas

 

Limitação:

- Funciona apenas com consulta simples, utilizando SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY e SUBSELECT.

 

class_paginacao.asp

<%
'*************************************************************
' Classe para criar paginação
' Autor: hargon
' Propósito: Criar uma paginação a partir de um banco de dados
' Data: 27/06/2008
' Fórum: Imasters (forum.imasters.com.br)
'*************************************************************
Option Explicit

'*************************************************************
' Classe para Paginação
'*************************************************************
Class Paginacao
	Public campos, from, where, groupBy, having, orderBy, paginaAtual, totalRegistros, rs, strConexao, linkPaginas, url, separador, legenda, primeiraPagina, ultimaPagina, proximaPagina, anteriorPagina
	Private totalReg, conexao

	Public Sub Paginacao()
		paginaAtual = paginaVerifica(paginaAtual)
		totalRegistros = totalRegistrosVerifica(totalRegistros)
		url = urlVerifica(url)
		separador = separadorVerifica(separador)
		campos = camposVerifica(campos)
		criaPaginacao()
		criarProximoAnterior()
	End Sub

	Private Function contaRegistros()
		Dim sql, total
		sql = "SELECT COUNT(*) as total FROM "& from & " "
		If (len(where) > 0) Then
			sql = sql & "WHERE " & where
		End If		
		Set rs = conexao.Execute(sql)
		If Not rs.eof Then
			total = rs("total")
		Else
			total = 0
		End If
		rs.close
		Set rs = Nothing
		contaRegistros = total
	End Function

	Private Function fInt(valor)
		Dim resultado		
		resultado = valor
		If (resultado > cInt(resultado)) Then
			valor = split(resultado,",")
			resultado = cInt(valor(lBound(valor))) + 1
		else
			resultado = cInt(resultado)
		End If
		fInt = resultado
	End Function

	Private Function camposVerifica(valor)
		If (len(valor) = 0) Then
			camposVerifica = "*"
		Else
			camposVerifica = valor
		End If
	End Function

	Private Function paginaVerifica(pagina)
		If isNumeric(pagina) Then
			If (pagina <= 0) Then
			   pagina = 1
			End If
		Else
			pagina = 1
		End If
		paginaVerifica = pagina
	End Function

	Private Function separadorVerifica(vUrl)
		If (len(vUrl) = 0) Then
			separadorVerifica = "  "
		Else
			separadorVerifica = vUrl
		End If
	End Function

	Private Function totalRegistrosVerifica(registros)
		If isNumeric(registros) Then
			If (registros <= 0) Then
			   registros = 10
			End If
		Else
			registros = 10
		End If
		totalRegistrosVerifica = registros
	End Function

	Private Function urlVerifica(vUrl)
		If (len(vUrl) = 0) Then
			urlVerifica = request.ServerVariables("script_name")
		Else
			urlVerifica = vUrl
		End If
	End Function

	Public Sub criaPaginacao()		
		If (instr(lCase(strConexao),"mysql") > 0) Then
			paginacaoMySQL
		Else
			paginacaoAccess
		End If
		
		montarPaginacao
	End Sub

	Private Sub criarProximoAnterior()
		If ((paginaAtual - 1) < primeiraPagina) Then
			anteriorPagina = 0
		Else
			anteriorPagina = paginaAtual - 1
		End If
	   
		If ((paginaAtual + 1) > ultimaPagina) Then
			proximaPagina = 0
		Else
			proximaPagina = paginaAtual + 1
		End If
	End Sub

	Private Sub paginacaoAccess()
		Dim sql, paginas, inicioRegistros, fimRegistros

		set rs = Server.CreateObject("adodb.recordset")
		set rs.ActiveConnection = conexao
		rs.CursorType = 3
		rs.PageSize = totalRegistros
	   
		sql = "SELECT "& campos & " FROM "& from & " "
		If (len(where) > 0) Then
			sql = sql & "WHERE " & where
		End If

		If (len(groupBy) > 0) Then
			sql = sql & " GROUP BY " & groupBy
		End If

		If ((len(having) > 0) And (len(groupBy) > 0)) Then
			sql = sql & " HAVING " & having
		End If
	   
		If (len(orderBy) > 0) Then
			sql = sql & " ORDER BY " & orderBy
		End If
		rs.Open sql
		totalReg = rs.recordCount
		If not rs.Eof Then
			rs.absolutepage = paginaAtual
		End If
	End Sub
   
	Private Sub paginacaoMySQL()
		Dim sql, paginas, inicioRegistros, fimRegistros
		totalReg = contaRegistros()
	   
		paginas = cint(totalReg) / cint(totalRegistros)
		inicioRegistros = 0
		if (paginaAtual > 1) then : inicioRegistros = (paginaAtual * totalRegistros) - totalRegistros : end if
		fimRegistros = totalRegistros
	   
		sql = "SELECT "& campos & " FROM "& from & " "
		If (len(where) > 0) Then
			sql = sql & "WHERE " & where
		End If

		If (len(groupBy) > 0) Then
			sql = sql & " GROUP BY " & groupBy
		End If

		If ((len(having) > 0) And (len(groupBy) > 0)) Then
			sql = sql & " HAVING " & having
		End If
	   
		If (len(orderBy) > 0) Then
			sql = sql & " ORDER BY " & orderBy
		End If
	   
		sql = sql & " LIMIT "& inicioRegistros &", " & fimRegistros
		Set rs = conexao.Execute(sql)
	End Sub

	Public Sub abrirConexao()
		Set conexao = Server.CreateObject("ADODB.Connection")
		conexao.Open strConexao
	End Sub
   
	Public Sub fecharConexao()
		If isObject(rs) Then
			rs.Close
			Set rs = Nothing
		End If
		conexao.Close
		Set conexao = Nothing
	End Sub
   
	Public Sub montarPaginacao()
		Dim i, total, resultado
		total = totalReg
		linkPaginas = empty
		separador = split(separador," ")

		resultado = fInt(formatnumber(cInt(qtRegistros)/cInt(totalRegistros),2))

		 If (resultado >= 1) Then
			linkPaginas = legenda  & " "
			primeiraPagina = 1
			ultimaPagina = 1

			For i = 1 To resultado
				If (i = cInt(paginaAtual)) Then
					linkPaginas = linkPaginas & "<strong><span class=""paginaAtiva"">"& i &" </span></strong>"
				Else
					If (instr(url,"?") > 0) Then
						linkPaginas = linkPaginas & " " & separador(0) & "<a class=""paginaLink"" href=""" & url & "&pag="&i&""">"&i&"</a>" & separador(1) & " "
					Else
						linkPaginas = linkPaginas & " " & separador(0) & "<a class=""paginaLink"" href=""" & url & "?pag="&i&""">"&i&"</a>" & separador(1) & " "
					End If
				End If
				ultimaPagina = i
			Next
		End If
	End Sub
End Class
%>

arquivo.asp

<!--#include file='class_paginacao.asp'-->
<%
Dim pag, contador

Set pag = New paginacao
With pag
	'strConexao: Obrigatório. Testado somente com MySQL, Access
	.strConexao = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("../../private/banco.mdb")
	'.strConexao = "Driver={MySQL ODBC 3.51 Driver}; SERVER=127.0.0.1; DATABASE=bancodedados; UID=administrador; PWD=123456;"
	
	'campos: Não obrigatório
	.campos = "cdpagina, nmpagina, exibir"

	'from: Obrigatório
	.from = "adm_pagina"

	'where: Não obrigatório
	'.where= "nmpagina like '%teste%'"
		
	'orderBy: Não obrigatório
	.orderBy = "nmpagina ASC"
	
	'paginaAtual: Obrigatório quando não estiver na primeira página
	.paginaAtual = request.QueryString("pag")

	'totalRegistros: Default 10
	.totalRegistros = 5
	
	'url: Obrigatório quando possuir outros parâmetros na URL
	.url = request.ServerVariables("script_name")
	
	'separador: Não obrigatório
	.separador = "[ ]"
	
	'legenda: Não obrigatório
	.legenda = "págs."

	'abrirConexao: Obrigatório
	.abrirConexao
	
	'paginacao: Obrigatório
	.paginacao
	
	'linkPaginas: São às páginas. Pode ser colocado em qualquer parte do código após executação .paginacao.
	response.write .linkPaginas & "<br /><br />"
	
	'rs: Obrigatório para acessar os campos
	If Not .rs.eof Then
		contador = 0
		'Para MySQL não é necessário utilizar "and contador < .rs.pagesize" na linha abaixo
		While Not .rs.eof and contador < .rs.pagesize
			contador = contador + 1
			response.write .rs("nmpagina") & "<br />"
			.rs.movenext
		Wend
	Else
		response.write "Nenhum registro foi encontrado."
	End If
	'fecharConexao: Obrigatório
	.fecharConexao
	
	'linkPaginas: São às páginas. Pode ser colocado em qualquer parte do código após executação .paginacao.
	response.write "<br />" & .linkPaginas
	
	response.write "<br /><br />Primeira: " & .primeiraPagina
	response.write "<br />Última: " & .ultimaPagina
	response.write "<br />Próxima: " & .proximaPagina
	response.write "<br />Anterior: " & .anteriorPagina
End With
Set pag = Nothing
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.