Ir para conteúdo
Fórum Script Brasil
  • 0

Paginação de strings que vem do banco de dados


AkioKawakami

Pergunta

Olá de novo pessoal,

Bom, hoje é o seguinte, estou com um sistema de paginação, porém ele tem um defeito.

Se ele vê que o banco gera 1000 páginas, ele mostra as mil páginas.

O que eu gostaria é que quando o número de páginas mostrados do indice chegasse a 5 ele não mostrasse o resta da quantidade de páginas, mas sim um "...", e quando ele chegasse na página 5 o indice mostrasse as páginas até a 10, e antes do número 5 um "...", e depois da página 10 se tivesse outras páginas mostrasse um "..."

Bom irei mostrar imagens para deixar mais lúdico o que eu necessito:

Forma de paginação do meu script:

pag.png

Forma que eu gostaria:

<<Anterior [1] 2 3 4 5 ... Próximo>>

Ai se o usuário chega na página 5:

<<Anterior ... 4 [5] 6 7 8 9 ... Próximo>>

Bom é mais o menos isso que eu queria, se alguém puder me ajudar eu agradeço! Estou tentando fazer esse efeito na paginação faz tempo!

Ah, e ai vai meu script se alguém puder editar ele pra mim já eu agradeço:

<?php include('conexao_com_o_bd.php'); ?>
<?php 
$pagessize = 20; // Quantos registros por página vai ser mostrado      
 if($_GET['pages']){
     $pages = $_GET['pages'];
    }else{
    $pages = 0;
    } 
?>


<table width="700" align="right" cellpadding="0" cellspacing="20" border="0">

    <tr>
        <td><p><font face="Calibri">Veja nossos artigos:</font></p>
          <p> </p>
        <p><font face="Calibri">
        
        <?php
        
            
$sql = "SELECT * FROM artigos_entrevistas WHERE publicado = 1 AND tipo = 1 ORDER BY data ASC";

$resultado = mssql_query($sql, $link) or die ("Não foi possível executar a consulta");  

$nrecs = mssql_num_rows($resultado);
     
   $npages = ceil($nrecs/$pagessize);
   $npages++;
    $startrec = $pagessize * $pages;
     $n = 0;
    $s = 0;

while ($linha=mssql_fetch_array($resultado)) {
    if(($n>=$startrec) &&($s<$pagessize)){
    $id = $linha["id"];
    $titulo = $linha['titulo'];
    
    echo "<p><a href='artigos_det.php?id=".$id."'><li>".$titulo."</li></p>";
    
    $s++;
    
    }
    
    $n++;
    
}    
        ?>
        
    </tr>
<tr>
<td align="center"><?php
      if ( $pages > 0) {
    echo "<a href='".$PHP_SELF."?&pages=".($pages-1) ."' class=pg><b><font face=Calibri size=2> « Anterior</font></b></a>";
     } else {
     echo "<font color=#CCCCCC face=Calibri size=2> « Anterior</font>";
     }
     
     for($i=1;$i<$npages;$i++) { 
         if ($pages == ($i-1)) {                         
        echo " <span class=pgoff><font face=Calibri color=#cf111111  size=2><strong> [$i]</strong></font></span> ";                
        } else {                        
        $x = $i-1;                        
        echo " <a href='".$PHP_SELF."?&pages=$x' class=pg><b><font face=Calibri  size=2> $i</font></b></a> ";                
        }        
    }
    
    if (($pages+2) < $npages) {                
     echo "<a href='".$PHP_SELF."?&pages=".($pages+1)."' class=pg><b><font
      face=Calibri  size=2> Próximo »</font></b></a>";        
     } else {                 
     echo "<font color=#CCCCCC face=Calibri  size=2> Próximo »</font>";        
     }
      ?></td>
</tr>
</table>

Obrigado desde já galera! Valeu!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Opa, tudo joia?

Bom, eu não vou analizar seu código todo para lhe dar a resposta exata. Vou tentar te passar a idéia e você adapta ok?

Para fazer o que você quer, uma das maneiras é modificar o "for" que gera a paginação.

Ao invés de colocar

for($i=1;$i<$npages;$i++) {
use
for ($i = $pagatual - 3; $i <= ($pagatual + 3); $i++)
{
    if ($pagatual > 0 and $pagatual < $totaldepaginas) { //Seu codigo }
}

sendo $pagatual, a página atual que você se encontra (duhh hehe)

Assim, ao invés de você ter um for que passa por todas as páginas, ele vai mostrar apenas as 3 anteriores, a atual e as 3 posteriores. Temos que colocar um $pagatual > 0 para evitar q pessoas q estão na página 1 vejam -2 na páginação por exemplo. Também tem o $pagatual < $totaldepaginas para evitar que você veja mais páginas do que existam.

Qualquer dúvida pergunte ai. Flws

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...