Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Tenho uma paginação funcionando perfeitamente, porém necessito de otimizá-la.
Quero deixá-la com o seguinte formato:
1 | 2 | 3 | 4 | 5 | ... | 80 | 81 | 82 | 83 | 84 | próxima
Ou seja, quero mostrar os 5 primeiros links, ocultar os posteriores e mostrar os 5 últimos...
Os links anterior e próxima, ficam ocultos no início e fim da paginação, respectivamente.
Neste formato, posso evitar que os links (números) fiquem sendo todos exibidos.
Desde já agradeço a ajuda.
<div class="paginacao">
<?php
# Número total de páginas
$Npg = ceil($tr / $NumReg);
$Npg++;
if(isset($_GET['c'])) {
$categoria = '&c=' . $_GET['c'];
}
else {
$categoria = NULL;
}
# Verifica se esta na primeira página, se nao estiver ele libera o link para anterior
if ($pag > 1) {
echo "<a href=\"?area=" . $_GET["area"] . $categoria . "&pag=" . ($pag - 1) . "\" title=\"Página anterior\" class=\"pagina-anterior titulo\">Anterior</a>";
}
else {
echo ""; # Caso contrário oculta o link "anterior"
}
# Faz aparecer os numeros das páginas entre os links ANTERIOR e PROXIMA
for($i = 1; $i < $Npg ; $i++) {
# Verifica a página que o navegante esta e retira o link do número para identificar visualmente
if($pag == $i) {
echo "<a title=\"Página atual\" class=\"pga\">" . $i . "</a>";
}
else {
# Acrescenta os links para cada página
$i2 = $i;
echo "<a href=\"?area=" . $_GET["area"] . $categoria . "&pag=" . $i2 . "\" title=\"Página " . $i2 . "\" class=\"pg\">" . $i . "</a>";
}
}
# Verifica se esta na ultima página, se nao estiver ele libera o link para próxima
if ($pag + 1 < $Npg) {
echo "<a href=\"?area=" . $_GET["area"] . $categoria . "&pag=".($pag + 1) . "\" title=\"Próxima página\" class=\"proxima-pagina\">Próxima</a>";
}
else {
echo ""; # Caso contrário oculta o link "próxima"
}
?>
</div>Obrigado Andrey.
Mas teria outra solução? Implementar no código acima, já que uso o código em meus projetos.
Vou estudar melhor a classe.
a logica esta aqui
for($i = 1; $i < $Npg ; $i++) {
comece o for da sua pagina e coloquei um limite acima, exemplo, limite de 5,
comecando pela pagina 3
assim vai mostrar da pagina 3 a 8, mas tem q fazer a validacao antes de mostrar...
Olá Igor,
Não sei se é esta sua idéia, mas fiz assim:
$limite = $pag;
$limite += 4;
$limite = $limite >= $Npg ? $Npg : $limite;
for($i = $pag; $i <= $limite ; $i++) {
# Verifica a página que o navegante esta e retira o link do número para identificar visualmente
if($pag == $i) {
echo "<a title=\"Página atual\" class=\"pga\">" . $i . "</a>";
}
else {
# Acrescenta os links para cada página
$i2 = $i;
echo "<a href=\"?area=" . $_GET["area"] . $categoria . "&pag=" . $i2 . "\" title=\"Página " . $i2 . "\" class=\"pg\">" . $i . "</a>";
}
}
Estando na página 5, a paginação fica assim:
| 5 | 6 | 7 | 8 | 9 | próxima
Assim exibe apenas 5, contando o link da página atual.
Gostaria de manter 3 antes e 3 depois:
Anterior | 2 | 3 | 4 | 5 | 6 | 7 | 8 | próxima
Desde já agradeço à atenção.
entao, siga a logica, um for pra 3 mais e outro for pra 3 menos, lembrando, so vou citar pq nao eh usual, e muitos desconhecem, você tb pode usar o for com decremento
for($i=5;$i>0;$i--){...
assim da pra fazer o menos...
Consegui. Acrescentei o código acima do for principal.
if($pag >= 1) {
for($j = $pag - 3; $j < $pag; $j++) {
# Verifica a página que o navegante esta e retira o link do número para identificar visualmente
if($pag != $j && $j > 0) {
# Acrescenta os links para cada página
$j2 = $j;
echo "<a href=\"?area=" . $_GET["area"] . $categoria . "&pag=" . $j2 . "\" title=\"Página " . $j2 . "\" class=\"pg\">" . $j . "</a>";
}
}
}
Obrigado pela ajuda.
Dá uma olhada aqui :seta: https://github.com/andreyknupp/Paginator