PHP - Paginação

Março 2017


Apresentação


Essa função te ajuda a criar uma paginação. Ela faz mais do que exibir a lista dos links, mas você pode limitar o número de links, antes e depois da página atual.

A função


<?php 
/* Opções de conexão ao MySQL */ 
define('DB_HOST', 'localhost'); // Host do servidor MySQL 
define('DB_NAME', 'la_base'); // Nome do banco de dados 
define('DB_USER', 'root'); // Nom do usuário MySQL 
define('DB_PASS', '');  // Senha da conta MySQL 

/* Opções pela paginação */ 
define('PAGINA_LIMIT', 5);       // Limite de links antes e depois da página atual 
define('PAGINA_CLASS', 'page');      // Classe dos links "normais" 
define('PAGINA_CURRENT_CLASS', 'active');   // Classe do link da página atual
define('PAGINA_NEXTLINK_CLASS', 'next');   // Classe do link "Próximo" 
define('PAGINA_PREVIOUSLINK_CLASS', 'previous'); // Classe do link "Anterior" 
define('PAGINA_PERPAGE', 7);      // Número de elementos por página 
define('PAGINA_LINK', '/teste2.php?page={nb}');   // Estrutura dos link gerados 



/* Definição da função getLink() 
 . Parâmetro: 
 .  @page Int : Página 
 .*/ 
function getLink($nb) { 
 return str_replace('{nb}', (string) $nb, PAGINA_LINK); 
} 



/* Definição da função paginação() 
 . Parâmetros: 
 .  @table String: Nome da tabela
 .  @current Int: Página atual 
 .*/ 
function paginação($table, $current = 1) { 
 echo '<ul class="paginação">'; 
  
 /* Contamos o número de entradas na tabela e o número de páginas */ 
 try { 
  $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS); 
 } catch(PDOException $e) { 
  echo 'Erro durante a conexão ao servidor MySQL.<br/>'.$e->getMessage(); 
  return; 
 } 
  
 $sql = 'SELECT COUNT(*) AS nb FROM '.$table; 
 $req = $pdo->query($sql); 
 $data = $req->fetch(); 
 $nb = $data['nb']; 
  
 $nbPage = ceil($nb / PAGINA_PERPAGE); 
  
  
 /* Exibir o link "Anterior" se a página atual não for a primeira */ 
 if($current !== 1) { 
  echo '<li><a href="'.getLink($current - 1).'" class="'.PAGINA_PREVIOUSLINK_CLASS.'">Anterior</a></li>'; 
 } 
  
 /* Exibir os links antes da página atual */ 
 for($i = ($current - PAGINA_LIMIT) ; $i < $current ; $i++) { 
  if($i > 0) { 
   echo '<li><a href="'.getLink($i).'" class="'.PAGINA_CLASS.'">'.$i.'</a></li>'; 
  } 
 } 
  
 /* Exibir o link da página atual */ 
 echo '<li><a href="'.getLink($current).'" class="'.PAGINA_CURRENT_CLASS.'">'.$current.'</a></li>'; 
  
 /* Exibir os seguintes links */ 
 $nb = 0; 
 for($i = ($current + 1) ; $i <= $nbPage ; $i++) { 
  if($nb < PAGINA_LIMIT) { 
   echo '<li><a href="'.getLink($i).'" class="'.PAGINA_CLASS.'">'.$i.'</a></li>'; 
   $nb++; 
  } 
 } 
  
 /* Exibir o link "Próximo" se a página atual não for a última */ 
 if($current < $nbPage) { 
  echo '<li><a href="'.getLink($current + 1).'" class="'.PAGINA_NEXTLINK_CLASS.'"> Próximo </a></li>'; 
 } 
  
 echo '</ul>'; 
} 

if(isset($_GET['página']) && (int) $_GET['página'] !== 0) { 
 $page = (int) $_GET['página']; 
} else { 
 $page = 1; 
} 

paginação('a_tabela', $página); 
?>

Estilo CSS


.paginação { 
 margin: 0px; 
 list-style: none; 
 padding: 0px; 
} 

.paginação li { 
 float:left; 
} 

.paginação li a { 
 border: solid 1px black; 
 color: black; 
 padding-left: 4px; 
 padding-right: 4px; 
 margin-left: 3px; 
 margin-right: 3px; 
 text-decoration: none; 
} 

.paginação li a.active { 
 border-color: red; 
} 

.paginação li a.next, .paginação li a.previous { 

} 

.paginação li a.página { 

}



Tradução feita por Lucia Maurity y Nouira

Veja também

Artigo original publicado por . Tradução feita por pintuda.
Este documento, intitulado 'PHP - Paginação', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.