PAGINAÇÃO COM LIMITE

154 views
Skip to first unread message

Mero Aprendiz...

unread,
Jul 6, 2011, 11:07:32 AM7/6/11
to LISTA PHP, digu...@hotmail.com
Tenho um sistema de paginação que funciona corretamente, porém, a
numeração das páginas não tem limite.

Quero que tenha limite na paginação...

Atualmente está sem limite, ou seja, na medida em que os dados vão
sendo inseridos, vai aumentando as páginas:
« Menos 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 Mais »

Eu gostaria de limitar para no máximo 10 páginas assim:
« Menos 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 Mais »

Já tentei de tudo e nada...

Segue abaixo o código:

<?php
if ($pageNum_abencoados > 0) { // Show if not first page ?>
<a href="<?php printf("%s?pageNum_abencoados=%d%s", $currentPage,
max(0, $pageNum_abencoados - 1), $queryString_abencoados); ?>"><font
color="#FF0000"><strong>&laquo; Menos</strong></font></a>
<?php } // Show if not first page ?>

<?php
$last=$totalPages_abencoados+1;
$current=$pageNum_abencoados+1;


for ($i = 1; $i <= $last; $i++) {
if($current==$i){
echo "<font color='#000000'>"."<strong> ". $i . "</strong>". "</
font> "." | ";
} else { ?>
<a href="<?php printf("%s?pageNum_abencoados=%d%s",
$currentPage, min($totalPages_abencoados, $i-1),
$queryString_abencoados); ?>"><?php echo $i;?></a><?php echo " | ";?>
<?php
}
}
?>
<?php if ($pageNum_abencoados < $totalPages_abencoados) { // Show if
not last page ?>
<a href="<?php printf("%s?pageNum_abencoados=%d%s", $currentPage,
min($totalPages_abencoados, $pageNum_abencoados + 1),
$queryString_abencoados); ?>"><font color="#FF0000"><strong>Mais
&raquo;</strong></font></a>
<?php } // Show if not last page ?>

Bernardo Vieira

unread,
Jul 6, 2011, 12:40:12 PM7/6/11
to list...@googlegroups.com
"Já tentei tudo" é meio vago, né? 
Só dei um corrida de olho no seu código, mas tente tente adicionar o limite de páginas à condição do seu for:
 
for ($i = 1; $i <= $last && $i <= 10; $i++) {
(...)
}



2011/7/6 Mero Aprendiz... <quero...@gmail.com>
--
============================================================
LEIAM SEMPRE AS REGRAS DA LISTA:
http://groups.google.com.br/group/listaphp/web/regras-da-lista-php
--
JQUERY MAGAZINE > http://www.jquerymagazine.com.br
--
PHP MAGAZINE > http://www.phpmagazine.com.br
--
LISTA NODE.JS > https://groups.google.com/group/lista-nodejs?hl=pt-br
--
AJAX-BRASIL > http://groups.google.com/group/ajax-brasil
--
PYTHON-GOOGLE > http://groups.google.com.br/group/python-google
--
DOTNET-BRASIL > http://groups.google.com.br/group/dotnet_br
============================================================

Cassiano Ricardo Mourão

unread,
Jul 6, 2011, 1:04:27 PM7/6/11
to list...@googlegroups.com
o buraco é um pouco mais embaixo, porque desse modo ele nunca iria ver a página 11 e conseguintes.

mas como tá com cara de que pegou pronto e quer moleza, não gasto meu teclado não :(

OzzyLords

unread,
Jul 6, 2011, 1:35:44 PM7/6/11
to list...@googlegroups.com
cara, fiz esse codigo abaixo aqui pra vc...
 
só nao botei as limitações, mas tem o que você quer...
 
 
brinca com ele e modifique a sua maneira...
 
 
<?php
    $registros = '231'; //numero de registros vindos do banco de dados
    $views = 5; //numero de resultados por pagina ex;
 
    //arredondar o numero de registros quando quebrado com ceil(); ex: 231/5 = 46,2... com ceil fica 47
    $paginas = $registros/$views;
    if(!isset($_GET['page']) && empty($_GET['page'])){
        $page = 5;
    }
    else{
        $page = $_GET['page'];
 
    }
    $page_in = $page-4;
    $page_fin= $page+5;
    while($page_in < $page){
        echo "<a href='?page=".$page_in."'>".$page_in.'</a> - ';
        $page_in++;
    }
    while($page < $page_fin){
        echo "<a href='?page=".$page."'>".$page.'</a> - ';
        $page++;
    }
    echo "<a href='?page=".$page_fin."'>".$page_fin.'</a>';
?>
 

hnrq

unread,
Jul 6, 2011, 1:38:52 PM7/6/11
to list...@googlegroups.com
http://www.trirand.net/demophp.aspx

se é pra vir tudo do banco e montar a paginação pode usar um plugin de jquery que faça isso...

Att,
Henrique Lauro Bagio de Souza.



2011/7/6 OzzyLords <ozzy...@gmail.com>

Filipe Cifali

unread,
Jul 6, 2011, 1:59:39 PM7/6/11
to list...@googlegroups.com
Olha meu amigo, se os posts s�o pegos pelo banco, que tal usar o banco
para limitar as p�ginas na query?

LIMIT serve para isso muito bem ;)

E realmente, como os outros disseram, "tentei de tudo e nada..." parece
papo de quem n�o conhece as linguagens envolvidas no projeto...

At� porque, nunca vi dev brasileiro escrever metade do c�digo em ingl�s
e metade em portugu�s sendo seu pr�prio c�digo.

Em 06/07/2011 12:07, Mero Aprendiz... escreveu:
> Tenho um sistema de pagina��o que funciona corretamente, por�m, a
> numera��o das p�ginas n�o tem limite.
>
> Quero que tenha limite na pagina��o...
>
> Atualmente est� sem limite, ou seja, na medida em que os dados v�o
> sendo inseridos, vai aumentando as p�ginas:
> � Menos 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |


> 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 Mais �
>

> Eu gostaria de limitar para no m�ximo 10 p�ginas assim:
> � Menos 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 Mais �
>
> J� tentei de tudo e nada...
>
> Segue abaixo o c�digo:

Mero Aprendiz...

unread,
Jul 6, 2011, 3:09:18 PM7/6/11
to LISTA PHP
realmente o código eu peguei pronto.
já vasculhei tudo quanto é biboca na internet, já estudei, li, reli, e
nada... mas tudo bem... vou continuar tentando...
se alguém tiver alguma idéia de como resolver esta questão, agradeço
desde já... obrigado

Cassiano Ricardo Mourão

unread,
Jul 6, 2011, 3:28:34 PM7/6/11
to list...@googlegroups.com
Bom, terminei fazendo aqui uma parada que vai (ou deve) funcionar.

Vou assumir:
 - que seu código está certo;
 - que $current contém o valor da página sendo visualizada no momento;
 - que $last contém o valor da última página.

Abaixo em vermelho você encontra o que é necessário inserir/alterar.

$offset é a quantidade de páginas que deverão aparecer antes e depois da página atual, com limites 1 <-> página final.
Ou seja: se vc tem 20 páginas, está na página 10 e o offset é 5, deverá exibir:

... 5 | 6 | 7 | 8 | 9 | <blabla>10</blabla> | 11 | 12 | 13 | 14 | 15 ...


$last=$totalPages_abencoados+1;
$current=$pageNum_abencoados+1;

$offset = 5;

$piso = ($current - $offset) < 1 ? 1 : ($current - $offset);
$teto = ($current + $offset) > $last ? $last : ($current + $offset);

 for ($i = $piso; $i <= $teto; $i++) {

Eduardo

unread,
Jul 6, 2011, 3:45:43 PM7/6/11
to list...@googlegroups.com
O que eu uso é o seguinte...

$total_paginas = 50;
$pagina_atual = 15;

if ($total_paginas > 10) {
    $pagina_inicial = $pagina_atual -5;
    $pagina_final = $pagina_atual +5;
} else {
    $pagina_inicial = 1;
    $pagina_final = $total_paginas;
}

dae faz o for da paginação do inicial para o final...

Você vai ter no máximo 11 páginas...

Eduardo.

Mero Aprendiz...

unread,
Jul 8, 2011, 3:48:16 AM7/8/11
to LISTA PHP
Olá pessoal, consegui, muito obrigado pela ajuda.

Voltei para postar o código, caso alguém precise, o código ficou
assim:

<?php
# ------------------------
# função de navegação
# ------------------------
function
buildNavigation($pageNum_Recordset1,$totalPages_Recordset1,$prev_Recordset1,$next_Recordset1,$separator="
| ",$max_links=10, $show_page=true)
{
GLOBAL $maxRows_abencoados,$totalRows_abencoados;
$pagesArray = ""; $firstArray = ""; $lastArray = "";
if($max_links<2)$max_links=2;
if($pageNum_Recordset1<=$totalPages_Recordset1 &&
$pageNum_Recordset1>=0)
{
if ($pageNum_Recordset1 > ceil($max_links/2))
{
$fgp = $pageNum_Recordset1 - ceil($max_links/2) > 0 ?
$pageNum_Recordset1 - ceil($max_links/2) : 1;
$egp = $pageNum_Recordset1 + ceil($max_links/2);
if ($egp >= $totalPages_Recordset1)
{
$egp = $totalPages_Recordset1+1;
$fgp = $totalPages_Recordset1 - ($max_links-1) > 0 ?
$totalPages_Recordset1 - ($max_links-1) : 1;
}
}
else {
$fgp = 0;
$egp = $totalPages_Recordset1 >= $max_links ? $max_links :
$totalPages_Recordset1+1;
}
if($totalPages_Recordset1 >= 1) {
# ------------------------
# procura por variavel $_GET na url
# ------------------------
$_get_vars = '';
if(!empty($_GET) || !empty($HTTP_GET_VARS)){
$_GET = empty($_GET) ? $HTTP_GET_VARS : $_GET;
foreach ($_GET as $_get_name => $_get_value) {
if ($_get_name != "pageNum_abencoados") {
$_get_vars .= "&$_get_name=$_get_value";
}
}
}
$successivo = $pageNum_Recordset1+1;
$precedente = $pageNum_Recordset1-1;
$firstArray = ($pageNum_Recordset1 > 0) ? "<a href=
\"$_SERVER[PHP_SELF]?pageNum_abencoados=$precedente$_get_vars\">
$prev_Recordset1</a>" : "$prev_Recordset1";
# ----------------------
# numero das paginas
# ----------------------
for($a = $fgp+1; $a <= $egp; $a++){
$theNext = $a-1;
if($show_page)
{
$textLink = $a;
} else {
$min_l = (($a-1)*$maxRows_abencoados) + 1;
$max_l = ($a*$maxRows_abencoados >= $totalRows_abencoados) ?
$totalRows_abencoados : ($a*$maxRows_abencoados);
$textLink = "$min_l - $max_l";
}
$_ss_k = floor($theNext/26);
if ($theNext != $pageNum_Recordset1)
{
$pagesArray .= "<a href=\"$_SERVER[PHP_SELF]?pageNum_abencoados=
$theNext$_get_vars\">";
$pagesArray .= "$textLink</a>" . ($theNext < $egp-1 ?
$separator : "");
} else {
$pagesArray .= "$textLink" . ($theNext < $egp-1 ? $separator :
"");
}
}
$theNext = $pageNum_Recordset1+1;
$offset_end = $totalPages_Recordset1;
$lastArray = ($pageNum_Recordset1 < $totalPages_Recordset1) ? "<a
href=\"$_SERVER[PHP_SELF]?pageNum_abencoados=$successivo$_get_vars\">
$next_Recordset1</a>" : "$next_Recordset1";
}
}
return array($firstArray,$pagesArray,$lastArray);
}

?>

<?php
# variable declaration
$prev_abencoados = "&laquo; Anterior";
$next_abencoados = "Proxima &raquo;";
$separator = " | ";
$max_links = 5;
$pages_navigation_abencoados = buildNavigation($pageNum_abencoados,
$totalPages_abencoados,$prev_abencoados,$next_abencoados,$separator,
$max_links,true);

print $pages_navigation_abencoados[0];
?>
<?php print $pages_navigation_abencoados[1]; ?> <?php print
$pages_navigation_abencoados[2]; ?>
Reply all
Reply to author
Forward
0 new messages