
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.
<?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);
?>
.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 {
}