[Resolvido] Paginacão com DB detalhada
Olá pessoal, vou postar uma paginação com banco de dados bem detalhada para todos compreenderem. Para desenvolvê-la eu tive como base a lógica utilizada nos behaviors do Dreamweaver.
Configurações gerais
$pg = $_SERVER["PHP_SELF"]; // Pega a URL da página em questão sem a query (se tiver).$totalExibir = 10; // O máximo de registros a serem exibidos por vez.$pr = 0; // Página inicial da exibição dos registrosif (isset($_GET['pr'])) { // Se existir a página na URL. $pr = $_GET['pr']; // altera o valor da variável $pr para o valor contido na URL.}$inicioExibir = $pr * $totalExibir; // O início da exibição dos registos [ 0 * 10 = 0 ]pr significa: página de resultado.
$rsAgendaTotal = $mySQL->runQuery("SELECT count(*) AS total FROM agenda"); // Verifica o total de registros disponíveis$rsAgenda = $mySQL->runQuery("SELECT * FROM agenda LIMIT $inicioExibir, $totalExibir"); // Seleciona os registros de acordo com a página. Ex. LIMIT 40,10 irá exibir 10 registros sendo que eles iniciarão apartir da linha 40.$row_rsAgenda = mysql_fetch_assoc($rsAgenda); // Buscando os resultados do recordset
$totalRow = mysql_result($rsOrgTotal,0,'total'); // Pega o total de registros consultado através da variável $rsAgendaTotal.}$totalPgs = ceil($totalRow/$totalExibir)-1; // Total de páginas necessárias para exibir todos os registros.
Observações importantes:
* $mySQL->runQuery = significa que estou utilizando uma classe para realizar as operações do MySQL, não vou disponibilizá-la para não extender. Você pode utilizar o mysql_query.
Vamos compreender a seguinte variável $totalPgs. $totalPgs = ceil(400/10)-1 = 39. Bom, a função ceil serve para arrendondar frações para cima. O -1 evita a exibição de uma última página em branco, ou seja, se estivermos 400/10 = 40 teríamos uma instrução SQL assim: ... LIMIT 400,10. Ou seja, iniciaremos a exibição dos dados apartir da linha 400, mas 400 é o máximo de registros, então teríamos uma página em branco. Não se esqueça que: $inicioExibir = $pr [40] $totalExibir [10 ];
Tendo definido essas configurações, vamos criar os links de navegação: Primeira, Anterior, Próxima e Última.
<ul>
<?php if($pr > 0) { // Exibe o link: Primeira somente se a variável $pr for maior que 0. ?><li><a xhref="<?php echo $pg; ?>">Primeira</a></li><?php } ?>
<?php if($pr > 0) { // Exibe o link: Anterior somente se a variável $pr for maior que 0. ?><li><a xhref="<?php echo $pg . '?pr=' . max(0, $pr - 1); ?>">Anterior</a></li><?php } ?>
<?php if($pr < $totalPgs) { // Exibe o link: Próxima somente se a variável $pr for maior que o total de páginas ($totalPgs). ?><li><a xhref="<?php echo $pg . '?pr=' . min($totalPgs, $pr + 1); ?>">Próxima</a></li><?php } ?>
<?php if($pr < $totalPgs) { // Exibe o link: Próxima somente se a variável $pr for maior que o total de páginas ($totalPgs). ?><li><a xhref="<?php echo $pg . '?pr=' . $totalPgs; ?>">Última</a></li><?php } ?></ul>
* min - utilizada para localizar o menor número.
* max - utilizada para localizar o maior número.
Outro exemplo de paginação com banco de dados está aqui: http://forum.imasters.com.br/index.php?showtopic=125127 postada pelo Fabyo.
Discussão (0)
Carregando comentários...