Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Espero que esse assunto não aborreça os moderadores (risos).
Caso:
Bom, veja essa paginação que montei, utilizei algumas partes de outras paginações que inclusive peguei aqui no fórum.
Visuamente fica assim:
‹ primeira « anterior 1 2 3 próxima » última ›
Sendo que os links: ‹ primeira, « anterior, próxima » e última › ficam desativados quando não há mais registros para exibir.
Ela funcionou legal até certo ponto.
Quando coloquei para exibir 2 registros por página de um grupo de 22 registros, gerou 12 páginas, ou seja, ele entendeu ter 24 registros.
Dúvida:
Ao clicar no link "última" que me leva à última página, exibe a mensagem "Nenhum Registro Encontrado" .
O correto seria gerar 11 páginas de 2 registros em cada.
Porque está gerando 12 páginas de 22 registros, sendo 2 por página?
Segue o código:
<style>
.centraliza{text-align:center;}
.n_cinza_14{font: 14px "Trebuchet MS", Tahoma, Arial; color:#666;font-weight:bold;}
.link_pag_selecionado {font: 13px "Trebuchet MS", Tahoma, Arial;font-weight: bold;color: #00f;text-decoration:none; background:#fff url('../imagens/seta_paginacao.gif') 5px 5px no-repeat; padding:8px 5px 0 5px;}
.link_n_preto_11 a:link {font: 13px "Trebuchet MS", Tahoma, Arial;font-weight: bold;color: #00f;text-decoration:none;}
.link_n_preto_11 a:visited {font: 13px "Trebuchet MS", Tahoma, Arial;font-weight: bold;color: #00f;text-decoration:none;}
.link_n_preto_11 a:hover {font: 13px "Trebuchet MS", Tahoma, Arial;font-weight: bold;color: #f60;text-decoration:underline;}
</style>
<div id="conteudo">
<%
id_not = numerico(limpa_var(request.QueryString("id_not")))
%>
<div class="titulo_texto">Notícias</div>
<%
'numero de registros por pagina...
pageSize = 5
if(len(Request.QueryString("pagina")) = 0 )then
paginaAtual = 1
else
paginaAtual = CInt(Request.QueryString("pagina"))
end if
' conta o numero de registros...
strSQL = "SELECT COUNT(*) AS total FROM tbl_noticias where status_not = 1"
set rs = conexao.execute(strSQL)
'total de registros
recordCount = Cint(rs("total"))
'calculamos o numero de paginas...
pageCount = (recordCount / pageSize)
If pageCount < 1 then
pageCount = 1
end if
rs.Close()
Flag1 = INT(paginaAtual / pagesize)
PI = INT(Flag1 * pagesize)
IF PI = 0 THEN
PI = 1
END IF
PF = PI + pagesize - 1
strSQL = "SELECT id_not, titulo_not FROM tbl_noticias where status_not = 1 ORDER BY id_not DESC LIMIT " & (paginaAtual - 1) * pageSize & " , " & pageSize
rs.Open strSQL, conexao
set rs = conexao.execute(strSQL)
if rs.BOF and rs.EOF then
Response.Write "<br><br><br><br><center>Nenhum Registro Encontrado</center>"
else
%>
<div>
<%
do while not rs.eof
titulo_not = rs("titulo_not")
%>
<div id="lista_meio">
<div class="link_n_azul_11"><a title="<%=titulo_not%>" href="noticias.asp?id_not=<%=rs("id_not")%>&pagina=<%=paginaAtual%>">» <%=titulo_not%></a></div>
</div>
<%
rs.MoveNext()
loop
%>
<%
TotPag = cInt(pageCount+1)
if cInt(pageCount) > 1 then
Response.Write "<div class='centraliza link_n_preto_11'>"
Response.Write "<hr />"
Response.Write "<div class='n_preto_11'>Páginas:</div><br />"
strLinkPaginacao = request.ServerVariables("SCRIPT_NAME")+"?id_not="&id_not&"&"
'Links desativados
if Cint(paginaAtual) = 1 then Links = Links & "<span class='n_cinza_14'>‹ primeira</a></span> "
if Cint(paginaAtual) = 1 then Links = Links & "<span class='n_cinza_14'>« anterior</span> "if Cint(paginaAtual) > 1 then Links = Links & "<a href='" & strLinkPaginacao & "pagina=1'>‹ primeira</a> "
if Cint(paginaAtual) > 1 then Links = Links & "<a href='" & strLinkPaginacao & "pagina=" & paginaAtual-1 & "'>« anterior</a> "if (paginaAtual+2) <= TotPag then
for I = paginaAtual+1 TO INT(paginaAtual+2)
Links = Links & "<a href='" & strLinkPaginacao & "pagina=" & I & "'> " & I & "</a> "
next
end if
'Links ativados
if Cint(paginaAtual) < TotPag then Links = Links & "<a href='" & strLinkPaginacao & "pagina=" & paginaAtual+1 & "'> próxima »</a> "
if Cint(paginaAtual) < TotPag then Links = Links & "<a href='" & strLinkPaginacao & "pagina=" & TotPag & "'>última ›</a>"if Cint(paginaAtual) = TotPag then Links = Links & "<span class='n_cinza_14'>próxima »</span></a> "
if Cint(paginaAtual) = TotPag then Links = Links & "<span class='n_cinza_14'>última ›</span></a> "
Response.Write"" & Links &""
Response.Write"</div>"
end if
Response.Write"</div>"
end if
Fechars(rs)
%>
</div>
Nossa, não querendo te decepcionar, mas na verdade seu código todo é uma gambiarra. Você montou seu recordcount, pagecount e pagesize através de uma consulta e fez matemática para chegar nos valores necessários.
Isso não é necessário. Você tem funções prontas que lhe dão esse valores.
Por exemplo, usando somente a sua segunda consulta você já consegue tudo que precisa para montar sua paginação.
recordcount = rs.recordcount
pagecount = rs.pagecount
pagesize = rs.pagesize.
Vou postar um exemplo de código abaixo e dê uma olhada, pode lhe facilitar a vida:
<%
dim cor1, cor2, intPagina
expSQL="select * FROM tabela WHERE IDCLIENTE = '"& SESSION("ID") &"'"
call AbreConexao()
'set bd =cn.execute(expSQL)
Set rs = Server.CreateObject("ADODB.Recordset")
rs.open expSQL, cn, 3, 3
rs.Pagesize = 100
if Request.QueryString("pagina")="" then
intpagina = 1
else
if cint(Request.QueryString("pagina"))<=1 then
intpagina = 1
else
if cint(Request.QueryString("pagina")) > rs.PageCount then
intpagina = rs.PageCount
else
intpagina = Request.QueryString("pagina")
end if
end if
end if
'abaixo server para intercalar as cores das linhas, no seu caso acho que não será útil, já que só irá exibir dois 'resgistros por página
Cor1 = "#EEEEEE"
Cor2 = "#FFFFFF"
Controle = 0
%>
<!--o esquema abaixo monta um menu de navegação nas páginas, não igual ao que você quer fazer, mas funciona. Esse abaixo te dirá em qual página voce está, quantas tem e tem um campo e um botão para digitar para qual pagina quer ir -->
<table width="792" border="0" align="center">
<tr>
<td width="594"><div align="right" style="font-weight: bold; color: #990000;"><%="Página: " & intpagina & "/" & rs.PageCount%></div></td>
<td width="188">
<form name="form1" method="get" action="tabela.asp">
<input type="text" name="Pagina" align="left" class="boxtext">
<input type="submit" name="submit" value="Ir" class = "formbutton">
</form>
</td>
</tr>
</table>
<br>
<div align="center">
<table width="798" border="1" align="center">
<tr>
<td width="90" bgcolor="#990000"><div align="center" style="font-weight: bold; color: #FFFFFF;">campo1</div></td>
<td width="207" bgcolor="#990000"><div align="center" style="font-weight: bold; color: #FFFFFF;">campo2</div></td>
<td width="219" bgcolor="#CC0000"><div align="center" style="font-weight: bold; color: #FFFFFF;">
<div align="center">campo3</div>
</div></td>
<td width="254" bgcolor="#990000"><div align="center" style="font-weight: bold; color: #FFFFFF;">campo4</div></td>
</tr>
<%
rs.AbsolutePage = intpagina
intrec = 0
do while intrec<rs.PageSize and not rs.eof
If Controle = 0 Then
Cor = Cor1
Controle = 1
Else
Cor = Cor2
Controle = 0
End if%>
<tr>
<td bgcolor=<%Response.Write(Cor)%> ><div align="center"> <%=rs.absoluteposition%></div></td>
<td bgcolor=<%Response.Write(Cor)%> ><div align="center"> <%=rs(Ucase("INSTANTE"))%></div></td>
<td bgcolor=<%Response.Write(Cor)%> ><div align="center"> <%=rs(ucase("fone"))%></div></td>
<td bgcolor=<%Response.Write(Cor)%> ><div align="center"> <%=rs(ucase("STATUS"))%></div></td>
<%
rs.movenext
intrec = intrec + 1
loop
'Criamos as Validações para a navegação "Anterior" e "Próximo"
if intpagina>1 then
%>
<a href="tabela.asp?pagina=<%=intpagina-1%>">Anterior</a>
<%
end if
if StrComp(intpagina,rs.PageCount)<>0 then
%>
<a href="tabela.asp?pagina=<%=intpagina + 1%>">Próximo</a>
<%
end if
rs.close
Set rs = Nothing
%>
</tr>
</table>
</div>Mas a parte em ASP está corretinha, se tiver dúvidas avisa.
Abraços...
Aquele 0.4 foi um verdadeiro POG (o Ted k' vai virar seu fã hehe), pois nem sempre o 0.4 servirá.
Se a sugestão do Claudio Neto não lhe servir, dê uma olhada na Classe de páginação que postei no Laboratório de Scripts. Utilizo ela sem problemas e sempre que acho algum, posto a correção lá.
Amiguinhos, se vocês observaram no título do post e no SQL, meu banco de dados é MySql, logo as funções que o Claudio Neto passou, não me servem. Certo?
Qual o melhor modo?
Observei o título e por isso sugeri a Classe que criei.
Testada com Access e MySQL.
Aquele 0.4 foi um verdadeiro POG (o Ted k' vai virar seu fã hehe), pois nem sempre o 0.4 servirá.
Tem gente que se esconde por meio de outros (reticências)!!! http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif
Olha só, achei algo dizendo que funcionar o recordcount com o MySQL é necessário fazer include do arquivo adovbs.inc, que fica em arquivos de programas --> arquivos comuns --> system --> ADO.
Se isso for verdade, pode ser que também libere o pagecount e o pagesize.
No tópico ele dizia que o arquivo deve estar no mesmo diretório de sua página.
Infelizmente não tenho mysql instalado aqui para testar antes de te dar a dica, então não tenho como confirmar que funcione.
O link para o tópico que achei está aqui
Depois diga se funcionou.
Ah, e desculpe, não tinha conhecimento de que não funciona essas funções para mysql...
Hargon, testei minha "gambiarra" em diversas situações, com diferentes grupos de registros e funcionou perfeitamente.
Sua classe é sem dúvidas fantástica, mas é uma penca de linhas. Minha inteção é reduzir linhas de código.
Eu vi uma paginação que o Ted'Kfez, perguntaram à ele sobre links de anterior, próximo, limitar exibição de número de páginas e ele disse que era só adicionar uns "if's", mas o tópico morreu e até hoje não achei nada relacionado.
Poderíamos ressucitar o tópico?
do que precisa dessa paginação que crie?
Opa, já?
Bom em relação a paginação que você já colocou aqui no fórum e eu citei acima.
Seria interessante ver um modo de colocar algo assim:
‹ primeira « anterior [1] 2 3 próxima » última ›
Imagine que temos 10 páginas nessa paginação e eu estou na 5, logo ela estaria assim:
‹ primeira « anterior 3 4 [5] 6 7 próxima » última ›
Repare que as páginas 1 e 2 sumiram.
Detalhe: os links: ‹ primeira, « anterior, próxima » e última › ficam desativados quando não há mais registros para exibir.
Eu tenho essa solução em Access, se ela ajudar na construção da MySql eu posto aqui Ted'K.
Foi mal a piadinha rapaz... mas falando sério, a classe que criei faz isso tudo que você precisa. A quantidade enorme de linhas é pq ela faz paginação para Access e MySQL, e ainda faz algumas validações importantes para a classe. Você pode remover esses detalhes para diminuir o código.
Sobre o arredondamento do 0.4, na classe criei essa função (1/2 POG) para arredondamento, veja se lhe atende para o seu primeiro código, talvez já resolva:
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
Se não servir, poste sua solução em Access para adaptarmos ao MySQL.
Tudo bem Hargon, sua piadinha faz parte, comigo não tem stress.
Seguinte, como eu havia dito, tenho uma paginação para banco Access, quem a fez foi meu amigo Marcelo e eu fiz algumas adaptações.
Será que tem como passar para MySQL com as mesmas funcionabilidades?
Segue o código:
<div id="conteudo">
<div>Mais notícias</div>
<%
id_not = request.QueryString("id_not")
intPagina = Request.QueryString("pagina")
if intPagina = "" then intPagina = 1
Set rs = Server.Createobject("ADODB.RECORDSET")
Set rs.ActiveConnection = Conexao
QtdRegistro = 2
rs.CursorType = 3
rs.PageSize = QtdRegistro
strSQL = "SELECT id_not, titulo_not FROM tbl_noticias ORDER BY id_not DESC;"
rs.Open strSQL, Conexao
if rs.BOF and rs.EOF then
Response.Write "<br><br><br><br><center>Nenhum Registro Encontrado</center>"
else
%>
<ul>
<%
if Int(intPagina) > rs.PageCount then intPagina = 1
rs.AbsolutePage = intPagina
x = 0
Do While Not rs.EOF and x < rs.PageSize
x = x + 1
titulo_not = rs("titulo_not")
%>
<li><a title="<%=titulo_not%>" href="noticias.asp?id_not=<%=rs("id_not")%>&pagina=<%=intPagina%>">» <%=titulo_not%></a></li>
<%
rs.Movenext
loop
%>
</ul>
<div>
<hr />'Só mostra a paginação se houver registros suficientes
if TotPag > 1 then
Response.Write "<div class='n_preto_11'>Páginas:</div><br />"
strLinkPaginacao = Request.ServerVariables("SCRIPT_NAME")+"?id_not="&id_not&"&"
'Imprime " primeira >> " e " anterior > " sem seus respectivos links
if Cint(intPagina) = 1 then Links = Links & "<span class='n_cinza_14'>‹ primeira</a></span> "
if Cint(intPagina) = 1 then Links = Links & "<span class='n_cinza_14'>« anterior</span> "
'Imprime " primeira >> " e " anterior > " com seus respectivos links
if Cint(intPagina) > 1 then Links = Links & "<a href='" & strLinkPaginacao & "pagina=1'> ‹ primeira </a> "
if Cint(intPagina) > 1 then Links = Links & "<a href='" & strLinkPaginacao & "pagina=" & intPagina-1 & "'> ‹‹ anterior </a> "
'Imprime as páginas que ficarão ao lado esquerdo da página selecionada
if (intPagina-2) > 0 then
for I = INT(intPagina-2) TO intPagina-1
Links = Links & "<a href='" & strLinkPaginacao & "pagina=" & I & "'> " & I & "</a> "
next
end if
'Imprime a página atual
Links = Links & "<span class='link_pag_selecionado'>" & intPagina & "</span>"
'Imprime as páginas que ficarão ao lado direito da página selecionada
if (intPagina+2) <= TotPag then
for I = intPagina+1 TO INT(intPagina+2)
Links = Links & " <a href='" & strLinkPaginacao & "pagina=" & I & "'> " & I & " </a>"
next
end if
'Imprime " próxima >> " e " última > " com seus respectivos links
if Cint(intPagina) < Cint(TotPag) then Links = Links & " <a href='" & strLinkPaginacao & "pagina=" & intPagina+1 & "'> próxima ›› </a>"
if Cint(intPagina) < Cint(TotPag) then Links = Links & " <a href='" & strLinkPaginacao & "pagina=" & TotPag & "'>última ›</a>"
'Imprime " próxima >> " e " última > " sem seus respectivos links
if Cint(intPagina) = Cint(TotPag) then Links = Links & " <span class='n_cinza_14'>próxima »</span></a>"
if Cint(intPagina) = Cint(TotPag) then Links = Links & " <span class='n_cinza_14'>última ›</span></a>"
'Imprime a paginação montada
Response.Write"" & Links &""
end if
Response.Write"</div>"
end if
Fechars(rs)
%>
</div>
No código do seu amigo, altere a linha:
rs.CursorType = 3
Para
Conexao.CursorLocation = 3
Valeu pela dica Hargon, mas você acha que tem como transpor este script de modo que ele funcione com MySQL?
Eu fiz apenas essa alteração que falei, e ele funcionou perfeitamente no MySQL e Access.
Aí não deu certo?
Não tenho como testar no momento, mas como? mesmo sem limit funcionou para mysql?
Isso.
Ele paginou usando Recordset. Comparei o código do seu amigo com o código do Ted k' e vi que a única diferença entre eles era essa, com a vantagem que o código do Ted k' funciona com MySQL.
Fiz essa alteração e funcionou normal. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Hum sim.
Bom, por enquanto agradeço ao pessoal pela força e mais tarde posto o resultado se ocorreu tudo bem aqui.
Grande abraço! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif
>
Opa, já?
Bom em relação a paginação que você já colocou aqui no fórum e eu citei acima.
Seria interessante ver um modo de colocar algo assim:
‹ primeira « anterior [1] 2 3 próxima » última ›
Imagine que temos 10 páginas nessa paginação e eu estou na 5, logo ela estaria assim:
‹ primeira « anterior 3 4 [5] 6 7 próxima » última ›
Repare que as páginas 1 e 2 sumiram.
Detalhe: os links: ‹ primeira, « anterior, próxima » e última › ficam desativados quando não há mais registros para exibir.
Eu tenho essa solução em Access, se ela ajudar na construção da MySql eu posto aqui Ted'K.
em casa perdido lembrei desse tópico e olha o que fiz:
<%@ Language="VBScript" %>
<%
Dim Conexao
Set Conexao = Server.CreateObject("Adodb.Connection")
Conexao.ConnectionString = "Driver=MySQL ODBC 3.51 Driver; DataBase=xxxxxxx; Server=xxxxxx; Uid=xxxx; PassWord=xxxxx;"
Conexao.Open
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Paginando Dados</title>
</head>
<style type="text/css"></style>
<body>
<table width="600" border="0" align="center" cellpadding="0" cellspacing="0">
<%
Dim Rs_DADOS, PagNav, TotalPag
Dim Anterior, Proximo, Jo, PaginaVisita
Set Rs_DADOS = Server.CreateObject("Adodb.RecordSet")
Conexao.CursorLocation = 3
Rs_DADOS.PageSize = 15
Rs_DADOS.Open "Select Codigo, Unidade, PFNome From Propostas Order By PFNome Desc",Conexao
If Rs_DADOS.Eof Then
Response.Write("<tr><td height=""28"" align=""center"">LISTA VAZIA</td></tr>")
Else
PagNav = CInt(Request.QueryString("Pages"))
If PagNav = 0 Then : PagNav = 1 : End If
Rs_DADOS.AbsolutePage = PagNav
TotalPag = Rs_DADOS.PageCount
%>
<tr>
<td><table class="table" width="600" border="0" cellspacing="0" cellpadding="0">
<tr class="fonteBr">
<td width="145" height="36" align="center" bgcolor="#FFBA75"><strong>CÓDIGO</strong></td>
<td width="334" align="center" bgcolor="#FFBA75"><strong>NOME</strong></td>
<td width="119" align="center" bgcolor="#FFBA75"><strong>UNIDADE</strong></td>
</tr>
<% While Not Rs_DADOS.Eof And Rs_DADOS.AbsolutePage = PagNav %>
<tr class="fontePr">
<td height="27" align="center"><% Response.Write(Rs_DADOS("Codigo")) %></td>
<td align="center"><% Response.Write(Rs_DADOS("PFNome")) %></td>
<td align="center"><% Response.Write(Rs_DADOS("Unidade")) %></td>
</tr>
<%
Rs_DADOS.MoveNext : Wend
Anterior = PagNav - 1
Proximo = PagNav + 1
If Anterior <= 0 Then : Anterior = 1 : End If
If Proximo > TotalPag Then : Proximo = TotalPag : End If
%>
</table></td>
</tr>
<tr>
<td height="28"> </td>
</tr>
<tr>
<td align="center"><table width="457" height="41" border="0" cellpadding="0" cellspacing="4">
<tr>
<td width="300" height="30" align="center" class="fontePr"><%
If Request.QueryString("Pages") = "" Then
Response.Write("Página 1 de "&TotalPag&"")
Else
Response.Write("Página "&Request.QueryString("Pages")&" de "&TotalPag&"")
End If
%></td>
<td width="42" align="center" class="pagNumber"><a href="?Pages=1" class="fonte"> « Início </a>
<%
PaginaVisita = CInt(Request.QueryString("Pages"))
If PagNav > 1 Then
Response.Write("<td width=""36"" align=""center"" "& _
"class=""pagNumberMark""><a href=""?Pages="&Anterior&""" "& _
"style=""font: 12px Arial; color: #FFFFFF;""> « </a></td>")
End If
If PagNav > 5 Then
Response.Write("<td width=""28"" align=""center"" class=""fontePontos""> ... </td>")
End If
If PagNav <= 5 Then
If TotalPag >= 5 Then
For Jo = 1 To 5
If PagNav = Jo Then
Response.Write("<td width=""36"" align=""center"" class=""pagNumberMark""> <strong>"&Jo&"</strong> </td>")
Else
Response.Write("<td width=""36"" align=""center"" class=""pagNumber""> "& _
"<a href=""?Pages="&Jo&""" class=""fonte""> "&Jo&" </a></td>")
End If
Next
Else
For Jo = 1 To TotalPag
If PagNav = Jo Then
Response.Write("<td width=""36"" align=""center"" class=""pagNumberMark""> <strong>"&Jo&"</strong> </td>")
Else
Response.Write("<td width=""36"" align=""center"" class=""pagNumber""> "& _
"<a href=""?Pages="&Jo&""" class=""fonte""> "&Jo&" </a></td>")
End If
Next
End If
End If
If PagNav > 5 Then
PagNav = PagNav + 4
Pg = PagNav
MaxB = Request.QueryString("Pages") - 1
If (MaxB + 1) = TotalPag Then
For Jo = MaxB To Pg - 4
If PaginaVisita = Jo Then
Response.Write("<td width=""36"" align=""center"" class=""pagNumberMark""> <strong>"&Jo&"</strong> </td>")
Else
Response.Write("<td width=""36"" align=""center"" class=""pagNumber""> "& _
"<a href=""?Pages="&Jo&""" class=""fonte""> "&Jo&" </a></td>")
End If
Next
ElseIf (MaxB + 2) = TotalPag Then
For Jo = MaxB To Pg - 3
If PaginaVisita = Jo Then
Response.Write("<td width=""36"" align=""center"" class=""pagNumberMark""> <strong>"&Jo&"</strong> </td>")
Else
Response.Write("<td width=""36"" align=""center"" class=""pagNumber""> "& _
"<a href=""?Pages="&Jo&""" class=""fonte""> "&Jo&" </a></td>")
End If
Next
Else
For Jo = (MaxB - 1) To Pg - 2
If PaginaVisita = Jo Then
Response.Write("<td width=""36"" align=""center"" class=""pagNumberMark""> <strong>"&Jo&"</strong> </td>")
Else
Response.Write("<td width=""36"" align=""center"" class=""pagNumber""> "& _
"<a href=""?Pages="&Jo&""" class=""fonte""> "&Jo&" </a></td>")
End If
Next
End If
End If
If (TotalPag <> PaginaVisita) And (TotalPag >= 5) Then
Response.Write("<td width=""28"" align=""center"" class=""fontePontos""> ... </td>")
End If
%>
<td width="34" align="center" class="pagNumberMark"><a href="?Pages=<% Response.Write(Proximo) %>" class="fonte"> » </a></td>
<td width="42" align="center" class="pagNumber"><a href="?Pages=<% Response.Write(TotalPag) %>" class="fonte"> Final » </a></td>
</tr>
</table></td>
</tr>
<%
End If
Set Rs_DADOS = Nothing
%>
</table>
</body>
</html>Sinceramente Ted K', eu não entendo porque o pessoal vê isso como gambiarra(POG). Sinto também um ar de repúdio com relação às POG's.
Existe outro modo para fazer isso? Se não, porque seria gambiarra? Não ocorreram erros!
Não considero isso como gambiarra. Não seria a "descoberta" de um novo modo?
Eu tenho uma paginação parecida com essa que você fez, com o código um pouco diferente que funciona perfeitamente em todos os casos porém não adiciona os três pontinhos como a sua, mas isso é mole.
O seu código funcionou perfeitamente aqui em localhost, mas creio que funciona perfeitamente em qualquer sistema e em qualquer servidor.
Já vi tanta conversa fiada sobre paginação para MySql, etc e tal, mas nunca apresentaram nada que atendesse de fato, como essa que você montou.
O que falta ainda em seu código, é desativar(não é ocultar) os links de ‹ primeira « anterior próxima » última › quando não utilizados.
Mandou bem! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif
para desativar é só inibir o codigo é besteira
e falo que fiz um POG, esse é um POG pq necessariamente não parei para estudar o código, fiz brutalmente, naquele lance de correria e não há paginação com POG e sim cada programador faz seus códigos do jeito que bem entendem, fique tranquilo, quando falei POG significa que não estudei os codigos mais funcionou pq POG foi feito para funcionar hehehe!!
feliz festa cara!!!
Estou tranquilo, eu entendi, mas o que me deixa revoltado (não com você que é um adepto ahah) são as pessoas que nos dirigem a palavra de forma pejorativa, quando inventamos um jeito de fazer as coisas, principalmente as POG's.
Sou à favor das POG's desde que elas funcionem sem limitações.
Afinal, as POG's superam até o famoso jeitinho brasileiro.
Boas festas à todos ae! http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif
já que gosta tanto de POG igual a mim, junte-se ao tópico que criei hehe!
Paginação com ASP e MySQL:
Exemplo: Veja online
/applications/core/interface/imageproxy/imageproxy.php?img=http://img522.imageshack.us/img522/3203/paginacaoaspmysqlle7.jpg&key=3c72bea024fe2605d3675772c47b99401e72b2e1f8a920d3a68716088dc03c71" alt="Imagem Postada" />
Como paginação cada um monta do jeito que acha melhor, peguei o código montado pelo Ted K' e fiz algumas modificações:
<%
Dim Conexao
Set Conexao = Server.CreateObject("Adodb.Connection")
Conexao.ConnectionString = "driver=MySQL ODBC 5.1 Driver;server=localhost;uid=root;pwd=;database=seu_banco"
Conexao.Open
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Paginação com ASP e MySQL</title>
</head>
<style media="screen" type="text/css">.pag-atual{float:left; padding:4px; background:#c00; color:#fff; margin:3px;}
.pag-pontinhos{float:left; padding:4px; background:#E8E8E8; color:#999; margin:3px;}
.pag-navegacao-off{float:left; padding:4px; background:#E8E8E8; color:#999; margin:3px;}
.pag-link{float:left; padding:4px; background:#fff; margin:3px;}
.pag-link a{color:#c00;text-decoration:none;}
.pag-link a:hover{color:#000;text-decoration:underline;}
.pag-navegacao{float:left; padding:4px; background:#fff; margin:3px;}
.pag-navegacao a{color:#c00;text-decoration:none;}
.pag-navegacao a:hover{color:#000;text-decoration:underline;}
</style>
<body>
<div id="quadro">
<h2>Paginação com ASP e MySQL</h2>
<%
Dim rs, PagNav, TotalPag
Dim Anterior, Proximo, PagAtual, PaginaVisita
Set rs = Server.CreateObject("Adodb.RecordSet")
Conexao.CursorLocation = 3
rs.pagesize = 3
rs.Open "Select * From tbl_noticias Order By id_not Desc",Conexao
If rs.Eof Then
Response.Write("Não há registros")
Else
PagNav = CInt(Request.QueryString("pagina"))
If PagNav = 0 Then : PagNav = 1 : End If
rs.AbsolutePage = PagNav
TotalPag = rs.PageCount
%>
<div id="dados">
<% While Not rs.Eof And rs.AbsolutePage = PagNav %>
<div id="col-01"><% Response.Write(rs("id_not")) %></div>
<div id="col-02"><% Response.Write(rs("titulo_not")) %></div>
<%
rs.MoveNext : Wend
Anterior = PagNav - 1
Proximo = PagNav + 1
If Anterior <= 0 Then : Anterior = 1 : End If
If Proximo > TotalPag Then : Proximo = TotalPag : End If
%>
</div>
<div id="indice">
<%
If Request.QueryString("pagina") = "" Then
Response.Write("Página 1 de "&TotalPag&"")
Else
Response.Write("Página "&Request.QueryString("pagina")&" de "&TotalPag&"")
End If
%>
</div>
<div id="paginacao">
<%
PaginaVisita = CInt(Request.QueryString("pagina"))
MontaLink = Request.ServerVariables("SCRIPT_NAME")+"?variavel=teste&"
If PagNav = 1 Then
Response.Write("<div class='pag-navegacao-off'> « primeira </div>")
else
Response.Write("<div class='pag-navegacao'><a href="""&MontaLink&"pagina=1""> « primeira </a></div>")
end if
If PagNav > 1 Then
Response.Write("<div class='pag-navegacao'><a href="""&MontaLink&"pagina="&Anterior&"""> «anterior </a></div>")
else
Response.Write("<div class='pag-navegacao-off'> «anterior </div>")
End If
If PagNav > 5 Then
Response.Write("<div class='pag-pontinhos'> ... </div>")
End If
If PagNav <= 5 Then
If TotalPag >= 5 Then
For PagAtual = 1 To 5
If PagNav = PagAtual Then
Response.Write("<div class='pag-atual'> "&PagAtual&" </div>")
Else
Response.Write("<div class='pag-link'><a href="""&MontaLink&"pagina="&PagAtual&"""> "&PagAtual&" </a></div>")
End If
Next
Else
For PagAtual = 1 To TotalPag
If PagNav = PagAtual Then
Response.Write("<div class='pag-atual'> "&PagAtual&" </div>")
Else
Response.Write("<div class='pag-link'><a href="""&MontaLink&"pagina="&PagAtual&"""> "&PagAtual&" </a></div>")
End If
Next
End If
End If
If PagNav > 5 Then
PagNav = PagNav + 4
Pg = PagNav
MaxB = Request.QueryString("pagina") - 1
If (MaxB + 1) = TotalPag Then
For PagAtual = MaxB To Pg - 4
If PaginaVisita = PagAtual Then
Response.Write("<div class='pag-atual'> "&PagAtual&" </div>")
Else
Response.Write("<div class='pag-link'><a href="""&MontaLink&"pagina="&PagAtual&"""> "&PagAtual&" </a></div>")
End If
Next
ElseIf (MaxB + 2) = TotalPag Then
For PagAtual = MaxB To Pg - 3
If PaginaVisita = PagAtual Then
Response.Write("<div class='pag-atual'> "&PagAtual&" </div>")
Else
Response.Write("<div class='pag-link'><a href="""&MontaLink&"pagina="&PagAtual&"""> "&PagAtual&" </a></div>")
End If
Next
Else
For PagAtual = (MaxB - 1) To Pg - 2
If PaginaVisita = PagAtual Then
Response.Write("<div class='pag-atual'> "&PagAtual&" </div>")
Else
Response.Write("<div class='pag-link'><a href="""&MontaLink&"pagina="&PagAtual&"""> "&PagAtual&" </a></div>")
End If
Next
End If
End If
If (TotalPag <> PaginaVisita) And (TotalPag > 5) Then
Response.Write("<div class='pag-pontinhos'> ... </div>")
End If
If PaginaVisita = TotalPag Then
Response.Write("<div class='pag-navegacao-off'> próxima» </div>")
else
Response.Write("<div class='pag-navegacao'><a href="""&MontaLink&"pagina="&Proximo&"""> próxima» </a></div>")End If
If PaginaVisita = TotalPag Then
Response.Write("<div class='pag-navegacao-off'> última » </div>")
else
Response.Write("<div class='pag-navegacao'><a href="""&MontaLink&"pagina="&TotalPag&"""> última » </a></div>")
end if
%>
</div>
<%
End If
Set rs = Nothing
%>
</div>
</body>
</html>Código testando e aprovado 100%Se alguém quiser melhorar fique à vontade. [http://forum.imasters.com.br/public/style_emoticons/](http://forum.imasters.com.br/public/style_emoticons/)default/thumbsup.gifótimo, irei colocar no laboratório!!
Estou até com vergonha de postar, mas vejam isso:
Troquei isso:
<%
TotPag = cInt(pageCount+1)
if cInt(pageCount) > 1 then
%>
Por isso:
<%
TotPag = round(pageCount+0.4)
if cInt(pageCount) > 1 then
%>
Dessa maneira funcionou corretamente.
Isso é gambiarra né? Ou tem lógica?